2 messages in com.xensource.lists.xen-devel[Xen-devel] [PATCH][BUG#228] fix race...| From | Sent On | Attachments |
|---|---|---|
| Ryan Harper | 26 Sep 2005 16:29 | |
| Ryan Harper | 28 Sep 2005 09:42 |
| Subject: | [Xen-devel] [PATCH][BUG#228] fix race with smp_resume()![]() |
|---|---|
| From: | Ryan Harper (rya...@us.ibm.com) |
| Date: | 09/28/2005 09:42:56 AM |
| List: | com.xensource.lists.xen-devel |
* Ryan Harper <rya...@us.ibm.com> [2005-09-27 09:19]:
This changeset breaks vcpu-hotplug for dom0.
changeset: 6464:b3785cbb723b8b355c1282232de0bd1cfbfb3556 user: cl3...@firebug.cl.cam.ac.uk date: Mon Aug 29 12:40:47 2005 summary: Simplify and fix SMP irq and ipi teardown/setup on suspend/resume.
Specifically, calling vcpu-enable on DOM0 vcpu that has been disabled hangs DOM0:
This patch fixes a race between when the disable cpu is marked online and binding IPIs back to the CPU. In some cases, an IPI would be sent to CPU1 before it had allocated a new evtchn. Moving smp_resume() call before setting the cpu online fixes this race. This fixes [1]bug#228
Please apply.
1. http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=228
-- Ryan Harper Software Engineer; Linux Technology Center IBM Corp., Austin, Tx (512) 838-9253 T/L: 678-9253 rya...@us.ibm.com
diffstat output: process.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-)
Signed-off-by: Ryan Harper <rya...@us.ibm.com>
---
diff -r ce54669c70fc linux-2.6-xen-sparse/arch/xen/i386/kernel/process.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/process.c Wed Sep 28 15:15:20
2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/process.c Wed Sep 28 11:25:51
2005
@@ -112,6 +112,10 @@
#ifdef CONFIG_HOTPLUG_CPU #include <asm/nmi.h> +#ifdef CONFIG_SMP +extern void smp_suspend(void); +extern void smp_resume(void); +#endif /* We don't actually take CPU down, just spin without interrupts. */ static inline void play_dead(void) { @@ -120,6 +124,13 @@ HYPERVISOR_yield();
__flush_tlb_all(); + /* + * Restore IPI/IRQ mappings before marking online to prevent + * race between pending interrupts and restoration of handler. + */ +#ifdef CONFIG_SMP + smp_resume(); +#endif cpu_set(smp_processor_id(), cpu_online_map); } #else @@ -135,10 +146,6 @@ * low exit latency (ie sit in a loop waiting for * somebody to say that they'd like to reschedule) */ -#ifdef CONFIG_SMP -extern void smp_suspend(void); -extern void smp_resume(void); -#endif void cpu_idle (void) { int cpu = _smp_processor_id(); @@ -166,9 +173,6 @@ HYPERVISOR_vcpu_down(cpu); #endif play_dead(); -#ifdef CONFIG_SMP - smp_resume(); -#endif local_irq_enable(); }
_______________________________________________ Xen-devel mailing list Xen-...@lists.xensource.com http://lists.xensource.com/xen-devel




