Re: [PATCH] clockevent: on resume program the next oneshot tick withthe next actual event

From: Jeremy Fitzhardinge
Date: Wed Mar 25 2009 - 13:19:21 EST


Ian Campbell wrote:
When resuming a Xen domU we were seeing an issue where the timer ticks never
seemed to start up again. This was with CONFIG_NO_HZ=y, the Xen clocksource
has CLOCK_EVT_FEAT_ONESHOT but not CLOCK_EVT_FEAT_PERIODIC.

The issue is that on resume tick_resume_oneshot() tries to program an event for
"now", e.g.
tick_program_event(ktime_get(), 1);

However further down the call chain tick_dev_program_event() then compares that
Where's that? Do you mean in clockevents_program_event():

delta = ktime_to_ns(ktime_sub(expires, now));

if (delta <= 0)
return -ETIME;


?

expiry time with a second call to ktime_get() and discards the event if the
timeout is negative -- which it always will be since some time must have passed
since tick_program_event was called.

Instead of asking for an immediate event on resume, instead ask for the next
actual event.

What if the next event is now anyway? What timebase is it in anyway?

With this fix I can successfully resume a Xen domain.

That's good, but I think there's more going on here.

J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/