Skip to content

Commit

Permalink
xen: resume timers on all vcpus
Browse files Browse the repository at this point in the history
On resume, the vcpu timer modes will not be restored.  The timer
infrastructure doesn't do this for us, since it assumes the cpus
are offline.  We can just poke the other vcpus into the right mode
directly though.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Jeremy Fitzhardinge authored and Ingo Molnar committed Jun 2, 2008
1 parent 9c7a794 commit d07af1f
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/x86/xen/suspend.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ void xen_post_suspend(int suspend_cancelled)
xen_cpu_initialized_map = cpu_online_map;
#endif
xen_vcpu_restore();
xen_timer_resume();
}

}
Expand Down
13 changes: 13 additions & 0 deletions arch/x86/xen/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,19 @@ void xen_setup_cpu_clockevents(void)
clockevents_register_device(&__get_cpu_var(xen_clock_events));
}

void xen_timer_resume(void)
{
int cpu;

if (xen_clockevent != &xen_vcpuop_clockevent)
return;

for_each_online_cpu(cpu) {
if (HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
BUG();
}
}

__init void xen_time_init(void)
{
int cpu = smp_processor_id();
Expand Down
1 change: 1 addition & 0 deletions arch/x86/xen/xen-ops.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ void __init xen_time_init(void);
unsigned long xen_get_wallclock(void);
int xen_set_wallclock(unsigned long time);
unsigned long long xen_sched_clock(void);
void xen_timer_resume(void);

irqreturn_t xen_debug_interrupt(int irq, void *dev_id);

Expand Down

0 comments on commit d07af1f

Please sign in to comment.