diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2008-09-22 12:54:29 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2008-09-23 05:38:52 -0400 |
commit | 4faac97d44ac27bdbb010a9c3597401a8f89341f (patch) | |
tree | 680f128d2bf1cec0fdc77f7a8cb3f3f54264d282 /arch/x86/kernel/process_32.c | |
parent | 6441402b1f173fa38e561d3cee7c01c32e5281ad (diff) |
x86: prevent stale state of c1e_mask across CPU offline/online
Impact: hang which happens across CPU offline/online on AMD C1E systems.
When a CPU goes offline then the corresponding bit in the broadcast
mask is cleared. For AMD C1E enabled CPUs we do not reenable the
broadcast when the CPU comes online again as we do not clear the
corresponding bit in the c1e_mask, which keeps track which CPUs
have been switched to broadcast already. So on those !$@#& machines
we never switch back to broadcasting after a CPU offline/online cycle.
Clear the bit when the CPU plays dead.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/process_32.c')
-rw-r--r-- | arch/x86/kernel/process_32.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 3b7a1ddcc0bc..4b3cfdf54216 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -88,6 +88,7 @@ static void cpu_exit_clear(void) | |||
88 | cpu_clear(cpu, cpu_callin_map); | 88 | cpu_clear(cpu, cpu_callin_map); |
89 | 89 | ||
90 | numa_remove_cpu(cpu); | 90 | numa_remove_cpu(cpu); |
91 | c1e_remove_cpu(cpu); | ||
91 | } | 92 | } |
92 | 93 | ||
93 | /* We don't actually take CPU down, just spin without interrupts. */ | 94 | /* We don't actually take CPU down, just spin without interrupts. */ |