From: Kevin Wolf Date: Fri, 5 Jul 2013 11:49:54 +0000 (+0200) Subject: cpus: Add return value for vm_stop() X-Git-Tag: v1.5.3~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=32d1d7ff518a5fe3823dd831435be57e8b81a1d9;p=thirdparty%2Fqemu.git cpus: Add return value for vm_stop() If flushing the block devices fails, return an error. The VM is stopped anyway. Signed-off-by: Kevin Wolf Reviewed-by: Stefan Hajnoczi (cherry picked from commit 5698346391b306c2c84358c68ee897c095d714cc) Signed-off-by: Michael Roth --- diff --git a/cpus.c b/cpus.c index c232265cd25..2a2f633036d 100644 --- a/cpus.c +++ b/cpus.c @@ -437,17 +437,21 @@ bool cpu_is_stopped(CPUState *cpu) return !runstate_is_running() || cpu->stopped; } -static void do_vm_stop(RunState state) +static int do_vm_stop(RunState state) { + int ret = 0; + if (runstate_is_running()) { cpu_disable_ticks(); pause_all_vcpus(); runstate_set(state); vm_state_notify(0, state); bdrv_drain_all(); - bdrv_flush_all(); + ret = bdrv_flush_all(); monitor_protocol_event(QEVENT_STOP, NULL); } + + return ret; } static bool cpu_can_run(CPUState *cpu) @@ -1093,7 +1097,7 @@ void cpu_stop_current(void) } } -void vm_stop(RunState state) +int vm_stop(RunState state) { if (qemu_in_vcpu_thread()) { qemu_system_vmstop_request(state); @@ -1102,19 +1106,21 @@ void vm_stop(RunState state) * vm_stop() has been requested. */ cpu_stop_current(); - return; + return 0; } - do_vm_stop(state); + + return do_vm_stop(state); } /* does a state transition even if the VM is already stopped, current state is forgotten forever */ -void vm_stop_force_state(RunState state) +int vm_stop_force_state(RunState state) { if (runstate_is_running()) { - vm_stop(state); + return vm_stop(state); } else { runstate_set(state); + return 0; } } diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 2fb71afa259..b5e1add75a6 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -35,8 +35,8 @@ void vm_state_notify(int running, RunState state); #define VMRESET_REPORT true void vm_start(void); -void vm_stop(RunState state); -void vm_stop_force_state(RunState state); +int vm_stop(RunState state); +int vm_stop_force_state(RunState state); typedef enum WakeupReason { QEMU_WAKEUP_REASON_OTHER = 0, diff --git a/stubs/vm-stop.c b/stubs/vm-stop.c index 45689354f66..f82c897dfe8 100644 --- a/stubs/vm-stop.c +++ b/stubs/vm-stop.c @@ -1,7 +1,7 @@ #include "qemu-common.h" #include "sysemu/sysemu.h" -void vm_stop(RunState state) +int vm_stop(RunState state) { abort(); }