virDomainDefPtr ret = NULL;
char *xml;
- if (!(xml = qemuDomainDefFormatXML(driver, src, flags)))
+ if (!(xml = qemuDomainDefFormatXML(driver, qemuCaps, src, flags)))
return NULL;
ret = qemuDomainDefFromXML(driver, qemuCaps, xml);
static int
qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr def,
virCPUDefPtr origCPU,
unsigned int flags,
int ret = -1;
virDomainDefPtr copy = NULL;
virCapsPtr caps = NULL;
- virQEMUCapsPtr qemuCaps = NULL;
virCheckFlags(VIR_DOMAIN_XML_COMMON_FLAGS | VIR_DOMAIN_XML_UPDATE_CPU, -1);
if (!(flags & (VIR_DOMAIN_XML_UPDATE_CPU | VIR_DOMAIN_XML_MIGRATABLE)))
goto format;
- if (!(copy = virDomainDefCopy(def, caps, driver->xmlopt, NULL,
+ if (!(copy = virDomainDefCopy(def, caps, driver->xmlopt, qemuCaps,
flags & VIR_DOMAIN_XML_MIGRATABLE)))
goto cleanup;
def->cpu &&
(def->cpu->mode != VIR_CPU_MODE_CUSTOM ||
def->cpu->model)) {
- if (!(qemuCaps = virQEMUCapsCacheLookupCopy(driver->qemuCapsCache,
- def->emulator,
- def->os.machine)))
- goto cleanup;
+ VIR_AUTOUNREF(virQEMUCapsPtr) qCaps = NULL;
+
+ if (qemuCaps) {
+ qCaps = virObjectRef(qemuCaps);
+ } else {
+ if (!(qCaps = virQEMUCapsCacheLookupCopy(driver->qemuCapsCache,
+ def->emulator,
+ def->os.machine)))
+ goto cleanup;
+ }
if (virCPUUpdate(def->os.arch, def->cpu,
- virQEMUCapsGetHostModel(qemuCaps, def->virtType,
+ virQEMUCapsGetHostModel(qCaps, def->virtType,
VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0)
goto cleanup;
}
cleanup:
virDomainDefFree(copy);
virObjectUnref(caps);
- virObjectUnref(qemuCaps);
return ret;
}
int
qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr def,
unsigned int flags,
virBufferPtr buf)
{
- return qemuDomainDefFormatBufInternal(driver, def, NULL, flags, buf);
+ return qemuDomainDefFormatBufInternal(driver, qemuCaps, def, NULL, flags, buf);
}
static char *
qemuDomainDefFormatXMLInternal(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr def,
virCPUDefPtr origCPU,
unsigned int flags)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- if (qemuDomainDefFormatBufInternal(driver, def, origCPU, flags, &buf) < 0)
+ if (qemuDomainDefFormatBufInternal(driver, qemuCaps, def, origCPU, flags, &buf) < 0)
return NULL;
return virBufferContentAndReset(&buf);
char *
qemuDomainDefFormatXML(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr def,
unsigned int flags)
{
- return qemuDomainDefFormatXMLInternal(driver, def, NULL, flags);
+ return qemuDomainDefFormatXMLInternal(driver, qemuCaps, def, NULL, flags);
}
origCPU = priv->origCPU;
}
- return qemuDomainDefFormatXMLInternal(driver, def, origCPU, flags);
+ return qemuDomainDefFormatXMLInternal(driver, priv->qemuCaps, def, origCPU, flags);
}
char *
qemuDomainDefFormatLive(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr def,
virCPUDefPtr origCPU,
bool inactive,
if (compatible)
flags |= VIR_DOMAIN_XML_MIGRATABLE;
- return qemuDomainDefFormatXMLInternal(driver, def, origCPU, flags);
+ return qemuDomainDefFormatXMLInternal(driver, qemuCaps, def, origCPU, flags);
}
unsigned int flags);
int qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr vm,
unsigned int flags,
virBuffer *buf);
char *qemuDomainDefFormatXML(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr vm,
unsigned int flags);
unsigned int flags);
char *qemuDomainDefFormatLive(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virDomainDefPtr def,
virCPUDefPtr origCPU,
bool inactive,
virDomainDefFree(def);
goto endjob;
}
- xml = qemuDomainDefFormatLive(driver, def, NULL, true, true);
+ xml = qemuDomainDefFormatLive(driver, priv->qemuCaps, def, NULL, true, true);
} else {
- xml = qemuDomainDefFormatLive(driver, vm->def, priv->origCPU, true, true);
+ xml = qemuDomainDefFormatLive(driver, priv->qemuCaps, vm->def,
+ priv->origCPU, true, true);
}
if (!xml) {
virReportError(VIR_ERR_OPERATION_FAILED,
if (virDomainSaveImageGetXMLDescEnsureACL(conn, def) < 0)
goto cleanup;
- ret = qemuDomainDefFormatXML(driver, def, flags);
+ ret = qemuDomainDefFormatXML(driver, NULL, def, flags);
cleanup:
virQEMUSaveDataFree(data);
VIR_FREE(data->xml);
- if (!(data->xml = qemuDomainDefFormatXML(driver, newdef,
+ if (!(data->xml = qemuDomainDefFormatXML(driver, NULL, newdef,
VIR_DOMAIN_XML_INACTIVE |
VIR_DOMAIN_XML_SECURE |
VIR_DOMAIN_XML_MIGRATABLE)))
virDomainDefPtr def = NULL;
int fd = -1;
virQEMUSaveDataPtr data = NULL;
+ qemuDomainObjPrivatePtr priv;
virCheckFlags(VIR_DOMAIN_SAVE_IMAGE_XML_SECURE, NULL);
if (!(vm = qemuDomObjFromDomain(dom)))
return ret;
+ priv = vm->privateData;
+
if (virDomainManagedSaveGetXMLDescEnsureACL(dom->conn, vm->def, flags) < 0)
goto cleanup;
false, NULL, false, false)) < 0)
goto cleanup;
- ret = qemuDomainDefFormatXML(driver, def, flags);
+ ret = qemuDomainDefFormatXML(driver, priv->qemuCaps, def, flags);
cleanup:
virQEMUSaveDataFree(data);
"snapshot", false)) < 0)
goto cleanup;
- if (!(xml = qemuDomainDefFormatLive(driver, vm->def, priv->origCPU,
+ if (!(xml = qemuDomainDefFormatLive(driver, priv->qemuCaps,
+ vm->def, priv->origCPU,
true, true)) ||
!(snapdef->cookie = (virObjectPtr) qemuDomainSaveCookieNew(vm)))
goto cleanup;
} else {
/* Easiest way to clone inactive portion of vm->def is via
* conversion in and back out of xml. */
- if (!(xml = qemuDomainDefFormatLive(driver, vm->def, priv->origCPU,
+ if (!(xml = qemuDomainDefFormatLive(driver, priv->qemuCaps,
+ vm->def, priv->origCPU,
true, true)) ||
!(def->parent.dom = virDomainDefParseString(xml, caps, driver->xmlopt, NULL,
VIR_DOMAIN_DEF_PARSE_INACTIVE |
/* Easiest way to clone inactive portion of vm->def is via
* conversion in and back out of xml. */
- if (!(xml = qemuDomainDefFormatLive(driver, vm->def, priv->origCPU,
+ if (!(xml = qemuDomainDefFormatLive(driver, priv->qemuCaps,
+ vm->def, priv->origCPU,
true, true)) ||
!(def->parent.dom = virDomainDefParseString(xml, caps, driver->xmlopt, NULL,
VIR_DOMAIN_DEF_PARSE_INACTIVE |
if (!qemuDomainCheckABIStability(driver, vm, def))
goto cleanup;
- rv = qemuDomainDefFormatLive(driver, def, NULL, false, true);
+ rv = qemuDomainDefFormatLive(driver, priv->qemuCaps, def, NULL, false, true);
} else {
- rv = qemuDomainDefFormatLive(driver, vm->def, priv->origCPU,
+ rv = qemuDomainDefFormatLive(driver, priv->qemuCaps, vm->def, priv->origCPU,
false, true);
}
char *xml;
int hookret;
- if (!(xml = qemuDomainDefFormatXML(driver, *def,
+ if (!(xml = qemuDomainDefFormatXML(driver, NULL, *def,
VIR_DOMAIN_XML_SECURE |
VIR_DOMAIN_XML_MIGRATABLE)))
goto cleanup;
static int
qemuMigrationCookieXMLFormat(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
virBufferPtr buf,
qemuMigrationCookiePtr mig)
{
if ((mig->flags & QEMU_MIGRATION_COOKIE_PERSISTENT) &&
mig->persistent) {
if (qemuDomainDefFormatBuf(driver,
+ qemuCaps,
mig->persistent,
VIR_DOMAIN_XML_INACTIVE |
VIR_DOMAIN_XML_SECURE |
static char *
qemuMigrationCookieXMLFormatStr(virQEMUDriverPtr driver,
+ virQEMUCapsPtr qemuCaps,
qemuMigrationCookiePtr mig)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- if (qemuMigrationCookieXMLFormat(driver, &buf, mig) < 0) {
+ if (qemuMigrationCookieXMLFormat(driver, qemuCaps, &buf, mig) < 0) {
virBufferFreeAndReset(&buf);
return NULL;
}
int *cookieoutlen,
unsigned int flags)
{
+ qemuDomainObjPrivatePtr priv = dom->privateData;
+
if (!cookieout || !cookieoutlen)
return 0;
qemuMigrationCookieAddCaps(mig, dom, party) < 0)
return -1;
- if (!(*cookieout = qemuMigrationCookieXMLFormatStr(driver, mig)))
+ if (!(*cookieout = qemuMigrationCookieXMLFormatStr(driver, priv->qemuCaps, mig)))
return -1;
*cookieoutlen = strlen(*cookieout) + 1;
virHookQemuOpType op,
virHookSubopType subop)
{
+ qemuDomainObjPrivatePtr priv = vm->privateData;
char *xml;
int ret;
if (!virHookPresent(VIR_HOOK_DRIVER_QEMU))
return 0;
- if (!(xml = qemuDomainDefFormatXML(driver, vm->def, 0)))
+ if (!(xml = qemuDomainDefFormatXML(driver, priv->qemuCaps, vm->def, 0)))
return -1;
ret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, op, subop,
/* now that we know it's stopped call the hook if present */
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
- char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
+ char *xml = qemuDomainDefFormatXML(driver, NULL, vm->def, 0);
/* we can't stop the operation even if the script raised an error */
ignore_value(virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
/* The "release" hook cleans up additional resources */
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
- char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
+ char *xml = qemuDomainDefFormatXML(driver, NULL, vm->def, 0);
/* we can't stop the operation even if the script raised an error */
virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
/* Run an hook to allow admins to do some magic */
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
- char *xml = qemuDomainDefFormatXML(driver, obj->def, 0);
+ char *xml = qemuDomainDefFormatXML(driver, priv->qemuCaps, obj->def, 0);
int hookret;
hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, obj->def->name,