When cpu is offlined, it cannot access per cpu variable at all. This patch avoids using per_cpu variable inside play_dead. Signed-off-by: Shan Haitao Signed-off-by: Wei Gang diff -r dac86c85222e xen/arch/x86/acpi/cpu_idle.c --- a/xen/arch/x86/acpi/cpu_idle.c Fri Feb 18 19:07:11 2011 +0000 +++ b/xen/arch/x86/acpi/cpu_idle.c Wed Feb 23 17:05:32 2011 +0800 @@ -569,7 +569,8 @@ static void acpi_dead_idle(void) { case ACPI_CSTATE_EM_FFH: /* Not treat interrupt as break event */ - mwait_idle_with_hints(cx->address, 0); + __monitor((void *)&mwait_wakeup(smp_processor_id()), 0, 0); + __mwait(cx->address, 0); break; case ACPI_CSTATE_EM_SYSIO: inb(cx->address);