]> xenbits.xensource.com Git - libvirt.git/commitdiff
test: nodedev: fill active_config at driver startup time
authorCole Robinson <crobinso@redhat.com>
Sat, 6 Apr 2024 19:13:40 +0000 (15:13 -0400)
committerCole Robinson <crobinso@redhat.com>
Wed, 24 Apr 2024 13:38:54 +0000 (09:38 -0400)
Commit v10.0.0-265-ge67bca23e4 added a `active_config` and
`defined_config` to nodedev mdev internal XML handling.
`defined_config` can be filled at XML parse time, but `active_config`
must be filled in by nodedev driver. This wasn't implemented for the
test driver however, which caused virt-manager test suite regressions.

Working example:

```
$ virsh --connect test:///home/crobinso/src/virt-manager/tests/data/testdriver/testdriver.xml nodedev-dumpxml mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110
<device>
  <name>mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110</name>
  <path>/sys/devices/css0/0.0.0023/8e37ee90-2b51-45e3-9b25-bf8283c03110</path>
  <parent>css_0_0_0023</parent>
  <capability type='mdev'>
    <type id='vfio_ccw-io'/>
    <iommuGroup number='0'/>
  </capability>
</device>
```

Broken example:

```
$ virsh --connect test:///home/crobinso/src/virt-manager/tests/data/testdriver/testdriver.xml nodedev-dumpxml mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110
<device>
  <name>mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110</name>
  <path>/sys/devices/css0/0.0.0023/8e37ee90-2b51-45e3-9b25-bf8283c03110</path>
  <parent>css_0_0_0023</parent>
  <capability type='mdev'>
    <iommuGroup number='0'/>
  </capability>
</device>
```

There's already code that does what we want in the test suite.
Move it to a shared function, and call it in test driver when
creating a nodedev from driver startup XML.

Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
src/conf/node_device_conf.c
src/conf/node_device_conf.h
src/libvirt_private.syms
src/test/test_driver.c
tests/nodedevxml2xmltest.c

index 5cfbd6a7eb7219c6ecaf5d120e03ad2b4f5af029..fe6d9a36b2547b4d2e837855c1752ff56da11391 100644 (file)
@@ -2804,6 +2804,30 @@ virNodeDeviceCapsListExport(virNodeDeviceDef *def,
     return ncaps;
 }
 
+void
+virNodeDeviceSyncMdevActiveConfig(virNodeDeviceDef *def)
+{
+    size_t i;
+    virNodeDevCapsDef *caps;
+
+    for (caps = def->caps; caps; caps = caps->next) {
+        virNodeDevCapData *data = &caps->data;
+
+        if (caps->data.type != VIR_NODE_DEV_CAP_MDEV)
+            continue;
+
+        data->mdev.active_config.type = g_strdup(data->mdev.defined_config.type);
+        for (i = 0; i < data->mdev.defined_config.nattributes; i++) {
+            g_autoptr(virMediatedDeviceAttr) attr = g_new0(virMediatedDeviceAttr, 1);
+
+            attr->name = g_strdup(data->mdev.defined_config.attributes[i]->name);
+            attr->value = g_strdup(data->mdev.defined_config.attributes[i]->value);
+            VIR_APPEND_ELEMENT(data->mdev.active_config.attributes,
+                               data->mdev.active_config.nattributes,
+                               attr);
+        }
+    }
+}
 
 #ifdef __linux__
 
index f0a53338813b3caea19fe8f833b488f89433b8a0..4b82636af77f6bb735e658fca034ea6cfe1e535e 100644 (file)
@@ -470,3 +470,6 @@ virNodeDeviceUpdateCaps(virNodeDeviceDef *def);
 int
 virNodeDeviceCapsListExport(virNodeDeviceDef *def,
                             virNodeDevCapType **list);
+
+void
+virNodeDeviceSyncMdevActiveConfig(virNodeDeviceDef *def);
index 839fe4f545f1e21486c68b63ed0135fbe9332f6c..3186dd6d234e4957ed52e2a62908977a5429344f 100644 (file)
@@ -888,6 +888,7 @@ virNodeDeviceGetPCIDynamicCaps;
 virNodeDeviceGetSCSIHostCaps;
 virNodeDeviceGetSCSITargetCaps;
 virNodeDeviceGetWWNs;
+virNodeDeviceSyncMdevActiveConfig;
 virNodeDeviceUpdateCaps;
 
 
index e7d2b6c86652045a3fa44dae856700917a2670a7..d2d1bc43e3dade772da03111717bc9ec6ece21fd 100644 (file)
@@ -1272,6 +1272,7 @@ testParseNodedevs(testDriver *privconn,
         virNodeDeviceObjSetPersistent(obj, true);
         virNodeDeviceObjSetActive(obj, true);
         virNodeDeviceObjSetSkipUpdateCaps(obj, true);
+        virNodeDeviceSyncMdevActiveConfig(def);
         virNodeDeviceObjEndAPI(&obj);
     }
 
index e9189226729642910be45153ea6acf125221f69f..814a817725c8c7adf1df971fe8eb7f2c14c15618 100644 (file)
@@ -24,7 +24,6 @@ testCompareXMLToXMLFiles(const char *xml, const char *outfile, unsigned int flag
     int ret = -1;
     virNodeDeviceDef *dev = NULL;
     virNodeDevCapsDef *caps;
-    size_t i;
 
     if (virTestLoadFile(xml, &xmlData) < 0)
         goto fail;
@@ -52,22 +51,11 @@ testCompareXMLToXMLFiles(const char *xml, const char *outfile, unsigned int flag
                                            data->storage.logical_block_size;
             }
         }
-
-        if (caps->data.type == VIR_NODE_DEV_CAP_MDEV &&
-            !(flags & VIR_NODE_DEVICE_XML_INACTIVE)) {
-            data->mdev.active_config.type = g_strdup(data->mdev.defined_config.type);
-            for (i = 0; i < data->mdev.defined_config.nattributes; i++) {
-                g_autoptr(virMediatedDeviceAttr) attr = g_new0(virMediatedDeviceAttr, 1);
-
-                attr->name = g_strdup(data->mdev.defined_config.attributes[i]->name);
-                attr->value = g_strdup(data->mdev.defined_config.attributes[i]->value);
-                VIR_APPEND_ELEMENT(data->mdev.active_config.attributes,
-                                   data->mdev.active_config.nattributes,
-                                   attr);
-            }
-        }
     }
 
+    if (!(flags & VIR_NODE_DEVICE_XML_INACTIVE))
+        virNodeDeviceSyncMdevActiveConfig(dev);
+
     if (!(actual = virNodeDeviceDefFormat(dev, flags)))
         goto fail;