[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [mini-os master] mini-os: support idle for HVMlite
commit ea60e88e7b91c7a7661cee2e52f04c16c9aced74 Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Tue Aug 23 16:45:08 2016 +0200 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Wed Aug 24 11:37:05 2016 +0100 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> Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> --- 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)); } -- generated by git-patchbot for /home/xen/git/mini-os.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |