On Tue, Jul 26, Konrad Rzeszutek Wilk wrote:
> On Tue, Jul 26, 2011 at 01:52:14PM +0200, Olaf Hering wrote:
> > 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);
>
> Why the BUG? Ah you just copied it from xen_unbind_timer.
> Hm, I wonder if we actually need that BUG_ON.
A quick grep did not show up the place where
/sys/devices/system/cpu/cpu0/online would have been created. Since that
file is missing in my guest I think cpu0 can not be shutdown, So that
BUG_ON() can probably go.
Olaf
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|