[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 5/6] xen/hvm kexec: unregister timer interrupt during reboot
The kexec kernel will crash because the timer interrupt is already registerd with EVTCHNOP_bind_virq. Unbind the event channel during shutdown so that the kexec kernel can reregister the interrupt. Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> --- arch/x86/xen/time.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) Index: linux-3.0/arch/x86/xen/time.c =================================================================== --- linux-3.0.orig/arch/x86/xen/time.c +++ linux-3.0/arch/x86/xen/time.c @@ -14,6 +14,7 @@ #include <linux/kernel_stat.h> #include <linux/math64.h> #include <linux/gfp.h> +#include <linux/syscore_ops.h> #include <asm/pvclock.h> #include <asm/xen/hypervisor.h> @@ -405,12 +406,20 @@ void xen_setup_timer(int cpu) evt->irq = irq; } -void xen_teardown_timer(int cpu) +static void xen_unbind_timer(int cpu) { struct clock_event_device *evt; - BUG_ON(cpu == 0); evt = &per_cpu(xen_clock_events, cpu); - unbind_from_irqhandler(evt->irq, NULL); + if (evt->irq >= 0) { + unbind_from_irqhandler(evt->irq, NULL); + evt->irq = -1; + } +} + +void xen_teardown_timer(int cpu) +{ + BUG_ON(cpu == 0); + xen_unbind_timer(cpu); } void xen_setup_cpu_clockevents(void) @@ -478,6 +487,17 @@ void __init xen_init_time_ops(void) } #ifdef CONFIG_XEN_PVHVM +static void xen_hvmtimer_shutdown(void) +{ + int cpu; + for_each_online_cpu(cpu) + xen_unbind_timer(cpu); +} + +static struct syscore_ops xen_hvmtimer_syscore_ops = { + .shutdown = xen_hvmtimer_shutdown, +}; + static void xen_hvm_setup_cpu_clockevents(void) { int cpu = smp_processor_id(); @@ -506,5 +526,6 @@ void __init xen_hvm_init_time_ops(void) x86_platform.calibrate_tsc = xen_tsc_khz; x86_platform.get_wallclock = xen_get_wallclock; x86_platform.set_wallclock = xen_set_wallclock; + register_syscore_ops(&xen_hvmtimer_syscore_ops); } #endif _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |