Message ID | 1268217535-26554-6-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
diff --git a/vl.c b/vl.c index 6acf702..a546d85 100644 --- a/vl.c +++ b/vl.c @@ -1053,7 +1053,7 @@ static void host_alarm_handler(int host_signum) qemu_get_clock(rt_clock)) || qemu_timer_expired(active_timers[QEMU_CLOCK_HOST], qemu_get_clock(host_clock))) { - qemu_event_increment(); + t->expired = alarm_has_dynticks(t); #ifndef CONFIG_IOTHREAD @@ -3361,6 +3361,7 @@ void qemu_notify_event(void) { CPUState *env = cpu_single_env; + qemu_event_increment (); if (env) { cpu_exit(env); }
qemu_notify_event in the non-iothread case is only stopping the current CPU. However, if the CPU is idle and the main loop is in the select call then a call to qemu_event_increment is needed too (as done in host_alarm_handler). Since in general one doesn't know whether the CPU is executing or not, it is a safe bet to always do qemu_event_increment. Another way to see it: after this patch qemu_event_increment is the "common part" of qemu_notify_event for both the CONFIG_IOTHREAD and !CONFIG_IOTHREAD cases, which makes sense. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- vl.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)