diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2010-03-10 11:38:42 +0100 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2010-03-17 11:14:53 -0500 |
commit | 7a5e5838116a752d51c443dbb1cc61541c02b597 (patch) | |
tree | f4dda33a278cfa0af40f598b64c1361cf0448aee /vl.c | |
parent | 1828be316f6637d43dd4c4f5f32925b17fb8107f (diff) |
do not use qemu_event_increment outside qemu_notify_event
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>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -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 @@ -3360,6 +3360,7 @@ void qemu_notify_event(void) { CPUState *env = cpu_single_env; + qemu_event_increment (); if (env) { cpu_exit(env); } |