On Wed, 2009-11-25 at 20:21 +0200, Pekka Enberg wrote:The unlikely() annotation in slab_alloc() covers too much of the expression.[]
It's actually very likely that the object is not NULL so use unlikely() only
for the __GFP_ZERO expression like SLAB does.
+++ b/mm/slub.c
@@ -1735,7 +1735,7 @@ static __always_inline void *slab_alloc(struct kmem_cache *s,
- if (unlikely((gfpflags & __GFP_ZERO) && object))
+ if (unlikely(gfpflags & __GFP_ZERO) && object)
memset(object, 0, objsize);
so why not use
if (unlikely(gfpflags & __GFP_ZERO) && likely(object))