From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> RDMA migration currently relies on the source and destination RAMBlocks having the same offsets within ram_addr_t space; unfortunately that's just not true when: a) You hotplug on the source but then create the device on the command line on the destination.
b) Across two versions of qemu Thus there are migrations that work with TCP that don't with RDMA. The changes keep stream compatibility with existing RDMA migration, so cases that already work (i.e. no hotplug) will keep working. With some light testing this seems to work; hopefully I've got all the cases that pass offsets back and forward. Dave Dr. David Alan Gilbert (10): Rename RDMA structures to make destination clear qemu_ram_foreach_block: pass up error value, and down the ramblock name Store block name in local blocks structure Translate offsets to destination address space Rework ram_control_load_hook to hook during block load Remove unneeded memset Simplify rdma_delete_block and remove it's dependence on the hash Rework ram block hash Sort destination RAMBlocks to be the same as the source Sanity check RDMA remote data arch_init.c | 4 +- exec.c | 10 +- include/exec/cpu-common.h | 4 +- include/migration/migration.h | 2 +- include/migration/qemu-file.h | 14 +- migration/qemu-file.c | 8 +- migration/rdma.c | 367 ++++++++++++++++++++++++++---------------- trace-events | 8 +- 8 files changed, 257 insertions(+), 160 deletions(-) -- 2.3.5