diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 8222b54683fe8be1325f0a923cd7a1f9eb005a93..0cec340d0886bc90308e1696675dd88123f6a5cf 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2301,9 +2301,34 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
}
+static int
+qemuDomainDefAssignAddresses(virDomainDef *def,
+ virCapsPtr caps ATTRIBUTE_UNUSED,
+ unsigned int parseFlags ATTRIBUTE_UNUSED,
+ void *opaque)
+{
+ virQEMUDriverPtr driver = opaque;
+ virQEMUCapsPtr qemuCaps = NULL;
+ int ret = -1;
+
+ if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
+ def->emulator)))
+ goto cleanup;
+
+ if (qemuDomainAssignAddresses(def, qemuCaps, NULL) < 0)
+ goto cleanup;
+
+ ret = 0;
+ cleanup:
+ virObjectUnref(qemuCaps);
+ return ret;
+}
+
+
virDomainDefParserConfig virQEMUDriverDomainDefParserConfig = {
.devicesPostParseCallback = qemuDomainDeviceDefPostParse,
.domainPostParseCallback = qemuDomainDefPostParse,
+ .assignAddressesCallback = qemuDomainDefAssignAddresses,
.features = VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG |
VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN
};
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 00daf72a9a8265c34d44cf044744a2d41ffc3c15..156469511e42044f9ef1f63987e54affb4a14c6d 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1771,7 +1771,6 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
virObjectEventPtr event = NULL;
virObjectEventPtr event2 = NULL;
unsigned int start_flags = VIR_QEMU_PROCESS_START_COLD;
- virQEMUCapsPtr qemuCaps = NULL;
virCapsPtr caps = NULL;
unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
@@ -1799,12 +1798,6 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
if (virDomainCreateXMLEnsureACL(conn, def) < 0)
goto cleanup;
- if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator)))
- goto cleanup;
-
- if (qemuDomainAssignAddresses(def, qemuCaps, NULL) < 0)
- goto cleanup;
-
if (!(vm = virDomainObjListAdd(driver->domains, def,
driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
@@ -1858,7 +1851,6 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
qemuDomainEventQueue(driver, event2);
}
virObjectUnref(caps);
- virObjectUnref(qemuCaps);
virNWFilterUnlockFilterUpdates();
return dom;
}
@@ -7249,7 +7241,6 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml
virDomainObjPtr vm = NULL;
virDomainPtr dom = NULL;
virObjectEventPtr event = NULL;
- virQEMUCapsPtr qemuCaps = NULL;
virQEMUDriverConfigPtr cfg;
virCapsPtr caps = NULL;
unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
@@ -7272,12 +7263,6 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml
if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
goto cleanup;
- if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator)))
- goto cleanup;
-
- if (qemuDomainAssignAddresses(def, qemuCaps, NULL) < 0)
- goto cleanup;
-
if (!(vm = virDomainObjListAdd(driver->domains, def,
driver->xmlopt,
0, &oldDef)))
@@ -7328,7 +7313,6 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml
virDomainDefFree(def);
virDomainObjEndAPI(&vm);
qemuDomainEventQueue(driver, event);
- virObjectUnref(qemuCaps);
virObjectUnref(caps);
virObjectUnref(cfg);
return dom;
@@ -15975,9 +15959,6 @@ static virDomainPtr qemuDomainQemuAttach(virConnectPtr conn,
if (qemuAssignDeviceAliases(def, qemuCaps) < 0)
goto cleanup;
- if (qemuDomainAssignAddresses(def, qemuCaps, NULL) < 0)
- goto cleanup;
-
if (!(vm = virDomainObjListAdd(driver->domains, def,
driver->xmlopt,
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
diff --git a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml b/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
index 8cec27c3dc43bd943c15ddefbdddf60325360570..ab9195a9161c24176ceee6134d04a3b3b970fa71 100644
--- a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
+++ b/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
@@ -29,7 +29,9 @@
-
+
+
+
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index f41316102d2ab7f4ebe80ead20c5fca20c978bf6..64a53ee5d7703925ce35dda44d58c2240054328f 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1403,7 +1403,7 @@ mymain(void)
QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
DO_TEST("pseries-vio-user-assigned",
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
- DO_TEST_FAILURE("pseries-vio-address-clash",
+ DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 404cd10b0817917201d81ba3a3da1f5aaea30b25..30cf3e8dbb2d6f8889bfed75b2ba538dc30ca4eb 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -37,13 +37,9 @@ struct testInfo {
};
static int
-qemuXML2XMLPreFormatCallback(virDomainDefPtr def, const void *opaque)
+qemuXML2XMLPreFormatCallback(virDomainDefPtr def ATTRIBUTE_UNUSED,
+ const void *opaque ATTRIBUTE_UNUSED)
{
- const struct testInfo *info = opaque;
-
- if (qemuDomainAssignAddresses(def, info->qemuCaps, NULL))
- return -1;
-
return 0;
}
@@ -153,9 +149,6 @@ testCompareStatusXMLToXMLFiles(const void *opaque)
goto cleanup;
}
- if (qemuDomainAssignAddresses(obj->def, data->qemuCaps, NULL))
- goto cleanup;
-
/* format it back */
if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL,
VIR_DOMAIN_DEF_FORMAT_SECURE))) {