Commit 6e29f5da4de7b3686609e92f2d4b3119762a744a

Authored by aliguori
1 parent e6e35b1e

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
Showing 1 changed file with 26 additions and 10 deletions
... ... @@ -3547,15 +3547,6 @@ void vm_start(void)
3547 3547 }
3548 3548 }
3549 3549  
3550   -void vm_stop(int reason)
3551   -{
3552   - if (vm_running) {
3553   - cpu_disable_ticks();
3554   - vm_running = 0;
3555   - vm_state_notify(0, reason);
3556   - }
3557   -}
3558   -
3559 3550 /* reset/shutdown handler */
3560 3551  
3561 3552 typedef struct QEMUResetEntry {
... ... @@ -3569,6 +3560,7 @@ static int reset_requested;
3569 3560 static int shutdown_requested;
3570 3561 static int powerdown_requested;
3571 3562 static int debug_requested;
  3563 +static int vmstop_requested;
3572 3564  
3573 3565 int qemu_shutdown_requested(void)
3574 3566 {
... ... @@ -3598,6 +3590,22 @@ static int qemu_debug_requested(void)
3598 3590 return r;
3599 3591 }
3600 3592  
  3593 +static int qemu_vmstop_requested(void)
  3594 +{
  3595 + int r = vmstop_requested;
  3596 + vmstop_requested = 0;
  3597 + return r;
  3598 +}
  3599 +
  3600 +static void do_vm_stop(int reason)
  3601 +{
  3602 + if (vm_running) {
  3603 + cpu_disable_ticks();
  3604 + vm_running = 0;
  3605 + vm_state_notify(0, reason);
  3606 + }
  3607 +}
  3608 +
3601 3609 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3602 3610 {
3603 3611 QEMUResetEntry **pre, *re;
... ... @@ -3761,6 +3769,11 @@ void qemu_cpu_kick(void *env)
3761 3769 #define qemu_mutex_lock_iothread() do { } while (0)
3762 3770 #define qemu_mutex_unlock_iothread() do { } while (0)
3763 3771  
  3772 +void vm_stop(int reason)
  3773 +{
  3774 + do_vm_stop(reason);
  3775 +}
  3776 +
3764 3777 #ifdef _WIN32
3765 3778 static void host_main_loop_wait(int *timeout)
3766 3779 {
... ... @@ -4058,8 +4071,9 @@ static int vm_can_run(void)
4058 4071  
4059 4072 static void main_loop(void)
4060 4073 {
4061   - for (;;) {
  4074 + int r;
4062 4075  
  4076 + for (;;) {
4063 4077 do {
4064 4078 #ifdef CONFIG_PROFILER
4065 4079 int64_t ti;
... ... @@ -4087,6 +4101,8 @@ static void main_loop(void)
4087 4101 qemu_system_reset();
4088 4102 if (qemu_powerdown_requested())
4089 4103 qemu_system_powerdown();
  4104 + if ((r = qemu_vmstop_requested()))
  4105 + vm_stop(r);
4090 4106 }
4091 4107 }
4092 4108  
... ...