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>
This commit is contained in:
parent
1828be316f
commit
7a5e583811
3
vl.c
3
vl.c
@ -1053,7 +1053,7 @@ static void host_alarm_handler(int host_signum)
|
|||||||
qemu_get_clock(rt_clock)) ||
|
qemu_get_clock(rt_clock)) ||
|
||||||
qemu_timer_expired(active_timers[QEMU_CLOCK_HOST],
|
qemu_timer_expired(active_timers[QEMU_CLOCK_HOST],
|
||||||
qemu_get_clock(host_clock))) {
|
qemu_get_clock(host_clock))) {
|
||||||
qemu_event_increment();
|
|
||||||
t->expired = alarm_has_dynticks(t);
|
t->expired = alarm_has_dynticks(t);
|
||||||
|
|
||||||
#ifndef CONFIG_IOTHREAD
|
#ifndef CONFIG_IOTHREAD
|
||||||
@ -3360,6 +3360,7 @@ void qemu_notify_event(void)
|
|||||||
{
|
{
|
||||||
CPUState *env = cpu_single_env;
|
CPUState *env = cpu_single_env;
|
||||||
|
|
||||||
|
qemu_event_increment ();
|
||||||
if (env) {
|
if (env) {
|
||||||
cpu_exit(env);
|
cpu_exit(env);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user