[libvirt] [PATCH 2/4] Move ccwaddrs from QEMU's private data to domainDef

Tomasz Flendrich t.flendrich at gmail.com
Mon Jun 20 00:18:38 UTC 2016


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)




More information about the libvir-list mailing list