mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-09-09 08:17:53 -06:00
migration: Notify COMPLETE once for postcopy
Postcopy invokes qemu_savevm_state_complete_precopy() twice, that means it'll invoke COMPLETE notify twice.. also twice the tracepoints that marking precopy complete. Move that notification (along with the tracepoint) out to the caller, so that postcopy will only notify once right at the start of switchover phase from precopy. When at it, rename it to suite the file now it locates. For precopy, there should have no functional change except the tracepoint has a name change. For the other two users of qemu_savevm_state_complete_precopy(), namely: qemu_savevm_state() and qemu_savevm_live_state(): the notifier shouldn't matter because they're not precopy at all. Now in these two contexts (aka, "savevm", and "colo") sometimes the precopy notifiers will still be invoked, but that's outside the scope of this patch. Signed-off-by: Peter Xu <peterx@redhat.com> Tested-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Juraj Marcin <jmarcin@redhat.com> Link: https://lore.kernel.org/r/20250114230746.3268797-12-peterx@redhat.com Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
parent
a880ddd8ce
commit
46b0155ecf
3 changed files with 16 additions and 8 deletions
|
@ -131,6 +131,17 @@ static void migration_downtime_end(MigrationState *s)
|
|||
}
|
||||
}
|
||||
|
||||
static void precopy_notify_complete(void)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
|
||||
if (precopy_notify(PRECOPY_NOTIFY_COMPLETE, &local_err)) {
|
||||
error_report_err(local_err);
|
||||
}
|
||||
|
||||
trace_migration_precopy_complete();
|
||||
}
|
||||
|
||||
static bool migration_needs_multiple_sockets(void)
|
||||
{
|
||||
return migrate_multifd() || migrate_postcopy_preempt();
|
||||
|
@ -2676,6 +2687,8 @@ static int postcopy_start(MigrationState *ms, Error **errp)
|
|||
/* Switchover phase, switch to unlimited */
|
||||
migration_rate_set(RATE_LIMIT_DISABLED);
|
||||
|
||||
precopy_notify_complete();
|
||||
|
||||
/*
|
||||
* Cause any non-postcopiable, but iterative devices to
|
||||
* send out their final data.
|
||||
|
@ -2865,6 +2878,8 @@ static int migration_completion_precopy(MigrationState *s)
|
|||
|
||||
migration_rate_set(RATE_LIMIT_DISABLED);
|
||||
|
||||
precopy_notify_complete();
|
||||
|
||||
ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false);
|
||||
out_unlock:
|
||||
bql_unlock();
|
||||
|
|
|
@ -1578,15 +1578,8 @@ int qemu_savevm_state_complete_precopy_non_iterable(QEMUFile *f,
|
|||
int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only)
|
||||
{
|
||||
int ret;
|
||||
Error *local_err = NULL;
|
||||
bool in_postcopy = migration_in_postcopy();
|
||||
|
||||
if (precopy_notify(PRECOPY_NOTIFY_COMPLETE, &local_err)) {
|
||||
error_report_err(local_err);
|
||||
}
|
||||
|
||||
trace_savevm_state_complete_precopy();
|
||||
|
||||
if (!in_postcopy || iterable_only) {
|
||||
ret = qemu_savevm_state_complete_precopy_iterable(f, in_postcopy);
|
||||
if (ret) {
|
||||
|
|
|
@ -44,7 +44,6 @@ savevm_state_resume_prepare(void) ""
|
|||
savevm_state_header(void) ""
|
||||
savevm_state_iterate(void) ""
|
||||
savevm_state_cleanup(void) ""
|
||||
savevm_state_complete_precopy(void) ""
|
||||
vmstate_save(const char *idstr, const char *vmsd_name) "%s, %s"
|
||||
vmstate_load(const char *idstr, const char *vmsd_name) "%s, %s"
|
||||
vmstate_downtime_save(const char *type, const char *idstr, uint32_t instance_id, int64_t downtime) "type=%s idstr=%s instance_id=%d downtime=%"PRIi64
|
||||
|
@ -195,6 +194,7 @@ migrate_transferred(uint64_t transferred, uint64_t time_spent, uint64_t bandwidt
|
|||
process_incoming_migration_co_end(int ret, int ps) "ret=%d postcopy-state=%d"
|
||||
process_incoming_migration_co_postcopy_end_main(void) ""
|
||||
postcopy_preempt_enabled(bool value) "%d"
|
||||
migration_precopy_complete(void) ""
|
||||
|
||||
# migration-stats
|
||||
migration_transferred_bytes(uint64_t qemu_file, uint64_t multifd, uint64_t rdma) "qemu_file %" PRIu64 " multifd %" PRIu64 " RDMA %" PRIu64
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue