On Tue, Jul 26, 2011 at 01:52:13PM +0200, Olaf Hering wrote:
> Unregister the debugirq during kexec, otherwise the kexec kernel can not
> bind to the still registered virq.
What about the other ones? Say spinlock and the timer ones?
>
> Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>
>
> ---
> arch/x86/xen/smp.c | 17 +++++++++++++++++
> 1 file changed, 17 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,7 @@
> #include <linux/err.h>
> #include <linux/slab.h>
> #include <linux/smp.h>
> +#include <linux/syscore_ops.h>
>
> #include <asm/paravirt.h>
> #include <asm/desc.h>
> @@ -45,6 +46,21 @@ 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;
> + 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 +541,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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|