qemu_start_incoming_migration needs to check the number of multifd channels or postcopy ram channels to configure the backlog parameter (i.e. the maximum length to which the queue of pending connections for sockfd may grow) of listen(). So multifd and postcopy-preempt caps require the use of deferred incoming, that is, calling qemu_start_incoming_migration should be deferred via qmp or hmp commands after the cap of multifd and postcopy-preempt are configured.
Check if deferred incoming is used when enabling multifd or postcopy-preempt, and fail the check with error messages if not. Signed-off-by: Wei Wang <wei.w.w...@intel.com> --- migration/options.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/migration/options.c b/migration/options.c index c2a278ee2d..25b333b3f4 100644 --- a/migration/options.c +++ b/migration/options.c @@ -537,6 +537,11 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp) error_setg(errp, "Postcopy preempt not compatible with compress"); return false; } + + if (mis->transport_data) { + error_setg(errp, "Postcopy preempt should use deferred incoming"); + return false; + } } if (new_caps[MIGRATION_CAPABILITY_MULTIFD]) { @@ -544,6 +549,10 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp) error_setg(errp, "Multifd is not compatible with compress"); return false; } + if (mis->transport_data) { + error_setg(errp, "Multifd should use deferred incoming"); + return false; + } } return true; -- 2.27.0