[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 31/42] migration: Synchronize all CPU states only for non-iterable
From: |
Fabiano Rosas |
Subject: |
[PULL 31/42] migration: Synchronize all CPU states only for non-iterable dump |
Date: |
Wed, 29 Jan 2025 13:00:48 -0300 |
From: Peter Xu <peterx@redhat.com>
Do one shot cpu sync at qemu_savevm_state_complete_precopy_non_iterable(),
instead of coding it separately in two places.
Note that in the context of qemu_savevm_state_complete_precopy(), this
patch is also an optimization for postcopy path, in that we can avoid sync
cpu twice during switchover: before this patch, postcopy_start() invokes
twice on qemu_savevm_state_complete_precopy(), each of them will try to
sync CPU info. In reality, only one of them would be enough.
For background snapshot, there's no intended functional change.
Signed-off-by: Peter Xu <peterx@redhat.com>
Tested-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Juraj Marcin <jmarcin@redhat.com>
Link: 20250114230746.3268797-7-peterx@redhat.com">https://lore.kernel.org/r/20250114230746.3268797-7-peterx@redhat.com
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
migration/migration.c | 6 +-----
migration/savevm.c | 5 +++--
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index d8a6bc12e0..46e30a4814 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3749,11 +3749,7 @@ static void *bg_migration_thread(void *opaque)
if (migration_stop_vm(s, RUN_STATE_PAUSED)) {
goto fail;
}
- /*
- * Put vCPUs in sync with shadow context structures, then
- * save their state to channel-buffer along with devices.
- */
- cpu_synchronize_all_states();
+
if (qemu_savevm_state_complete_precopy_non_iterable(fb, false)) {
goto fail;
}
diff --git a/migration/savevm.c b/migration/savevm.c
index 5e56a5d9fc..92e77ca92b 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1531,6 +1531,9 @@ int
qemu_savevm_state_complete_precopy_non_iterable(QEMUFile *f,
Error *local_err = NULL;
int ret;
+ /* Making sure cpu states are synchronized before saving non-iterable */
+ cpu_synchronize_all_states();
+
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
if (se->vmsd && se->vmsd->early_setup) {
/* Already saved during qemu_savevm_state_setup(). */
@@ -1584,8 +1587,6 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool
iterable_only)
trace_savevm_state_complete_precopy();
- cpu_synchronize_all_states();
-
if (!in_postcopy || iterable_only) {
ret = qemu_savevm_state_complete_precopy_iterable(f, in_postcopy);
if (ret) {
--
2.35.3
- [PULL 25/42] migration: cpr-transfer documentation, (continued)
- [PULL 25/42] migration: cpr-transfer documentation, Fabiano Rosas, 2025/01/29
- [PULL 01/42] migration: fix -Werror=maybe-uninitialized, Fabiano Rosas, 2025/01/29
- [PULL 09/42] physmem: preserve ram blocks for cpr, Fabiano Rosas, 2025/01/29
- [PULL 08/42] migration: cpr-state, Fabiano Rosas, 2025/01/29
- [PULL 13/42] migration: incoming channel, Fabiano Rosas, 2025/01/29
- [PULL 19/42] tests/qtest: optimize migrate_set_ports, Fabiano Rosas, 2025/01/29
- [PULL 18/42] migration-test: memory_backend, Fabiano Rosas, 2025/01/29
- [PULL 16/42] migration: cpr-transfer save and load, Fabiano Rosas, 2025/01/29
- [PULL 27/42] migration: Do not construct JSON description if suppressed, Fabiano Rosas, 2025/01/29
- [PULL 32/42] migration: Adjust postcopy bandwidth during switchover, Fabiano Rosas, 2025/01/29
- [PULL 31/42] migration: Synchronize all CPU states only for non-iterable dump,
Fabiano Rosas <=
- [PULL 36/42] migration: Notify COMPLETE once for postcopy, Fabiano Rosas, 2025/01/29
- [PULL 41/42] migration: Trivial cleanup on JSON writer of vmstate_save(), Fabiano Rosas, 2025/01/29
- [PULL 42/42] migration: refactor ram_save_target_page functions, Fabiano Rosas, 2025/01/29
- [PULL 17/42] migration: cpr-transfer mode, Fabiano Rosas, 2025/01/29
- [PULL 35/42] migration: Take BQL slightly longer in postcopy_start(), Fabiano Rosas, 2025/01/29
- [PULL 37/42] migration: Unwrap qemu_savevm_state_complete_precopy() in postcopy, Fabiano Rosas, 2025/01/29
- [PULL 38/42] migration: Cleanup qemu_savevm_state_complete_precopy(), Fabiano Rosas, 2025/01/29
- [PULL 39/42] migration: Always set DEVICE state, Fabiano Rosas, 2025/01/29
- [PULL 40/42] migration: Merge precopy/postcopy on switchover start, Fabiano Rosas, 2025/01/29