• Joonsoo Kim's avatar
    mm/slab: fix unalignment problem on Malta with EVA due to slab merge · 95069ac8
    Joonsoo Kim authored
    Unlike SLUB, sometimes, object isn't started at the beginning of the
    slab in SLAB.  This causes the unalignment problem after slab merging is
    supported by commit 12220dea ("mm/slab: support slab merge").
    
    Following is the report from Markos that fail to boot on Malta with EVA.
    
        Calibrating delay loop... 19.86 BogoMIPS (lpj=99328)
        pid_max: default: 32768 minimum: 301
        Mount-cache hash table entries: 4096 (order: 0, 16384 bytes)
        Mountpoint-cache hash table entries: 4096 (order: 0, 16384 bytes)
        Kernel bug detected[#1]:
        CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.17.0-05639-g12220dea #1631
        task: 1f04f5d8 ti: 1f050000 task.ti: 1f050000
        epc   : 80141190 alloc_unbound_pwq+0x234/0x304
            Not tainted
        ra    : 80141184 alloc_unbound_pwq+0x228/0x304
        Process swapper/0 (pid: 1, threadinfo=1f050000, task=1f04f5d8, tls=00000000)
        Call Trace:
          alloc_unbound_pwq+0x234/0x304
          apply_workqueue_attrs+0x11c/0x294
          __alloc_workqueue_key+0x23c/0x470
          init_workqueues+0x320/0x400
          do_one_initcall+0xe8/0x23c
          kernel_init_freeable+0x9c/0x224
          kernel_init+0x10/0x100
          ret_from_kernel_thread+0x14/0x1c
        [ end trace cb88537fdc8fa200 ]
        Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
    
    alloc_unbound_pwq() allocates slab object from pool_workqueue.  This
    kmem_cache requires 256 bytes alignment, but, current merging code
    doesn't honor that, and merge it with kmalloc-256.  kmalloc-256 requires
    only cacheline size alignment so that above failure occurs.  However, in
    x86, kmalloc-256 is luckily aligned in 256 bytes, so the problem didn't
    happen on it.
    
    To fix this problem, this patch introduces alignment mismatch check in
    find_mergeable().  This will fix the problem.
    Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Reported-by: default avatarMarkos Chandras <Markos.Chandras@imgtec.com>
    Tested-by: default avatarMarkos Chandras <Markos.Chandras@imgtec.com>
    Acked-by: default avatarChristoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    95069ac8
slab_common.c 23.7 KB