return -1;
}
- if (flags & VIR_MIGRATE_PARALLEL)
+ /* multi-fd and postcopy-preempt require QEMU to connect to the
+ * destination itself */
+ if (flags & (VIR_MIGRATE_PARALLEL | VIR_MIGRATE_POSTCOPY))
spec.destType = MIGRATION_DEST_SOCKET;
else
spec.destType = MIGRATION_DEST_CONNECT_SOCKET;
spec.dest.socket.path = uribits->path;
} else {
- /* RDMA and multi-fd migration requires QEMU to connect to the destination
- * itself.
+ /* RDMA, multi-fd, and postcopy-preempt migration require QEMU to
+ * connect to the destination itself.
*/
- if (STREQ(uribits->scheme, "rdma") || (flags & VIR_MIGRATE_PARALLEL))
+ if (STREQ(uribits->scheme, "rdma") ||
+ flags & (VIR_MIGRATE_PARALLEL | VIR_MIGRATE_POSTCOPY))
spec.destType = MIGRATION_DEST_HOST;
else
spec.destType = MIGRATION_DEST_CONNECT_HOST;
"dirty-bitmaps",
"return-path",
"zero-copy-send",
+ "postcopy-preempt",
);
{.match = QEMU_MIGRATION_FLAG_REQUIRED,
.flag = VIR_MIGRATE_POSTCOPY,
.cap = QEMU_MIGRATION_CAP_POSTCOPY,
+ .optional = QEMU_MIGRATION_CAP_POSTCOPY_PREEMPT,
.party = QEMU_MIGRATION_SOURCE | QEMU_MIGRATION_DESTINATION},
{.match = QEMU_MIGRATION_FLAG_REQUIRED,
QEMU_MIGRATION_CAP_BLOCK_DIRTY_BITMAPS,
QEMU_MIGRATION_CAP_RETURN_PATH,
QEMU_MIGRATION_CAP_ZERO_COPY_SEND,
+ QEMU_MIGRATION_CAP_POSTCOPY_PREEMPT,
QEMU_MIGRATION_CAP_LAST
} qemuMigrationCapability;