diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-24 18:04:02 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-24 18:04:02 +0000 |
commit | 6e29f5da4de7b3686609e92f2d4b3119762a744a (patch) | |
tree | 96dff652854a17c2dae8cfbfb4f0bbe1d50cc0b2 /vl.c | |
parent | e6e35b1ea3395d8c2e750fc515b00cf24c86d892 (diff) |
qemu: handle stop request in main loop (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@7247 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 36 |
1 files changed, 26 insertions, 10 deletions
@@ -3547,15 +3547,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 { @@ -3569,6 +3560,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) { @@ -3598,6 +3590,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; @@ -3761,6 +3769,11 @@ void qemu_cpu_kick(void *env) #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) { @@ -4058,8 +4071,9 @@ static int vm_can_run(void) static void main_loop(void) { - for (;;) { + int r; + for (;;) { do { #ifdef CONFIG_PROFILER int64_t ti; @@ -4087,6 +4101,8 @@ static void main_loop(void) qemu_system_reset(); if (qemu_powerdown_requested()) qemu_system_powerdown(); + if ((r = qemu_vmstop_requested())) + vm_stop(r); } } |