[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 22/22] mini-os: support idle for HVMlite
Instead of calling HYPERVISOR_sched_op(SCHEDOP_block, 0) we need to use the "hlt" instruction with interrupts enabled to switch to idle when running as HVMlite domain. This requires to setup a new timer in the timer handler as there is no guarantee the original timer event we are waiting for won't fire between enabling interrupts and calling "hlt". Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- arch/x86/time.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/arch/x86/time.c b/arch/x86/time.c index af45e56..3658142 100644 --- a/arch/x86/time.c +++ b/arch/x86/time.c @@ -212,17 +212,20 @@ void block_domain(s_time_t until) if(monotonic_clock() < until) { HYPERVISOR_set_timer_op(until); +#ifdef CONFIG_PARAVIRT HYPERVISOR_sched_op(SCHEDOP_block, 0); +#else + local_irq_enable(); + asm volatile ( "hlt" : : : "memory" ); +#endif local_irq_disable(); + HYPERVISOR_set_timer_op(0); } } - -/* - * Just a dummy - */ static void timer_handler(evtchn_port_t ev, struct pt_regs *regs, void *ign) { + HYPERVISOR_set_timer_op(monotonic_clock() + MILLISECS(1)); } -- 2.6.6 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |