[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.