diff --git a/mm/slub.c b/mm/slub.c index 0c83e6a..c2017a3 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1592,13 +1592,14 @@ static __always_inline void *slab_alloc(struct kmem_cache *s, local_irq_save(flags); c = get_cpu_slab(s, smp_processor_id()); + object = c->freelist; + prefetchw(object); objsize = c->objsize; - if (unlikely(!c->freelist || !node_match(c, node))) + if (unlikely(!object || !node_match(c, node))) object = __slab_alloc(s, gfpflags, node, addr, c); else { - object = c->freelist; c->freelist = object[c->offset]; stat(c, ALLOC_FASTPATH); }