on 22/12/2012 13:21 Konstantin Belousov said the following:
> This is due to the vtoslab() returning NULL. Since slabref is dereferenced
> later, clang tries to be helpful as usual and converts the !(p->flags &
> PG_SLAB) case from vtoslab() into the jump to un2 instruction if vtoslab()
> result is NULL.
> 
> So instead of KASSERT triggering the next line, you see this improvement.

Interesting.  Thank you for the explanation.

But looking at the code I think that slabref->us_keg access _before_ KASSERT
is the culprit?  I.e. even with GCC we could get a page fault before the
KASSERT is reached (modulo reordering)?

-- 
Andriy Gapon
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to