]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nodedev: refactor CCW device address
authorBoris Fiuczynski <fiuczy@linux.ibm.com>
Tue, 4 Feb 2025 17:11:37 +0000 (18:11 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 5 Feb 2025 16:56:42 +0000 (17:56 +0100)
Replace cssid, ssid and devno elements with virCCWDeviceAddress.

Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/node_device_conf.c
src/conf/node_device_conf.h
src/node_device/node_device_driver.c
src/node_device/node_device_udev.c
tests/nodedevmdevctltest.c

index 97115949943b2e2c04bf1c76b80ca8b76b875529..85effb7d78d87404c3758e757f05e4c8ea01458b 100644 (file)
@@ -640,12 +640,7 @@ static void
 virNodeDeviceCapCCWDefFormat(virBuffer *buf,
                              const virNodeDevCapData *data)
 {
-    virBufferAsprintf(buf, "<cssid>0x%x</cssid>\n",
-                      data->ccw_dev.cssid);
-    virBufferAsprintf(buf, "<ssid>0x%x</ssid>\n",
-                      data->ccw_dev.ssid);
-    virBufferAsprintf(buf, "<devno>0x%04x</devno>\n",
-                      data->ccw_dev.devno);
+    virCCWDeviceAddressFormat(buf, data->ccw_dev.dev_addr);
 }
 
 
@@ -1231,9 +1226,7 @@ virNodeDevCapCCWParseXML(xmlXPathContextPtr ctxt,
     if (virNodeDevCCWDeviceAddressParseXML(ctxt, node, def->name, ccw_addr) < 0)
         return -1;
 
-    ccw_dev->cssid = ccw_addr->cssid;
-    ccw_dev->ssid = ccw_addr->ssid;
-    ccw_dev->devno = ccw_addr->devno;
+    ccw_dev->dev_addr = g_steal_pointer(&ccw_addr);
 
     return 0;
 }
@@ -2621,6 +2614,7 @@ virNodeDevCapsDefFree(virNodeDevCapsDef *caps)
         g_free(data->mdev.parent_addr);
         break;
     case VIR_NODE_DEV_CAP_CSS_DEV:
+        g_free(data->ccw_dev.dev_addr);
         for (i = 0; i < data->ccw_dev.nmdev_types; i++)
             virMediatedDeviceTypeFree(data->ccw_dev.mdev_types[i]);
         g_free(data->ccw_dev.mdev_types);
@@ -2638,10 +2632,12 @@ virNodeDevCapsDefFree(virNodeDevCapsDef *caps)
         g_free(data->mdev_parent.mdev_types);
         g_free(data->mdev_parent.address);
         break;
+    case VIR_NODE_DEV_CAP_CCW_DEV:
+        g_free(data->ccw_dev.dev_addr);
+        break;
     case VIR_NODE_DEV_CAP_DRM:
     case VIR_NODE_DEV_CAP_FC_HOST:
     case VIR_NODE_DEV_CAP_VPORTS:
-    case VIR_NODE_DEV_CAP_CCW_DEV:
     case VIR_NODE_DEV_CAP_VDPA:
     case VIR_NODE_DEV_CAP_AP_CARD:
     case VIR_NODE_DEV_CAP_AP_QUEUE:
index 25666a333ee9fb935643c59060f2dd9dd001ca13..ad2258e90de0320ca735f82c520ecaac652bfa4d 100644 (file)
@@ -281,9 +281,7 @@ struct _virNodeDevCapDRM {
 
 typedef struct _virNodeDevCapCCW virNodeDevCapCCW;
 struct _virNodeDevCapCCW {
-    unsigned int cssid;
-    unsigned int ssid;
-    unsigned int devno;
+    virCCWDeviceAddress *dev_addr;
     unsigned int flags; /* enum virNodeDevCCWCapFlags */
     virMediatedDeviceType **mdev_types;
     size_t nmdev_types;
index fa5db0d5d507fbd9182ac8747e64168635b0046f..9898b1914aca8aae0a7c2c8624ae079a465870ea 100644 (file)
@@ -683,16 +683,9 @@ nodeDeviceObjFormatAddress(virNodeDeviceObj *obj)
             break;
             }
 
-        case VIR_NODE_DEV_CAP_CSS_DEV: {
-            virCCWDeviceAddress ccw_addr = {
-                .cssid = caps->data.ccw_dev.cssid,
-                .ssid = caps->data.ccw_dev.ssid,
-                .devno = caps->data.ccw_dev.devno
-            };
-
-            addr = virCCWDeviceAddressAsString(&ccw_addr);
+        case VIR_NODE_DEV_CAP_CSS_DEV:
+            addr = virCCWDeviceAddressAsString(caps->data.ccw_dev.dev_addr);
             break;
-            }
 
         case VIR_NODE_DEV_CAP_AP_MATRIX:
             addr = g_strdup(caps->data.ap_matrix.addr);
index 1d8486f6235bc9ee46ad4f854fa303427ac2e9c5..97fbe95ac765c1bbfcfa14c8f0c7b206aaf71620 100644 (file)
@@ -1184,18 +1184,21 @@ udevGetCCWAddress(const char *sysfs_path,
                   virNodeDevCapData *data)
 {
     char *p;
+    g_autofree virCCWDeviceAddress *ccw_addr = g_new0(virCCWDeviceAddress, 1);
 
     if ((p = strrchr(sysfs_path, '/')) == NULL ||
         virCCWDeviceAddressParseFromString(p + 1,
-                                           &data->ccw_dev.cssid,
-                                           &data->ccw_dev.ssid,
-                                           &data->ccw_dev.devno) < 0) {
+                                           &ccw_addr->cssid,
+                                           &ccw_addr->ssid,
+                                           &ccw_addr->devno) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("failed to parse the CCW address from sysfs path: '%1$s'"),
                        sysfs_path);
         return -1;
     }
 
+    data->ccw_dev.dev_addr = g_steal_pointer(&ccw_addr);
+
     return 0;
 }
 
index 93b0efcb1cc947fd1f0b8bfd4b02a51f58048e4a..c7e6836edb16808d00e1ab0e073a41819fb5d937 100644 (file)
@@ -435,9 +435,10 @@ fakeCSSDevice(void)
 
     def->caps->data.type = VIR_NODE_DEV_CAP_CSS_DEV;
     css_dev = &def->caps->data.ccw_dev;
-    css_dev->cssid = 0;
-    css_dev->ssid = 0;
-    css_dev->devno = 82;
+    css_dev->dev_addr = g_new0(virCCWDeviceAddress, 1);
+    css_dev->dev_addr->cssid = 0;
+    css_dev->dev_addr->ssid = 0;
+    css_dev->dev_addr->devno = 82;
 
     return def;
 }