Commit 8edac960a7deabd8c569fde189c2958e656d9115
1 parent
0bf46a40
qemu: introduce qemu_cpu_kick (Marcelo Tosatti)
To notify cpu of pending interrupt. 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@7243 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
25 additions
and
0 deletions
exec.c
... | ... | @@ -1542,6 +1542,17 @@ void cpu_interrupt(CPUState *env, int mask) |
1542 | 1542 | old_mask = env->interrupt_request; |
1543 | 1543 | env->interrupt_request |= mask; |
1544 | 1544 | |
1545 | +#ifndef CONFIG_USER_ONLY | |
1546 | + /* | |
1547 | + * If called from iothread context, wake the target cpu in | |
1548 | + * case its halted. | |
1549 | + */ | |
1550 | + if (!qemu_cpu_self(env)) { | |
1551 | + qemu_cpu_kick(env); | |
1552 | + return; | |
1553 | + } | |
1554 | +#endif | |
1555 | + | |
1545 | 1556 | if (use_icount) { |
1546 | 1557 | env->icount_decr.u16.high = 0xffff; |
1547 | 1558 | #ifndef CONFIG_USER_ONLY | ... | ... |
qemu-common.h
... | ... | @@ -189,6 +189,10 @@ void qemu_service_io(void); |
189 | 189 | /* Force QEMU to process pending events */ |
190 | 190 | void qemu_notify_event(void); |
191 | 191 | |
192 | +/* Unblock cpu */ | |
193 | +void qemu_cpu_kick(void *env); | |
194 | +int qemu_cpu_self(void *env); | |
195 | + | |
192 | 196 | #ifdef CONFIG_USER_ONLY |
193 | 197 | #define qemu_init_vcpu(env) do { } while (0) |
194 | 198 | #else | ... | ... |
vl.c
... | ... | @@ -3740,6 +3740,16 @@ void qemu_init_vcpu(void *_env) |
3740 | 3740 | return; |
3741 | 3741 | } |
3742 | 3742 | |
3743 | +int qemu_cpu_self(void *env) | |
3744 | +{ | |
3745 | + return 1; | |
3746 | +} | |
3747 | + | |
3748 | +void qemu_cpu_kick(void *env) | |
3749 | +{ | |
3750 | + return; | |
3751 | +} | |
3752 | + | |
3743 | 3753 | #ifdef _WIN32 |
3744 | 3754 | static void host_main_loop_wait(int *timeout) |
3745 | 3755 | { | ... | ... |