mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 08:02:56 +00:00
[PATCH] cpu state clean after hot remove
Clean CPU states in order to reuse smp boot code for CPU hotplug. Signed-off-by: Li Shaohua<shaohua.li@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
0bb3184df5
commit
e1367daf3e
7 changed files with 186 additions and 42 deletions
|
@ -152,21 +152,19 @@ static void poll_idle (void)
|
|||
/* We don't actually take CPU down, just spin without interrupts. */
|
||||
static inline void play_dead(void)
|
||||
{
|
||||
/* This must be done before dead CPU ack */
|
||||
cpu_exit_clear();
|
||||
wbinvd();
|
||||
mb();
|
||||
/* Ack it */
|
||||
__get_cpu_var(cpu_state) = CPU_DEAD;
|
||||
|
||||
/* We shouldn't have to disable interrupts while dead, but
|
||||
* some interrupts just don't seem to go away, and this makes
|
||||
* it "work" for testing purposes. */
|
||||
/* Death loop */
|
||||
while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE)
|
||||
cpu_relax();
|
||||
|
||||
/*
|
||||
* With physical CPU hotplug, we should halt the cpu
|
||||
*/
|
||||
local_irq_disable();
|
||||
__flush_tlb_all();
|
||||
cpu_set(smp_processor_id(), cpu_online_map);
|
||||
enable_APIC_timer();
|
||||
local_irq_enable();
|
||||
while (1)
|
||||
__asm__ __volatile__("hlt":::"memory");
|
||||
}
|
||||
#else
|
||||
static inline void play_dead(void)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue