From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LwiCw-0005FU-Ic for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LwiCq-0005DM-KH for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:09 -0400 Received: from [199.232.76.173] (port=44669 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LwiCq-0005D5-Ad for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:04 -0400 Received: from mx2.redhat.com ([66.187.237.31]:37796) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LwiCp-0000iX-ET for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:03 -0400 Message-Id: <20090422192120.235992425@localhost.localdomain> References: <20090422191504.975476933@localhost.localdomain> Date: Wed, 22 Apr 2009 16:15:12 -0300 From: mtosatti@redhat.com Content-Disposition: inline; filename=qemu-vcpu-kick Subject: [Qemu-devel] [patch 08/14] qemu: introduce qemu_cpu_kick List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, aliguori@us.ibm.com Cc: Marcelo Tosatti To notify cpu of pending interrupt. Signed-off-by: Marcelo Tosatti Index: trunk/exec.c =================================================================== --- trunk.orig/exec.c +++ trunk/exec.c @@ -1541,6 +1541,17 @@ void cpu_interrupt(CPUState *env, int ma old_mask = env->interrupt_request; env->interrupt_request |= mask; +#ifndef CONFIG_USER_ONLY + /* + * If called from iothread context, wake the target cpu in + * case its halted. + */ + if (!qemu_cpu_self(env)) { + qemu_cpu_kick(env); + return; + } +#endif + if (use_icount) { env->icount_decr.u16.high = 0xffff; #ifndef CONFIG_USER_ONLY Index: trunk/qemu-common.h =================================================================== --- trunk.orig/qemu-common.h +++ trunk/qemu-common.h @@ -189,6 +189,10 @@ void qemu_service_io(void); /* Force QEMU to process pending events */ void qemu_notify_event(void); +/* Unblock cpu */ +void qemu_cpu_kick(void *env); +int qemu_cpu_self(void *env); + #ifdef CONFIG_USER_ONLY #define qemu_init_vcpu(env) do { } while (0) #else Index: trunk/vl.c =================================================================== --- trunk.orig/vl.c +++ trunk/vl.c @@ -3672,6 +3672,16 @@ void qemu_init_vcpu(void *_env) return; } +int qemu_cpu_self(void *env) +{ + return 1; +} + +void qemu_cpu_kick(void *env) +{ + return; +} + #ifdef _WIN32 static void host_main_loop_wait(int *timeout) { --