aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-01-14 14:18:31 +0000
committerKeir Fraser <keir@xen.org>2011-01-14 14:18:31 +0000
commit9d9af7dca878fb6f85ddf3cf3cb43df273f6b5a0 (patch)
tree0ad481426f571d5f7075a9c433d411177b310dae
parent24273c92be16bab4d48561a0d892463a544b0a4a (diff)
downloadxen-9d9af7dca878fb6f85ddf3cf3cb43df273f6b5a0.tar.gz
xen-9d9af7dca878fb6f85ddf3cf3cb43df273f6b5a0.tar.bz2
xen-9d9af7dca878fb6f85ddf3cf3cb43df273f6b5a0.zip
x86 acpi: Fix crash in enable_nonboot_cpus() on wakeup from S3/S4
Bringing a CPU back online can require RCU work to be flushed, because the per-cpu data from last time the CPU was online may not yet be deallocated. Use the new rcu_barrier() interface function to achieve this. Signed-off-by: Keir Fraser <keir@xen.org>
-rw-r--r--xen/arch/x86/acpi/power.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/xen/arch/x86/acpi/power.c b/xen/arch/x86/acpi/power.c
index b4a633d544..5dfdeb431f 100644
--- a/xen/arch/x86/acpi/power.c
+++ b/xen/arch/x86/acpi/power.c
@@ -206,6 +206,7 @@ static int enter_state(u32 state)
enable_cpu:
cpufreq_add_cpu(0);
microcode_resume_cpu(0);
+ rcu_barrier();
mtrr_aps_sync_begin();
enable_nonboot_cpus();
mtrr_aps_sync_end();