]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
new function qemu_icount_delta
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 10 Mar 2010 10:38:51 +0000 (11:38 +0100)
committerAnthony Liguori <aliguori@us.ibm.com>
Wed, 17 Mar 2010 16:14:53 +0000 (11:14 -0500)
Tweaking the rounding in qemu_next_deadline ensures that there's
no change whatsoever.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
vl.c

diff --git a/vl.c b/vl.c
index f1e2c5153e4dc43906f79aed693036eb77f7328c..36328ffb47c3b8dfed416bc61709e05c7fbbbc38 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -548,6 +548,22 @@ static int64_t cpu_get_clock(void)
     }
 }
 
+#ifndef CONFIG_IOTHREAD
+static int64_t qemu_icount_delta(void)
+{
+    if (!use_icount) {
+        return 5000 * (int64_t) 1000000;
+    } else if (use_icount == 1) {
+        /* When not using an adaptive execution frequency
+           we tend to get badly out of sync with real time,
+           so just delay for a reasonable amount of time.  */
+        return 0;
+    } else {
+        return cpu_get_icount() - cpu_get_clock();
+    }
+}
+#endif
+
 /* enable cpu_get_ticks() */
 void cpu_enable_ticks(void)
 {
@@ -4051,25 +4067,16 @@ static int qemu_calculate_timeout(void)
         timeout = 5000;
     else if (tcg_has_work())
         timeout = 0;
-    else if (!use_icount)
-        timeout = 5000;
     else {
      /* XXX: use timeout computed from timers */
         int64_t add;
         int64_t delta;
         /* Advance virtual time to the next event.  */
-        if (use_icount == 1) {
-            /* When not using an adaptive execution frequency
-               we tend to get badly out of sync with real time,
-               so just delay for a reasonable amount of time.  */
-            delta = 0;
-        } else {
-            delta = cpu_get_icount() - cpu_get_clock();
-        }
+       delta = qemu_icount_delta();
         if (delta > 0) {
             /* If virtual time is ahead of real time then just
                wait for IO.  */
-            timeout = (delta / 1000000) + 1;
+            timeout = (delta + 999999) / 1000000;
         } else {
             /* Wait for either IO to occur or the next
                timer event.  */