vm->newDef && !qemuDomainVcpuHotplugIsInOrder(vm->newDef)))
cookieFlags |= QEMU_MIGRATION_COOKIE_CPU_HOTPLUG;
+ if (priv->origCPU)
+ cookieFlags |= QEMU_MIGRATION_COOKIE_CPU;
+
if (!(mig = qemuMigrationEatCookie(driver, vm, NULL, 0, 0)))
goto cleanup;
QEMU_MIGRATION_COOKIE_LOCKSTATE |
QEMU_MIGRATION_COOKIE_NBD |
QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG |
- QEMU_MIGRATION_COOKIE_CPU_HOTPLUG)))
+ QEMU_MIGRATION_COOKIE_CPU_HOTPLUG |
+ QEMU_MIGRATION_COOKIE_CPU)))
goto cleanup;
if (STREQ_NULLABLE(protocol, "rdma") &&
"nbd",
"statistics",
"memory-hotplug",
- "cpu-hotplug");
+ "cpu-hotplug",
+ "cpu");
static void
VIR_FREE(mig->lockState);
VIR_FREE(mig->lockDriver);
VIR_FREE(mig->jobInfo);
+ virCPUDefFree(mig->cpu);
VIR_FREE(mig);
}
}
+static int
+qemuMigrationCookieAddCPU(qemuMigrationCookiePtr mig,
+ virDomainObjPtr vm)
+{
+ if (mig->cpu)
+ return 0;
+
+ if (!(mig->cpu = virCPUDefCopy(vm->def->cpu)))
+ return -1;
+
+ mig->flags |= QEMU_MIGRATION_COOKIE_CPU;
+
+ return 0;
+}
+
+
static void
qemuMigrationCookieGraphicsXMLFormat(virBufferPtr buf,
qemuMigrationCookieGraphicsPtr grap)
if (mig->flags & QEMU_MIGRATION_COOKIE_STATS && mig->jobInfo)
qemuMigrationCookieStatisticsXMLFormat(buf, mig->jobInfo);
+ if (mig->flags & QEMU_MIGRATION_COOKIE_CPU && mig->cpu)
+ virCPUDefFormatBufFull(buf, mig->cpu, NULL, false);
+
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</qemu-migration>\n");
return 0;
(!(mig->jobInfo = qemuMigrationCookieStatisticsXMLParse(ctxt))))
goto error;
+ if (flags & QEMU_MIGRATION_COOKIE_CPU &&
+ virCPUDefParseXML(ctxt, "./cpu[1]", VIR_CPU_TYPE_GUEST, &mig->cpu) < 0)
+ goto error;
+
virObjectUnref(caps);
return 0;
if (flags & QEMU_MIGRATION_COOKIE_CPU_HOTPLUG)
mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_CPU_HOTPLUG;
+ if (flags & QEMU_MIGRATION_COOKIE_CPU &&
+ qemuMigrationCookieAddCPU(mig, dom) < 0)
+ return -1;
+
if (!(*cookieout = qemuMigrationCookieXMLFormatStr(driver, mig)))
return -1;
QEMU_MIGRATION_COOKIE_FLAG_STATS,
QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG,
QEMU_MIGRATION_COOKIE_FLAG_CPU_HOTPLUG,
+ QEMU_MIGRATION_COOKIE_FLAG_CPU,
QEMU_MIGRATION_COOKIE_FLAG_LAST
} qemuMigrationCookieFlags;
QEMU_MIGRATION_COOKIE_STATS = (1 << QEMU_MIGRATION_COOKIE_FLAG_STATS),
QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG = (1 << QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG),
QEMU_MIGRATION_COOKIE_CPU_HOTPLUG = (1 << QEMU_MIGRATION_COOKIE_FLAG_CPU_HOTPLUG),
+ QEMU_MIGRATION_COOKIE_CPU = (1 << QEMU_MIGRATION_COOKIE_FLAG_CPU),
} qemuMigrationCookieFeatures;
typedef struct _qemuMigrationCookieGraphics qemuMigrationCookieGraphics;
/* If (flags & QEMU_MIGRATION_COOKIE_STATS) */
qemuDomainJobInfoPtr jobInfo;
+
+ /* If flags & QEMU_MIGRATION_COOKIE_CPU */
+ virCPUDefPtr cpu;
};