Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d07af1f0 authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Ingo Molnar
Browse files

xen: resume timers on all vcpus



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: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 9c7a7942
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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();
	}

}
+13 −0
Original line number Diff line number Diff line
@@ -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();
+1 −0
Original line number Diff line number Diff line
@@ -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);