Commit 8edac960a7deabd8c569fde189c2958e656d9115

Authored by aliguori
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
... ... @@ -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
... ...
... ... @@ -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 {
... ...