linux/arch/x86/kernel/cpu
Rafael J. Wysocki 8735728ef8 x86 MCE: Fix CPU hotplug problem with multiple multicore AMD CPUs
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: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Andi Kleen <andi@firstfloor.org>
Tested-by: Mark Langsdorf <mark.langsdorf@amd.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-08-23 17:49:19 +02:00
..
cpufreq [CPUFREQ][2/2] preregister support for powernow-k8 2008-08-08 16:00:49 -04:00
mcheck x86 MCE: Fix CPU hotplug problem with multiple multicore AMD CPUs 2008-08-23 17:49:19 +02:00
mtrr x86: work around MTRR mask setting, v2 2008-08-22 14:12:31 +02:00
addon_cpuid_features.c x86: PAT Update validate_pat_support for intel CPUs 2008-08-21 13:27:34 +02:00
amd_64.c x86_64: further cleanup of 32-bit compat syscall mechanisms 2008-07-16 11:08:27 +02:00
amd.c x86: reduce force_mwait visibility 2008-07-18 15:55:09 -07:00
bugs_64.c x86: move bugs_64.c to cpu/bugs_64.c 2008-06-03 14:43:00 -07:00
bugs.c x86: fdiv bug detection fix 2008-07-31 23:56:27 +02:00
centaur_64.c x86: get x86_phys_bits early 2008-07-14 09:24:16 +02:00
centaur.c x86: clean up cpu capabilities accesses, centaur.c 2008-04-17 17:40:51 +02:00
common_64.c Merge branches 'x86/urgent', 'x86/amd-iommu', 'x86/apic', 'x86/cleanups', 'x86/core', 'x86/cpu', 'x86/fixmap', 'x86/gart', 'x86/kprobes', 'x86/memtest', 'x86/modules', 'x86/nmi', 'x86/pat', 'x86/reboot', 'x86/setup', 'x86/step', 'x86/unify-pci', 'x86/uv', 'x86/xen' and 'xen-64bit' into x86/for-linus 2008-07-21 16:37:17 +02:00
common.c x86: change identify_cpu to static 2008-07-08 12:48:35 +02:00
cpu.h x86: make 64-bit identify_cpu use cpu_dev 2008-07-08 07:47:39 +02:00
cyrix.c x86: fix "kernel won't boot on a Cyrix MediaGXm (Geode)" 2008-08-20 11:31:00 +02:00
feature_names.c x86: arch/x86/kernel/cpu/feature_names.c - use angle brackets for include 2008-04-17 17:40:57 +02:00
intel_64.c x86: get x86_phys_bits early 2008-07-14 09:24:16 +02:00
intel_cacheinfo.c cpumask: change cpumask_of_cpu_ptr to use new cpumask_of_cpu 2008-07-26 16:40:33 +02:00
intel.c x86: APIC: remove apic_write_around(); use alternatives 2008-07-18 12:51:21 +02:00
Makefile x86: seperate funcs from setup_64 to cpu common_64.c 2008-07-08 12:48:34 +02:00
perfctr-watchdog.c x86, perfctr: don't use CCCR_OVF_PMI1 on Pentium 4Ds 2008-08-15 13:58:33 +02:00
proc.c NR_CPUS: Replace NR_CPUS in arch/x86/kernel/cpu/proc.c 2008-07-20 10:21:09 +02:00
transmeta.c x86: clean up cpu capabilities accesses, transmeta.c 2008-04-17 17:40:51 +02:00
umc.c x86: coding style fixes to arch/x86/kernel/cpu/umc.c 2008-04-17 17:40:49 +02:00