[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH V5 01/12] cpus: refactor vm_stop
|
From: |
Steve Sistare |
|
Subject: |
[PATCH V5 01/12] cpus: refactor vm_stop |
|
Date: |
Mon, 13 Nov 2023 10:33:49 -0800 |
Refactor the vm_stop functions into one common subroutine do_vm_stop called
with options. No functional change.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
system/cpus.c | 44 +++++++++++++++++---------------------------
1 file changed, 17 insertions(+), 27 deletions(-)
diff --git a/system/cpus.c b/system/cpus.c
index 0848e0d..f72c4be 100644
--- a/system/cpus.c
+++ b/system/cpus.c
@@ -252,10 +252,21 @@ void cpu_interrupt(CPUState *cpu, int mask)
}
}
-static int do_vm_stop(RunState state, bool send_stop)
+static int do_vm_stop(RunState state, bool send_stop, bool force)
{
int ret = 0;
+ if (qemu_in_vcpu_thread()) {
+ qemu_system_vmstop_request_prepare();
+ qemu_system_vmstop_request(state);
+ /*
+ * FIXME: should not return to device code in case
+ * vm_stop() has been requested.
+ */
+ cpu_stop_current();
+ return 0;
+ }
+
if (runstate_is_running()) {
runstate_set(state);
cpu_disable_ticks();
@@ -264,6 +275,8 @@ static int do_vm_stop(RunState state, bool send_stop)
if (send_stop) {
qapi_event_send_stop();
}
+ } else if (force) {
+ runstate_set(state);
}
bdrv_drain_all();
@@ -278,7 +291,7 @@ static int do_vm_stop(RunState state, bool send_stop)
*/
int vm_shutdown(void)
{
- return do_vm_stop(RUN_STATE_SHUTDOWN, false);
+ return do_vm_stop(RUN_STATE_SHUTDOWN, false, false);
}
bool cpu_can_run(CPUState *cpu)
@@ -656,18 +669,7 @@ void cpu_stop_current(void)
int vm_stop(RunState state)
{
- if (qemu_in_vcpu_thread()) {
- qemu_system_vmstop_request_prepare();
- qemu_system_vmstop_request(state);
- /*
- * FIXME: should not return to device code in case
- * vm_stop() has been requested.
- */
- cpu_stop_current();
- return 0;
- }
-
- return do_vm_stop(state, true);
+ return do_vm_stop(state, true, false);
}
/**
@@ -723,19 +725,7 @@ void vm_start(void)
current state is forgotten forever */
int vm_stop_force_state(RunState state)
{
- if (runstate_is_running()) {
- return vm_stop(state);
- } else {
- int ret;
- runstate_set(state);
-
- bdrv_drain_all();
- /* Make sure to return an error if the flush in a previous vm_stop()
- * failed. */
- ret = bdrv_flush_all();
- trace_vm_stop_flush_all(ret);
- return ret;
- }
+ return do_vm_stop(state, true, true);
}
void qmp_memsave(int64_t addr, int64_t size, const char *filename,
--
1.8.3.1
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, (continued)
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Peter Xu, 2023/11/20
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Steven Sistare, 2023/11/20
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Peter Xu, 2023/11/20
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Steven Sistare, 2023/11/21
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Peter Xu, 2023/11/21
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Daniel P . Berrangé, 2023/11/22
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Peter Xu, 2023/11/22
- Re: [PATCH V5 02/12] cpus: stop vm in suspended state, Steven Sistare, 2023/11/28
[PATCH V5 01/12] cpus: refactor vm_stop,
Steve Sistare <=
[PATCH V5 03/12] cpus: pass runstate to vm_prepare_start, Steve Sistare, 2023/11/13
[PATCH V5 05/12] migration: preserve suspended runstate, Steve Sistare, 2023/11/13
[PATCH V5 09/12] tests/qtest: option to suspend during migration, Steve Sistare, 2023/11/13
[PATCH V5 06/12] migration: preserve suspended for snapshot, Steve Sistare, 2023/11/13