From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LwiCy-0005GK-MU for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:12 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LwiCs-0005EE-CI for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:10 -0400 Received: from [199.232.76.173] (port=44678 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LwiCr-0005EA-79 for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:05 -0400 Received: from mx20.gnu.org ([199.232.41.8]:9530) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LwiCq-0000jS-Q7 for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:04 -0400 Received: from mx2.redhat.com ([66.187.237.31]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LwiCq-00029C-1Z for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:04 -0400 Message-Id: <20090422192120.833482064@localhost.localdomain> References: <20090422191504.975476933@localhost.localdomain> Date: Wed, 22 Apr 2009 16:15:17 -0300 From: mtosatti@redhat.com Content-Disposition: inline; filename=vmstop-refactor Subject: [Qemu-devel] [patch 13/14] qemu: handle stop request in main loop 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 Signed-off-by: Marcelo Tosatti Index: qemu-iothread-4/vl.c =================================================================== --- qemu-iothread-4.orig/vl.c +++ qemu-iothread-4/vl.c @@ -3483,15 +3483,6 @@ void vm_start(void) } } -void vm_stop(int reason) -{ - if (vm_running) { - cpu_disable_ticks(); - vm_running = 0; - vm_state_notify(0, reason); - } -} - /* reset/shutdown handler */ typedef struct QEMUResetEntry { @@ -3505,6 +3496,7 @@ static int reset_requested; static int shutdown_requested; static int powerdown_requested; static int debug_requested; +static int vmstop_requested; int qemu_shutdown_requested(void) { @@ -3534,6 +3526,22 @@ static int qemu_debug_requested(void) return r; } +static int qemu_vmstop_requested(void) +{ + int r = vmstop_requested; + vmstop_requested = 0; + return r; +} + +static void do_vm_stop(int reason) +{ + if (vm_running) { + cpu_disable_ticks(); + vm_running = 0; + vm_state_notify(0, reason); + } +} + void qemu_register_reset(QEMUResetHandler *func, void *opaque) { QEMUResetEntry **pre, *re; @@ -3697,6 +3705,11 @@ static void qemu_init_main_loop(void) #define qemu_mutex_lock_iothread() do { } while (0) #define qemu_mutex_unlock_iothread() do { } while (0) +void vm_stop(int reason) +{ + do_vm_stop(reason); +} + #ifdef _WIN32 static void host_main_loop_wait(int *timeout) { @@ -3994,8 +4007,9 @@ static int vm_can_run(void) static void main_loop(void) { - for (;;) { + int r; + for (;;) { do { #ifdef CONFIG_PROFILER int64_t ti; @@ -4023,6 +4037,8 @@ static void main_loop(void) qemu_system_reset(); if (qemu_powerdown_requested()) qemu_system_powerdown(); + if ((r = qemu_vmstop_requested())) + vm_stop(r); } } --