The definitions of struct virDomainCCWAddressSet and
virDomainCCWAddressSetFree() had to be moved from domain_addr
to domain_conf, because virDomainDefFree() has to free the CCW
address set when freeing domainDef.
---
src/conf/domain_addr.c | 9 ---------
src/conf/domain_addr.h | 7 -------
src/conf/domain_conf.c | 10 ++++++++++
src/conf/domain_conf.h | 9 +++++++++
src/libvirt_private.syms | 2 +-
src/qemu/qemu_domain.c | 1 -
src/qemu/qemu_domain.h | 1 -
src/qemu/qemu_domain_address.c | 22 ++++++++--------------
src/qemu/qemu_hotplug.c | 8 ++++----
9 files changed, 32 insertions(+), 37 deletions(-)
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
index 3570a62..93eebf2 100644
--- a/src/conf/domain_addr.c
+++ b/src/conf/domain_addr.c
@@ -805,15 +805,6 @@ virDomainCCWAddressReleaseAddr(virDomainCCWAddressSetPtr addrs,
return ret;
}
-void virDomainCCWAddressSetFree(virDomainCCWAddressSetPtr addrs)
-{
- if (!addrs)
- return;
-
- virHashFree(addrs->defined);
- VIR_FREE(addrs);
-}
-
virDomainCCWAddressSetPtr
virDomainCCWAddressSetCreate(void)
{
diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h
index f4a9852..cda1e3f 100644
--- a/src/conf/domain_addr.h
+++ b/src/conf/domain_addr.h
@@ -157,13 +157,6 @@ int virDomainPCIAddressReserveNextSlot(virDomainPCIAddressSetPtr
addrs,
virDomainPCIConnectFlags flags)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
-struct _virDomainCCWAddressSet {
- virHashTablePtr defined;
- virDomainDeviceCCWAddress next;
-};
-typedef struct _virDomainCCWAddressSet virDomainCCWAddressSet;
-typedef virDomainCCWAddressSet *virDomainCCWAddressSetPtr;
-
int virDomainCCWAddressAssign(virDomainDeviceInfoPtr dev,
virDomainCCWAddressSetPtr addrs,
bool autoassign)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 13230c9..12448dd 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2535,6 +2535,15 @@ virDomainVirtioSerialAddrSetFree(virDomainVirtioSerialAddrSetPtr
addrs)
}
}
+void virDomainCCWAddressSetFree(virDomainCCWAddressSetPtr addrs)
+{
+ if (!addrs)
+ return;
+
+ virHashFree(addrs->defined);
+ VIR_FREE(addrs);
+}
+
void virDomainDefFree(virDomainDefPtr def)
{
size_t i;
@@ -2706,6 +2715,7 @@ void virDomainDefFree(virDomainDefPtr def)
xmlFreeNode(def->metadata);
virDomainVirtioSerialAddrSetFree(def->vioserialaddrs);
+ virDomainCCWAddressSetFree(def->ccwaddrs);
VIR_FREE(def);
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 2bac992..28fdb98 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2104,6 +2104,13 @@ struct _virDomainVirtioSerialAddrSet {
typedef struct _virDomainVirtioSerialAddrSet virDomainVirtioSerialAddrSet;
typedef virDomainVirtioSerialAddrSet *virDomainVirtioSerialAddrSetPtr;
+struct _virDomainCCWAddressSet {
+ virHashTablePtr defined;
+ virDomainDeviceCCWAddress next;
+};
+typedef struct _virDomainCCWAddressSet virDomainCCWAddressSet;
+typedef virDomainCCWAddressSet *virDomainCCWAddressSetPtr;
+
typedef struct _virDomainPowerManagement virDomainPowerManagement;
typedef virDomainPowerManagement *virDomainPowerManagementPtr;
@@ -2271,6 +2278,7 @@ struct _virDomainDef {
virDomainKeyWrapDefPtr keywrap;
virDomainVirtioSerialAddrSetPtr vioserialaddrs;
+ virDomainCCWAddressSetPtr ccwaddrs;
/* Application-specific custom metadata */
xmlNodePtr metadata;
@@ -2545,6 +2553,7 @@ void virDomainDefClearDeviceAliases(virDomainDefPtr def);
void virDomainTPMDefFree(virDomainTPMDefPtr def);
void virDomainVirtioSerialControllerFree(virDomainVirtioSerialControllerPtr cont);
void virDomainVirtioSerialAddrSetFree(virDomainVirtioSerialAddrSetPtr addrs);
+void virDomainCCWAddressSetFree(virDomainCCWAddressSetPtr addrs);
typedef int (*virDomainDeviceInfoCallback)(virDomainDefPtr def,
virDomainDeviceDefPtr dev,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 7df6b35..75c8f70 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -94,7 +94,6 @@ virDomainCCWAddressAllocate;
virDomainCCWAddressAssign;
virDomainCCWAddressReleaseAddr;
virDomainCCWAddressSetCreate;
-virDomainCCWAddressSetFree;
virDomainCCWAddressValidate;
virDomainGetBlkioParametersAssignFromDef;
virDomainPCIAddressAsString;
@@ -165,6 +164,7 @@ virDomainBootTypeFromString;
virDomainBootTypeToString;
virDomainCapabilitiesPolicyTypeToString;
virDomainCapsFeatureTypeToString;
+virDomainCCWAddressSetFree;
virDomainChrConsoleTargetTypeFromString;
virDomainChrConsoleTargetTypeToString;
virDomainChrDefForeach;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index f6ccbc0..5e3d305 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1248,7 +1248,6 @@ qemuDomainObjPrivateFree(void *data)
virCgroupFree(&priv->cgroup);
virDomainPCIAddressSetFree(priv->pciaddrs);
- virDomainCCWAddressSetFree(priv->ccwaddrs);
virDomainChrSourceDefFree(priv->monConfig);
qemuDomainObjFreeJob(priv);
VIR_FREE(priv->vcpupids);
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 58221bb..4a15260 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -188,7 +188,6 @@ struct _qemuDomainObjPrivate {
int *vcpupids;
virDomainPCIAddressSetPtr pciaddrs;
- virDomainCCWAddressSetPtr ccwaddrs;
virQEMUCapsPtr qemuCaps;
char *lockState;
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 49f3652..5d58eb1 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -176,12 +176,10 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
*/
static int
qemuDomainAssignS390Addresses(virDomainDefPtr def,
- virQEMUCapsPtr qemuCaps,
- virDomainObjPtr obj)
+ virQEMUCapsPtr qemuCaps)
{
int ret = -1;
virDomainCCWAddressSetPtr addrs = NULL;
- qemuDomainObjPrivatePtr priv = NULL;
if (qemuDomainMachineIsS390CCW(def) &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_CCW)) {
@@ -204,15 +202,11 @@ qemuDomainAssignS390Addresses(virDomainDefPtr def,
def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390);
}
- if (obj && obj->privateData) {
- priv = obj->privateData;
- if (addrs) {
- /* if this is the live domain object, we persist the CCW addresses*/
- virDomainCCWAddressSetFree(priv->ccwaddrs);
- priv->ccwaddrs = addrs;
- addrs = NULL;
- }
- }
+ /* we persist the CCW addresses*/
+ virDomainCCWAddressSetFree(def->ccwaddrs);
+ def->ccwaddrs = addrs;
+ addrs = NULL;
+
ret = 0;
cleanup:
@@ -1147,7 +1141,7 @@ qemuDomainAssignAddresses(virDomainDefPtr def,
if (qemuDomainAssignSpaprVIOAddresses(def, qemuCaps) < 0)
return -1;
- if (qemuDomainAssignS390Addresses(def, qemuCaps, obj) < 0)
+ if (qemuDomainAssignS390Addresses(def, qemuCaps) < 0)
return -1;
qemuDomainAssignARMVirtioMMIOAddresses(def, qemuCaps);
@@ -1172,7 +1166,7 @@ qemuDomainReleaseDeviceAddress(virDomainObjPtr vm,
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
qemuDomainMachineIsS390CCW(vm->def) &&
virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW) &&
- virDomainCCWAddressReleaseAddr(priv->ccwaddrs, info) < 0)
+ virDomainCCWAddressReleaseAddr(vm->def->ccwaddrs, info) < 0)
VIR_WARN("Unable to release CCW address on %s",
NULLSTR(devstr));
else if (virDeviceInfoPCIAddressPresent(info) &&
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 696ec9e..bed4173 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -327,7 +327,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
goto cleanup;
if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
- if (virDomainCCWAddressAssign(&disk->info, priv->ccwaddrs,
+ if (virDomainCCWAddressAssign(&disk->info, vm->def->ccwaddrs,
!disk->info.addr.ccw.assigned) < 0)
goto error;
} else if (!disk->info.type ||
@@ -457,7 +457,7 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver,
if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info)
< 0)
goto cleanup;
} else if (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
- if (virDomainCCWAddressAssign(&controller->info, priv->ccwaddrs,
+ if (virDomainCCWAddressAssign(&controller->info, vm->def->ccwaddrs,
!controller->info.addr.ccw.assigned) < 0)
goto cleanup;
}
@@ -944,7 +944,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
if (qemuDomainMachineIsS390CCW(vm->def) &&
virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_CCW)) {
net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW;
- if (virDomainCCWAddressAssign(&net->info, priv->ccwaddrs,
+ if (virDomainCCWAddressAssign(&net->info, vm->def->ccwaddrs,
!net->info.addr.ccw.assigned) < 0)
goto cleanup;
} else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) {
@@ -1594,7 +1594,7 @@ qemuDomainAttachRNGDevice(virQEMUDriverPtr driver,
if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &rng->info) < 0)
return -1;
} else if (rng->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
- if (virDomainCCWAddressAssign(&rng->info, priv->ccwaddrs,
+ if (virDomainCCWAddressAssign(&rng->info, vm->def->ccwaddrs,
!rng->info.addr.ccw.assigned) < 0)
return -1;
}
--
2.7.4 (Apple Git-66)