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
This commit is contained in:
parent
e6e35b1ea3
commit
6e29f5da4d
36
vl.c
36
vl.c
@ -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 */
|
/* reset/shutdown handler */
|
||||||
|
|
||||||
typedef struct QEMUResetEntry {
|
typedef struct QEMUResetEntry {
|
||||||
@ -3569,6 +3560,7 @@ static int reset_requested;
|
|||||||
static int shutdown_requested;
|
static int shutdown_requested;
|
||||||
static int powerdown_requested;
|
static int powerdown_requested;
|
||||||
static int debug_requested;
|
static int debug_requested;
|
||||||
|
static int vmstop_requested;
|
||||||
|
|
||||||
int qemu_shutdown_requested(void)
|
int qemu_shutdown_requested(void)
|
||||||
{
|
{
|
||||||
@ -3598,6 +3590,22 @@ static int qemu_debug_requested(void)
|
|||||||
return r;
|
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)
|
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
|
||||||
{
|
{
|
||||||
QEMUResetEntry **pre, *re;
|
QEMUResetEntry **pre, *re;
|
||||||
@ -3761,6 +3769,11 @@ void qemu_cpu_kick(void *env)
|
|||||||
#define qemu_mutex_lock_iothread() do { } while (0)
|
#define qemu_mutex_lock_iothread() do { } while (0)
|
||||||
#define qemu_mutex_unlock_iothread() do { } while (0)
|
#define qemu_mutex_unlock_iothread() do { } while (0)
|
||||||
|
|
||||||
|
void vm_stop(int reason)
|
||||||
|
{
|
||||||
|
do_vm_stop(reason);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static void host_main_loop_wait(int *timeout)
|
static void host_main_loop_wait(int *timeout)
|
||||||
{
|
{
|
||||||
@ -4058,8 +4071,9 @@ static int vm_can_run(void)
|
|||||||
|
|
||||||
static void main_loop(void)
|
static void main_loop(void)
|
||||||
{
|
{
|
||||||
for (;;) {
|
int r;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
do {
|
do {
|
||||||
#ifdef CONFIG_PROFILER
|
#ifdef CONFIG_PROFILER
|
||||||
int64_t ti;
|
int64_t ti;
|
||||||
@ -4087,6 +4101,8 @@ static void main_loop(void)
|
|||||||
qemu_system_reset();
|
qemu_system_reset();
|
||||||
if (qemu_powerdown_requested())
|
if (qemu_powerdown_requested())
|
||||||
qemu_system_powerdown();
|
qemu_system_powerdown();
|
||||||
|
if ((r = qemu_vmstop_requested()))
|
||||||
|
vm_stop(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user