[ Sorry if I break the threading on this, I had to pull it off gmane ]

On Tue, 7 May 2013, Tony Lindgren wrote:> OK got it narrowed down to CONFIG_DEBUG_SPINLOCK=y causing the problem> with commit 8a965b3b. Ain't nothing like bisecting and booting and then> diffing .config files on top of that.

I'm unable to boot with slab on current Linus -master, and bisected itdown almost as far as Tony did before trying SLUB and then finding thisthread. My box is a standard x86-64, nothing exciting and spinlockdebugging isn't on.

A few printks stuffed into Christoph's code:

cache ffff88047f000080 at index 5creating slab cache at 6create special cache #1 (this is kmalloc_caches[1])cache ffff88047f0001c0 at index 7creating slab cache at 8creating slab cache at 9creating slab cache at 10... more get createdPulling this into the code from commit 8a965b3b:

for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) { if (!kmalloc_caches[i]) { kmalloc_caches[i] = create_kmalloc_cache(NULL, 1 << i, flags); /* * Caches that are not of the two-to-the-power-of size. * These have to be created immediately after the * earlier power of two caches */ if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6) kmalloc_caches[1] = create_kmalloc_cache(NULL, 96, flags); if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[2] && i == 7) kmalloc_caches[2] = create_kmalloc_cache(NULL, 192, flags); } }kmalloc_caches[7] was not null, and so kmalloc_caches[2] was nevercreated.

- /*- * Caches that are not of the two-to-the-power-of size.- * These have to be created immediately after the- * earlier power of two caches- */- if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)- kmalloc_caches[1] = create_kmalloc_cache(NULL, 96, flags);+ /*+ * Caches that are not of the two-to-the-power-of size.+ * These have to be created immediately after the+ * earlier power of two caches+ */+ if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)+ kmalloc_caches[1] = create_kmalloc_cache(NULL, 96, flags);