aboutsummaryrefslogtreecommitdiff
path: root/vl.c
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2006-05-01 12:43:29 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2006-05-01 12:43:29 +0000
commiteade0f192eef92f6c43ab036407cff46148be842 (patch)
treefd503550d46d0a966cb0ad9f55e5de8d368d7f09 /vl.c
parent07de1eaa9d48a70950af271b68f49fd2970ecfd5 (diff)
fix for hosts resuming from software suspend (initial patch by John Coiner)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1884 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'vl.c')
-rw-r--r--vl.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/vl.c b/vl.c
index 26d3cce58e..8984c489e7 100644
--- a/vl.c
+++ b/vl.c
@@ -558,6 +558,7 @@ int64_t cpu_get_real_ticks(void)
#error unsupported CPU
#endif
+static int64_t cpu_ticks_prev;
static int64_t cpu_ticks_offset;
static int cpu_ticks_enabled;
@@ -566,7 +567,15 @@ static inline int64_t cpu_get_ticks(void)
if (!cpu_ticks_enabled) {
return cpu_ticks_offset;
} else {
- return cpu_get_real_ticks() + cpu_ticks_offset;
+ int64_t ticks;
+ ticks = cpu_get_real_ticks();
+ if (cpu_ticks_prev > ticks) {
+ /* Note: non increasing ticks may happen if the host uses
+ software suspend */
+ cpu_ticks_offset += cpu_ticks_prev - ticks;
+ }
+ cpu_ticks_prev = ticks;
+ return ticks + cpu_ticks_offset;
}
}