Comment 0 for bug 1475204

Revision history for this message
Gavin Guo (mimi0213kimo) wrote :

[Impact]

commit 4066c33d0308f8 breaks booting under KVM
https://lkml.org/lkml/2015/6/26/341

I can no longer boot Linus's tree under KVM using a 32-bit i386 build;
it just hangs before any messages get sent to the serial console.

This following commit breaks 32-bit and 64-bit x86 if you have
CONFIG_SLAB enabled. When I switched to CONFIG_SLUB, the kernel
boots. So it appears this commit is breaking kernel configurations
with CONFIG_SLAB enabled.

It bisects down to:

commit 4066c33d0308f87e9a3b0c7fafb9141c0bfbfa77
Author: Gavin Guo <email address hidden>
Date: Wed Jun 24 16:55:54 2015 -0700

    mm/slab_common: support the slub_debug boot option on specific object size

    The slub_debug=PU,kmalloc-xx cannot work because in the
    create_kmalloc_caches() the s->name is created after the
    create_kmalloc_cache() is called. The name is NULL in the
    create_kmalloc_cache() so the kmem_cache_flags() would not set the
    slub_debug flags to the s->flags. The fix here set up a kmalloc_names
    string array for the initialization purpose and delete the dynamic name
    creation of kmalloc_caches.

    [<email address hidden>: s/kmalloc_names/kmalloc_info/, tweak comment text]
    Signed-off-by: Gavin Guo <email address hidden>
    Acked-by: Christoph Lameter <email address hidden>
    Cc: Pekka Enberg <email address hidden>
    Cc: David Rientjes <email address hidden>
    Cc: Joonsoo Kim <email address hidden>
    Signed-off-by: Andrew Morton <email address hidden>
    Signed-off-by: Linus Torvalds <email address hidden>

[Fix]

[PATCH] Fix kmalloc slab creation sequence
https://lkml.org/lkml/2015/6/29/231

The patch is to fix the kmalloc_caches initialization sequence, that the 96, and 192 bytes
kmem_cache should be enabled after the normal 2's exponential size.

This patch restores the slab creation sequence that was broken by commit
4066c33d0308f8 and also reverts the portions that introduced the
KMALLOC_LOOP_XXX macros. Those can never really work since the slab creation
is much more complex than just going from a minimum to a maximum number.

The latest upstream kernel boots cleanly on my machine with a 64 bit x86
configuration under KVM using either SLAB or SLUB.

[Test cases]

The bug can't be reproduced on the Ubuntu kernel by enabling the slab allocator with
i386 and x86_64 architecture. However, in case anyone will hit the bug, the patch
should be applied in the Ubuntu kernel.