2005-11-28 23:27:45

by Shaohua Li

[permalink] [raw]
Subject: trival patch: disable interrupt in play_dead


It's physical CPU hotplug now, so disable interrupt in play_dead.

Signed-off-by: Shaohua Li <[email protected]>
---

linux-2.6.14-root/arch/x86_64/kernel/process.c | 5 +++--
linux-2.6.14-root/include/asm-x86_64/system.h | 2 ++
2 files changed, 5 insertions(+), 2 deletions(-)

diff -puN arch/x86_64/kernel/process.c~cpuhp-disable-interrupt arch/x86_64/kernel/process.c
--- linux-2.6.14/arch/x86_64/kernel/process.c~cpuhp-disable-interrupt 2005-11-28 22:20:28.000000000 -0800
+++ linux-2.6.14-root/arch/x86_64/kernel/process.c 2005-11-28 22:20:28.000000000 -0800
@@ -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)
diff -puN include/asm-x86_64/system.h~cpuhp-disable-interrupt include/asm-x86_64/system.h
--- linux-2.6.14/include/asm-x86_64/system.h~cpuhp-disable-interrupt 2005-11-28 22:20:28.000000000 -0800
+++ linux-2.6.14-root/include/asm-x86_64/system.h 2005-11-28 22:20:28.000000000 -0800
@@ -315,6 +315,8 @@ static inline unsigned long __cmpxchg(vo
#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() \
({ \
_