From ak@suse.de Mon Apr 30 21:09:36 2007 Date: Tue, 1 May 2007 05:58:20 +0200 (CEST) From: Andi Kleen To: arjan@linux.intel.com, patches@x86-64.org, linux-kernel@vger.kernel.org Subject: [PATCH] [22/30] x86_64: Remove CONFIG_REORDER The option never worked well and functionlist wasn't well maintained. Also it made the build very slow on many binutils version. So just remove it. Cc: arjan@linux.intel.com Signed-off-by: Andi Kleen --- mm/slub.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) Index: slub/mm/slub.c =================================================================== --- slub.orig/mm/slub.c 2007-05-07 12:47:32.000000000 -0700 +++ slub/mm/slub.c 2007-05-07 13:48:13.000000000 -0700 @@ -971,7 +971,7 @@ static struct page *allocate_slab(struct static void setup_object(struct kmem_cache *s, struct page *page, void *object) { - if (SlabDebug(page)) { + if (s->flags & DEBUG_DEFAULT_FLAGS) { init_object(s, object, 0); init_tracking(s, object); } @@ -1001,12 +1001,11 @@ static struct page *new_slab(struct kmem n = get_node(s, page_to_nid(page)); if (n) atomic_long_inc(&n->nr_slabs); + + page->inuse = 0; + page->cpu_freelist = NULL; page->offset = s->offset / sizeof(void *); page->slab = s; - page->flags |= 1 << PG_slab; - if (s->flags & (SLAB_DEBUG_FREE | SLAB_RED_ZONE | SLAB_POISON | - SLAB_STORE_USER | SLAB_TRACE)) - SetSlabDebug(page); start = page_address(page); end = start + s->objects * s->size; @@ -1024,11 +1023,20 @@ static struct page *new_slab(struct kmem set_freepointer(s, last, NULL); page->freelist = start; - page->cpu_freelist = NULL; - page->inuse = 0; -out: - if (flags & __GFP_WAIT) - local_irq_disable(); + + /* + * page->inuse must be visible when PageSlab(page) becomes + * true for targeted reclaim + */ + smp_wmb(); + __SetPageSlab(page); + if (s->flags & (SLAB_DEBUG_FREE | SLAB_RED_ZONE | SLAB_POISON | + SLAB_STORE_USER | SLAB_TRACE)) + SetSlabDebug(page); + + out: + if (flags & __GFP_WAIT) + local_irq_disable(); return page; }