• Ravikiran G Thirumalai's avatar
    [PATCH] NUMA slab locking fixes: fix cpu down and up locking · 4484ebf1
    Ravikiran G Thirumalai authored
    This fixes locking and bugs in cpu_down and cpu_up paths of the NUMA slab
    allocator.  Sonny Rao <sonny@burdell.org> reported problems sometime back on
    POWER5 boxes, when the last cpu on the nodes were being offlined.  We could
    not reproduce the same on x86_64 because the cpumask (node_to_cpumask) was not
    being updated on cpu down.  Since that issue is now fixed, we can reproduce
    Sonny's problems on x86_64 NUMA, and here is the fix.
    
    The problem earlier was on CPU_DOWN, if it was the last cpu on the node to go
    down, the array_caches (shared, alien) and the kmem_list3 of the node were
    being freed (kfree) with the kmem_list3 lock held.  If the l3 or the
    array_caches were to come from the same cache being cleared, we hit on
    badness.
    
    This patch cleans up the locking in cpu_up and cpu_down path.  We cannot
    really free l3 on cpu down because, there is no node offlining yet and even
    though a cpu is not yet up, node local memory can be allocated for it.  So l3s
    are usually allocated at keme_cache_create and destroyed at
    kmem_cache_destroy.  Hence, we don't need cachep->spinlock protection to get
    to the cachep->nodelist[nodeid] either.
    
    Patch survived onlining and offlining on a 4 core 2 node Tyan box with a 4
    dbench process running all the time.
    Signed-off-by: default avatarAlok N Kataria <alokk@calsoftinc.com>
    Signed-off-by: default avatarRavikiran Thirumalai <kiran@scalex86.org>
    Cc: Christoph Lameter <christoph@lameter.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    4484ebf1
slab.c 99.6 KB