Skip to content

Commit

Permalink
[PATCH] cpu hotplug/x86_64: disable interrupt in play_dead
Browse files Browse the repository at this point in the history
With physical CPU hotplug, the CPU is hot removed and it should not receive
any interrupts.  Disabling interrupt is much safer.  This basically is what we
do in ia64 & x86.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Shaohua Li authored and Linus Torvalds committed Jan 6, 2006
1 parent 766c3f9 commit 1fa744e
Showing 2 changed files with 5 additions and 2 deletions.
5 changes: 3 additions & 2 deletions arch/x86_64/kernel/process.c
Original file line number Diff line number Diff line change
@@ -157,7 +157,7 @@ EXPORT_SYMBOL_GPL(cpu_idle_wait);
DECLARE_PER_CPU(int, cpu_state);

#include <asm/nmi.h>
/* We don't actually take CPU down, just spin without interrupts. */
/* We halt the CPU with physical CPU hotplug */
static inline void play_dead(void)
{
idle_task_exit();
@@ -166,8 +166,9 @@ static inline void play_dead(void)
/* Ack it */
__get_cpu_var(cpu_state) = CPU_DEAD;

local_irq_disable();
while (1)
safe_halt();
halt();
}
#else
static inline void play_dead(void)
2 changes: 2 additions & 0 deletions include/asm-x86_64/system.h
Original file line number Diff line number Diff line change
@@ -315,6 +315,8 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
#define local_irq_enable() __asm__ __volatile__("sti": : :"memory")
/* used in the idle loop; sti takes one instruction cycle to complete */
#define safe_halt() __asm__ __volatile__("sti; hlt": : :"memory")
/* used when interrupts are already enabled or to shutdown the processor */
#define halt() __asm__ __volatile__("hlt": : :"memory")

#define irqs_disabled() \
({ \

0 comments on commit 1fa744e

Please sign in to comment.