All QEMU versions we care about already support migration events.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
"pci-serial", /* QEMU_CAPS_DEVICE_PCI_SERIAL */
"aarch64-off", /* QEMU_CAPS_CPU_AARCH64_OFF */
"vhost-user-multiqueue", /* X_QEMU_CAPS_VHOSTUSER_MULTIQUEUE */
- "migration-event", /* QEMU_CAPS_MIGRATION_EVENT */
+ "migration-event", /* X_QEMU_CAPS_MIGRATION_EVENT */
/* 190 */
"gpex-pcihost", /* QEMU_CAPS_OBJECT_GPEX */
/* Use virQEMUCapsQMPSchemaQueries for querying parameters of events */
struct virQEMUCapsStringFlags virQEMUCapsEvents[] = {
- { "MIGRATION", QEMU_CAPS_MIGRATION_EVENT },
{ "VSERPORT_CHANGE", QEMU_CAPS_VSERPORT_CHANGE },
{ "BLOCK_WRITE_THRESHOLD", QEMU_CAPS_BLOCK_WRITE_THRESHOLD },
{ "DUMP_COMPLETED", QEMU_CAPS_DUMP_COMPLETED },
QEMU_CAPS_DEVICE_PCI_SERIAL, /* -device pci-serial */
QEMU_CAPS_CPU_AARCH64_OFF, /* -cpu ...,aarch64=off */
X_QEMU_CAPS_VHOSTUSER_MULTIQUEUE, /* vhost-user with -netdev queues= */
- QEMU_CAPS_MIGRATION_EVENT, /* MIGRATION event */
+ X_QEMU_CAPS_MIGRATION_EVENT, /* MIGRATION event */
/* 190 */
QEMU_CAPS_OBJECT_GPEX, /* have generic PCI host controller */
virDomainObj *vm,
virDomainJobData *jobData)
{
- qemuDomainObjPrivate *priv = vm->privateData;
qemuDomainJobDataPrivate *privStats = jobData->privateData;
- bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
-
if (jobData->status == VIR_DOMAIN_JOB_STATUS_ACTIVE ||
jobData->status == VIR_DOMAIN_JOB_STATUS_MIGRATING ||
jobData->status == VIR_DOMAIN_JOB_STATUS_HYPERVISOR_COMPLETED ||
jobData->status == VIR_DOMAIN_JOB_STATUS_POSTCOPY) {
- if (events &&
- jobData->status != VIR_DOMAIN_JOB_STATUS_ACTIVE &&
+ if (jobData->status != VIR_DOMAIN_JOB_STATUS_ACTIVE &&
qemuMigrationAnyFetchStats(driver, vm, VIR_ASYNC_JOB_NONE,
jobData, NULL) < 0)
return -1;
virDomainJobData *jobData = priv->job.current;
qemuDomainJobDataPrivate *privJob = jobData->privateData;
g_autofree char *error = NULL;
- bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
- if (!events ||
- privJob->stats.mig.status == QEMU_MONITOR_MIGRATION_STATUS_ERROR) {
+ if (privJob->stats.mig.status == QEMU_MONITOR_MIGRATION_STATUS_ERROR) {
if (qemuMigrationAnyFetchStats(driver, vm, asyncJob, jobData, &error) < 0)
return -1;
}
{
qemuDomainObjPrivate *priv = vm->privateData;
virDomainJobData *jobData = priv->job.current;
- bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
int rv;
jobData->status = VIR_DOMAIN_JOB_STATUS_MIGRATING;
if (rv < 0)
return rv;
- if (events) {
- if (virDomainObjWait(vm) < 0) {
- if (virDomainObjIsActive(vm))
- jobData->status = VIR_DOMAIN_JOB_STATUS_FAILED;
- return -2;
- }
- } else {
- /* Poll every 50ms for progress & to allow cancellation */
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 50 * 1000 * 1000ull };
-
- virObjectUnlock(vm);
- nanosleep(&ts, NULL);
- virObjectLock(vm);
+ if (virDomainObjWait(vm) < 0) {
+ if (virDomainObjIsActive(vm))
+ jobData->status = VIR_DOMAIN_JOB_STATUS_FAILED;
+ return -2;
}
}
- if (events)
- ignore_value(qemuMigrationAnyFetchStats(driver, vm, asyncJob, jobData, NULL));
+ ignore_value(qemuMigrationAnyFetchStats(driver, vm, asyncJob, jobData, NULL));
qemuDomainJobDataUpdateTime(jobData);
qemuDomainJobDataUpdateDowntime(jobData);
virDomainAsyncJob asyncJob,
bool postcopy)
{
- qemuDomainObjPrivate *priv = vm->privateData;
unsigned int flags = 0;
int rv;
- if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT))
- return 0;
-
VIR_DEBUG("Waiting for incoming migration to complete");
if (postcopy)
virErrorPtr orig_err = NULL;
unsigned int cookieFlags = 0;
bool abort_on_error = !!(flags & VIR_MIGRATE_ABORT_ON_ERROR);
- bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
bool bwParam = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_BANDWIDTH);
bool storageMigration = flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC);
bool cancel = false;
return -1;
}
- if (events)
- priv->signalIOError = abort_on_error;
+ priv->signalIOError = abort_on_error;
if (flags & VIR_MIGRATE_PERSIST_DEST) {
if (persist_xml) {
ret = 0;
cleanup:
- if (events)
- priv->signalIOError = false;
-
+ priv->signalIOError = false;
priv->migMaxBandwidth = restore_max_bandwidth;
virErrorRestore(&orig_err);
}
}
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) {
- migEvent = virBitmapNew(QEMU_MIGRATION_CAP_LAST);
+ migEvent = virBitmapNew(QEMU_MIGRATION_CAP_LAST);
- ignore_value(virBitmapSetBit(migEvent, QEMU_MIGRATION_CAP_EVENTS));
+ ignore_value(virBitmapSetBit(migEvent, QEMU_MIGRATION_CAP_EVENTS));
- if (!(json = qemuMigrationCapsToJSON(migEvent, migEvent)))
- return -1;
+ if (!(json = qemuMigrationCapsToJSON(migEvent, migEvent)))
+ return -1;
- if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
- return -1;
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
+ return -1;
- rc = qemuMonitorSetMigrationCapabilities(priv->mon, &json);
+ rc = qemuMonitorSetMigrationCapabilities(priv->mon, &json);
- qemuDomainObjExitMonitor(vm);
+ qemuDomainObjExitMonitor(vm);
- if (rc < 0) {
- virResetLastError();
- VIR_DEBUG("Cannot enable migration events; clearing capability");
- virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
- }
+ if (rc < 0) {
+ virResetLastError();
+ VIR_DEBUG("Cannot enable migration events");
}
/* Migration events capability must always be enabled, clearing it from
<flag name='VGA.vgamem_mb'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='rtl8139'/>
<flag name='e1000'/>
<flag name='virtio-net'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pci-serial'/>
<flag name='aarch64-off'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='VGA.vgamem_mb'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='VGA.vgamem_mb'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='migrate-rdma'/>
<flag name='aes-key-wrap'/>
<flag name='dea-key-wrap'/>
- <flag name='migration-event'/>
<flag name='virtio-net'/>
<flag name='virtio-gpu'/>
<flag name='virtio-gpu.virgl'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
<flag name='aarch64-off'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='migrate-rdma'/>
<flag name='aes-key-wrap'/>
<flag name='dea-key-wrap'/>
- <flag name='migration-event'/>
<flag name='virtio-net'/>
<flag name='virtio-gpu'/>
<flag name='virtio-gpu.virgl'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
<flag name='aarch64-off'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='VGA.vgamem_mb'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='memory-backend-file'/>
<flag name='iothread'/>
<flag name='migrate-rdma'/>
- <flag name='migration-event'/>
<flag name='chardev-file-append'/>
<flag name='vserport-change-event'/>
<flag name='spice-gl'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
<flag name='aarch64-off'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='VGA.vgamem_mb'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='migrate-rdma'/>
<flag name='aes-key-wrap'/>
<flag name='dea-key-wrap'/>
- <flag name='migration-event'/>
<flag name='virtio-net'/>
<flag name='virtio-gpu'/>
<flag name='virtio-gpu.virgl'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
<flag name='aarch64-off'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='migrate-rdma'/>
<flag name='aes-key-wrap'/>
<flag name='dea-key-wrap'/>
- <flag name='migration-event'/>
<flag name='virtio-net'/>
<flag name='virtio-gpu'/>
<flag name='virtio-gpu.virgl'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
<flag name='aarch64-off'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
<flag name='aarch64-off'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='vmware-svga.vgamem_mb'/>
<flag name='pc-dimm'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='xio3130-downstream'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>
<flag name='pc-dimm'/>
<flag name='machine-vmport-opt'/>
<flag name='pci-serial'/>
- <flag name='migration-event'/>
<flag name='gpex-pcihost'/>
<flag name='ioh3420'/>
<flag name='x3130-upstream'/>