mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
migration: check RDMA and capabilities are compatible on both sides
Depending on the order of starting RDMA and setting capability, they can be categorized into the following scenarios: Source: S1: [set capabilities] -> [Start RDMA outgoing] Destination: D1: [set capabilities] -> [Start RDMA incoming] D2: [Start RDMA incoming] -> [set capabilities] Previously, compatibility between RDMA and capabilities was verified only in scenario D1, potentially causing migration failures in other situations. For scenarios S1 and D1, we can seamlessly incorporate migration_transport_compatible() to address compatibility between channels and capabilities vs transport. For scenario D2, ensure compatibility within migrate_caps_check(). Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Li Zhijian <lizhijian@fujitsu.com> Message-ID: <20250305062825.772629-3-lizhijian@fujitsu.com> Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
parent
5134cf9b5d
commit
57be554c29
3 changed files with 42 additions and 10 deletions
|
@ -448,6 +448,20 @@ static bool migrate_incoming_started(void)
|
|||
return !!migration_incoming_get_current()->transport_data;
|
||||
}
|
||||
|
||||
bool migrate_rdma_caps_check(bool *caps, Error **errp)
|
||||
{
|
||||
if (caps[MIGRATION_CAPABILITY_XBZRLE]) {
|
||||
error_setg(errp, "RDMA and XBZRLE can't be used together");
|
||||
return false;
|
||||
}
|
||||
if (caps[MIGRATION_CAPABILITY_MULTIFD]) {
|
||||
error_setg(errp, "RDMA and multifd can't be used together");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @migration_caps_check - check capability compatibility
|
||||
*
|
||||
|
@ -611,6 +625,13 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* On destination side, check the cases that capability is being set
|
||||
* after incoming thread has started.
|
||||
*/
|
||||
if (migrate_rdma() && !migrate_rdma_caps_check(new_caps, errp)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue