Re: [bug] SLUB + mm/slab.c boot crash in -rc9
From: Ingo Molnar
Date: Tue Apr 15 2008 - 02:26:51 EST
you asked me to run with the debug patch attached below. I just tried
vanilla -rc9 (head 120dd64cacd4fb7) and it still crashes with this
config:
http://redhat.com/~mingo/misc/config-Thu_Apr_10_10_41_16_CEST_2008.bad.rc9
debug output is:
http://redhat.com/~mingo/misc/log-Thu_Apr_10_10_41_16_CEST_2008.bad.rc9
so it's probably the first few page allocations (setup_cpu_cache())
going wrong already - suggesting a some fundamental borkage in SLAB?
note, when i change SLAB to SLUB (and keep the config unchanged
otherwise), i get a similar early crash:
http://redhat.com/~mingo/misc/log-Tue_Apr_15_07_24_59_CEST_2008.bad
http://redhat.com/~mingo/misc/config-Tue_Apr_15_07_24_59_CEST_2008.bad
i've also uploaded a bzImage (SLUB, debug patch not applied) that you
can pick up and run on any 32-bit test-system:
http://redhat.com/~mingo/misc/bzImage-Thu_Apr_10_10_41_16_CEST_2008.bad.rc9
it's a relatively generic bzImage that should boot on most whitebox PCs
on most distros as long as you use a pure ext3 setup and might even give
you networking (no modules or initrd is needed). It boots fine on two
other 32-bit PCs i have (an Intel laptop and an AMD desktop).
Ingo
Index: linux/mm/page_alloc.c
===================================================================
--- linux.orig/mm/page_alloc.c
+++ linux/mm/page_alloc.c
@@ -1485,6 +1485,7 @@ restart:
* Happens if we have an empty zonelist as a result of
* GFP_THISNODE being used on a memoryless node
*/
+ WARN_ON(1);
return NULL;
}
Index: linux/mm/slab.c
===================================================================
--- linux.orig/mm/slab.c
+++ linux/mm/slab.c
@@ -1682,6 +1682,7 @@ static void *kmem_getpages(struct kmem_c
flags |= __GFP_RECLAIMABLE;
page = alloc_pages_node(nodeid, flags, cachep->gfporder);
+ WARN_ON(!page);
if (!page)
return NULL;
@@ -2620,6 +2621,7 @@ static struct slab *alloc_slabmgmt(struc
/* Slab management obj is off-slab. */
slabp = kmem_cache_alloc_node(cachep->slabp_cache,
local_flags & ~GFP_THISNODE, nodeid);
+ WARN_ON(!slabp);
if (!slabp)
return NULL;
} else {
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/