Commit d9f75a4eb449c96dd47731a4d6f1619f3c23b5e7
1 parent
96248fd8
qemu: create helper for event notification (Marcelo Tosatti)
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7236 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
25 additions
and
25 deletions
hw/mac_dbdma.c
qemu-common.h
| ... | ... | @@ -186,6 +186,9 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id); |
| 186 | 186 | /* Force QEMU to stop what it's doing and service IO */ |
| 187 | 187 | void qemu_service_io(void); |
| 188 | 188 | |
| 189 | +/* Force QEMU to process pending events */ | |
| 190 | +void qemu_notify_event(void); | |
| 191 | + | |
| 189 | 192 | typedef struct QEMUIOVector { |
| 190 | 193 | struct iovec *iov; |
| 191 | 194 | int niov; | ... | ... |
vl.c
| ... | ... | @@ -1193,9 +1193,8 @@ void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time) |
| 1193 | 1193 | qemu_rearm_alarm_timer(alarm_timer); |
| 1194 | 1194 | } |
| 1195 | 1195 | /* Interrupt execution to force deadline recalculation. */ |
| 1196 | - if (use_icount && cpu_single_env) { | |
| 1197 | - cpu_exit(cpu_single_env); | |
| 1198 | - } | |
| 1196 | + if (use_icount) | |
| 1197 | + qemu_notify_event(); | |
| 1199 | 1198 | } |
| 1200 | 1199 | } |
| 1201 | 1200 | |
| ... | ... | @@ -1370,6 +1369,7 @@ static void host_alarm_handler(int host_signum) |
| 1370 | 1369 | #endif |
| 1371 | 1370 | } |
| 1372 | 1371 | event_pending = 1; |
| 1372 | + qemu_notify_event(); | |
| 1373 | 1373 | } |
| 1374 | 1374 | } |
| 1375 | 1375 | |
| ... | ... | @@ -3406,15 +3406,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) |
| 3406 | 3406 | |
| 3407 | 3407 | void qemu_service_io(void) |
| 3408 | 3408 | { |
| 3409 | - CPUState *env = cpu_single_env; | |
| 3410 | - if (env) { | |
| 3411 | - cpu_exit(env); | |
| 3412 | -#ifdef CONFIG_KQEMU | |
| 3413 | - if (env->kqemu_enabled) { | |
| 3414 | - kqemu_cpu_interrupt(env); | |
| 3415 | - } | |
| 3416 | -#endif | |
| 3417 | - } | |
| 3409 | + qemu_notify_event(); | |
| 3418 | 3410 | } |
| 3419 | 3411 | |
| 3420 | 3412 | /***********************************************************/ |
| ... | ... | @@ -3482,15 +3474,12 @@ void qemu_bh_schedule_idle(QEMUBH *bh) |
| 3482 | 3474 | |
| 3483 | 3475 | void qemu_bh_schedule(QEMUBH *bh) |
| 3484 | 3476 | { |
| 3485 | - CPUState *env = cpu_single_env; | |
| 3486 | 3477 | if (bh->scheduled) |
| 3487 | 3478 | return; |
| 3488 | 3479 | bh->scheduled = 1; |
| 3489 | 3480 | bh->idle = 0; |
| 3490 | 3481 | /* stop the currently executing CPU to execute the BH ASAP */ |
| 3491 | - if (env) { | |
| 3492 | - cpu_exit(env); | |
| 3493 | - } | |
| 3482 | + qemu_notify_event(); | |
| 3494 | 3483 | } |
| 3495 | 3484 | |
| 3496 | 3485 | void qemu_bh_cancel(QEMUBH *bh) |
| ... | ... | @@ -3701,22 +3690,32 @@ void qemu_system_reset_request(void) |
| 3701 | 3690 | } else { |
| 3702 | 3691 | reset_requested = 1; |
| 3703 | 3692 | } |
| 3704 | - if (cpu_single_env) | |
| 3705 | - cpu_exit(cpu_single_env); | |
| 3693 | + qemu_notify_event(); | |
| 3706 | 3694 | } |
| 3707 | 3695 | |
| 3708 | 3696 | void qemu_system_shutdown_request(void) |
| 3709 | 3697 | { |
| 3710 | 3698 | shutdown_requested = 1; |
| 3711 | - if (cpu_single_env) | |
| 3712 | - cpu_exit(cpu_single_env); | |
| 3699 | + qemu_notify_event(); | |
| 3713 | 3700 | } |
| 3714 | 3701 | |
| 3715 | 3702 | void qemu_system_powerdown_request(void) |
| 3716 | 3703 | { |
| 3717 | 3704 | powerdown_requested = 1; |
| 3718 | - if (cpu_single_env) | |
| 3719 | - cpu_exit(cpu_single_env); | |
| 3705 | + qemu_notify_event(); | |
| 3706 | +} | |
| 3707 | + | |
| 3708 | +void qemu_notify_event(void) | |
| 3709 | +{ | |
| 3710 | + CPUState *env = cpu_single_env; | |
| 3711 | + | |
| 3712 | + if (env) { | |
| 3713 | + cpu_exit(env); | |
| 3714 | +#ifdef USE_KQEMU | |
| 3715 | + if (env->kqemu_enabled) | |
| 3716 | + kqemu_cpu_interrupt(env); | |
| 3717 | +#endif | |
| 3718 | + } | |
| 3720 | 3719 | } |
| 3721 | 3720 | |
| 3722 | 3721 | #ifdef _WIN32 | ... | ... |