When resuming a Xen domU we were seeing an issue where the timer ticks neverWhere's that? Do you mean in clockevents_program_event():
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
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.
With this fix I can successfully resume a Xen domain.