• R
    x86 MCE: Fix CPU hotplug problem with multiple multicore AMD CPUs · 8735728e
    Rafael J. Wysocki 提交于
    During CPU hot-remove the sysfs directory created by
    threshold_create_bank(), defined in
    arch/x86/kernel/cpu/mcheck/mce_amd_64.c, has to be removed before
    its parent directory, created by mce_create_device(), defined in
    arch/x86/kernel/cpu/mcheck/mce_64.c .  Moreover, when the CPU in
    question is hotplugged again, obviously the latter has to be created
    before the former.  At present, the right ordering is not enforced,
    because all of these operations are carried out by CPU hotplug
    notifiers which are not appropriately ordered with respect to each
    other.  This leads to serious problems on systems with two or more
    multicore AMD CPUs, among other things during suspend and hibernation.
    
    Fix the problem by placing threshold bank CPU hotplug callbacks in
    mce_cpu_callback(), so that they are invoked at the right places,
    if defined.  Additionally, use kobject_del() to remove the sysfs
    directory associated with the kobject created by
    kobject_create_and_add() in threshold_create_bank(), to prevent the
    kernel from crashing during CPU hotplug operations on systems with
    two or more multicore AMD CPUs.
    
    This patch fixes bug #11337.
    Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
    Acked-by: NAndi Kleen <andi@firstfloor.org>
    Tested-by: NMark Langsdorf <mark.langsdorf@amd.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    8735728e
mce_64.c 21.9 KB