WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH][BUG#228] fix race with smp_resume()

To: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH][BUG#228] fix race with smp_resume()
From: Ryan Harper <ryanh@xxxxxxxxxx>
Date: Wed, 28 Sep 2005 11:43:18 -0500
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Wed, 28 Sep 2005 16:40:59 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <20050926233015.GE22162@xxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <20050926233015.GE22162@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.6+20040907i
* Ryan Harper <ryanh@xxxxxxxxxx> [2005-09-27 09:19]:
> This changeset breaks vcpu-hotplug for dom0. 
> 
> changeset:   6464:b3785cbb723b8b355c1282232de0bd1cfbfb3556
> user:        cl349@xxxxxxxxxxxxxxxxxxxx
> 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
ryanh@xxxxxxxxxx


diffstat output:
 process.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

Signed-off-by: Ryan Harper <ryanh@xxxxxxxxxx>
---
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-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>