[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 05/11] xen/hvm kexec: unregister debugirq during reboot


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: Olaf Hering <olaf@xxxxxxxxx>
  • Date: Thu, 28 Jul 2011 15:23:05 +0200
  • Delivery-date: Thu, 28 Jul 2011 06:26:47 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Unregister the debugirq during kexec, otherwise the kexec kernel will
run into the BUG() in bind_virq_to_irq() when trying to bind to the
still registered virq.

v2:
 use kexec_is_loaded() function

Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>

---
 arch/x86/xen/smp.c |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

Index: linux-3.0/arch/x86/xen/smp.c
===================================================================
--- linux-3.0.orig/arch/x86/xen/smp.c
+++ linux-3.0/arch/x86/xen/smp.c
@@ -16,6 +16,8 @@
 #include <linux/err.h>
 #include <linux/slab.h>
 #include <linux/smp.h>
+#include <linux/kexec.h>
+#include <linux/syscore_ops.h>
 
 #include <asm/paravirt.h>
 #include <asm/desc.h>
@@ -45,6 +47,25 @@ static DEFINE_PER_CPU(int, xen_debug_irq
 static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id);
 static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id);
 
+static void xen_hvn_smp_shutdown(void)
+{
+       int cpu;
+
+       if (!kexec_is_loaded())
+               return;
+
+       for_each_online_cpu(cpu) {
+               if (per_cpu(xen_debug_irq, cpu) < 0)
+                       continue;
+               unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL);
+               per_cpu(xen_debug_irq, cpu) = -1;
+       }
+}
+
+static struct syscore_ops xen_hvn_smp_syscore_ops = {
+       .shutdown = xen_hvn_smp_shutdown,
+};
+
 /*
  * Reschedule call back.
  */
@@ -525,6 +546,7 @@ static void __init xen_hvm_smp_prepare_c
                return;
        xen_init_lock_cpu(0);
        xen_init_spinlocks();
+       register_syscore_ops(&xen_hvn_smp_syscore_ops);
 }
 
 static int __cpuinit xen_hvm_cpu_up(unsigned int cpu)


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.