From: Jeremy Fitzhardinge on 19 May 2010 14:10 On 05/19/2010 08:36 AM, Ian Campbell wrote: > The core suspend/resume code is run from stop_machine on CPU0 but > parts of the suspend/resume machinery (including xen_arch_resume) are > run on whichever CPU happened to schedule the xenwatch kernel thread. > > As part of the non-core resume code xen_arch_resume is called in order > to restart the timer tick on non-boot processors. The boot processor > itself is taken care of by core timekeeping code. > > xen_arch_resume uses smp_call_function which does not call the given > function on the current processor. This means that we can end up with > one CPU not receiving timer ticks if the xenwatch thread happened to > be scheduled on CPU > 0. > > Use on_each_cpu instead of smp_call_function to ensure the timer tick > is resumed everywhere. > Argh, that seems to be a pretty common trap to fall into. Looks OK (but unfortunately doesn't fix my other problem). Acked-by: Jeremy Fitzhardinge <jeremy.fitzhardinge(a)citrix.com> J > Signed-off-by: Ian Campbell <ian.campbell(a)citrix.com> > Cc: Jeremy Fitzhardinge <jeremy(a)goop.org> > Cc: Stable Kernel <stable(a)kernel.org> > --- > arch/x86/xen/suspend.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/xen/suspend.c b/arch/x86/xen/suspend.c > index 987267f..a9c6611 100644 > --- a/arch/x86/xen/suspend.c > +++ b/arch/x86/xen/suspend.c > @@ -60,6 +60,6 @@ static void xen_vcpu_notify_restore(void *data) > > void xen_arch_resume(void) > { > - smp_call_function(xen_vcpu_notify_restore, > - (void *)CLOCK_EVT_NOTIFY_RESUME, 1); > + on_each_cpu(xen_vcpu_notify_restore, > + (void *)CLOCK_EVT_NOTIFY_RESUME, 1); > } > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: [RFC] Unified Ring Buffer (Next Generation) Next: autofs: Pushdown the bkl from ioctl |