提交 a2aaa079 编写于 作者: P Paolo Bonzini 提交者: Anthony Liguori

new function qemu_icount_delta

Tweaking the rounding in qemu_next_deadline ensures that there's
no change whatsoever.
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 63255043
...@@ -548,6 +548,22 @@ static int64_t cpu_get_clock(void) ...@@ -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() */ /* enable cpu_get_ticks() */
void cpu_enable_ticks(void) void cpu_enable_ticks(void)
{ {
...@@ -4051,25 +4067,16 @@ static int qemu_calculate_timeout(void) ...@@ -4051,25 +4067,16 @@ static int qemu_calculate_timeout(void)
timeout = 5000; timeout = 5000;
else if (tcg_has_work()) else if (tcg_has_work())
timeout = 0; timeout = 0;
else if (!use_icount)
timeout = 5000;
else { else {
/* XXX: use timeout computed from timers */ /* XXX: use timeout computed from timers */
int64_t add; int64_t add;
int64_t delta; int64_t delta;
/* Advance virtual time to the next event. */ /* Advance virtual time to the next event. */
if (use_icount == 1) { delta = qemu_icount_delta();
/* 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();
}
if (delta > 0) { if (delta > 0) {
/* If virtual time is ahead of real time then just /* If virtual time is ahead of real time then just
wait for IO. */ wait for IO. */
timeout = (delta / 1000000) + 1; timeout = (delta + 999999) / 1000000;
} else { } else {
/* Wait for either IO to occur or the next /* Wait for either IO to occur or the next
timer event. */ timer event. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册