[libvirt PATCH v3 05/11] nodedev: store mdev UUID in mdev caps

Jonathon Jongsma posted 11 patches 5 years, 7 months ago
There is a newer version of this series
[libvirt PATCH v3 05/11] nodedev: store mdev UUID in mdev caps
Posted by Jonathon Jongsma 5 years, 7 months ago
In order to allow libvirt to create and start new mediated devices, we
need to be able to verify that the device has been started. In order to
do this, we'll need to save the UUID of newly-discovered devices within
the virNodeDevCapMdev structure. This allows us to search the device
list by UUID and verify whether the expected device has been started.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
 src/conf/node_device_conf.c        | 1 +
 src/conf/node_device_conf.h        | 1 +
 src/node_device/node_device_udev.c | 5 ++---
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index b1dfe81653..06e5924bef 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -2214,6 +2214,7 @@ virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps)
         break;
     case VIR_NODE_DEV_CAP_MDEV:
         VIR_FREE(data->mdev.type);
+        VIR_FREE(data->mdev.uuid);
         for (i = 0; i < data->mdev.nattributes; i++)
             virMediatedDeviceAttrFree(data->mdev.attributes[i]);
         VIR_FREE(data->mdev.attributes);
diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h
index e3e1e788d4..9b8c7aadea 100644
--- a/src/conf/node_device_conf.h
+++ b/src/conf/node_device_conf.h
@@ -141,6 +141,7 @@ typedef virNodeDevCapMdev *virNodeDevCapMdevPtr;
 struct _virNodeDevCapMdev {
     char *type;
     unsigned int iommuGroupNumber;
+    char *uuid;
     virMediatedDeviceAttrPtr *attributes;
     size_t nattributes;
 };
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 386f23ef3a..bdf0b03add 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1013,7 +1013,6 @@ udevProcessMediatedDevice(struct udev_device *dev,
                           virNodeDeviceDefPtr def)
 {
     int ret = -1;
-    const char *uuidstr = NULL;
     int iommugrp = -1;
     char *linkpath = NULL;
     char *canonicalpath = NULL;
@@ -1041,8 +1040,8 @@ udevProcessMediatedDevice(struct udev_device *dev,
 
     data->type = g_path_get_basename(canonicalpath);
 
-    uuidstr = udev_device_get_sysname(dev);
-    if ((iommugrp = virMediatedDeviceGetIOMMUGroupNum(uuidstr)) < 0)
+    data->uuid = g_strdup(udev_device_get_sysname(dev));
+    if ((iommugrp = virMediatedDeviceGetIOMMUGroupNum(data->uuid)) < 0)
         goto cleanup;
 
     if (udevGenerateDeviceName(dev, def, NULL) != 0)
-- 
2.21.3

Re: [libvirt PATCH v3 05/11] nodedev: store mdev UUID in mdev caps
Posted by Erik Skultety 5 years, 7 months ago
On Tue, Jun 16, 2020 at 09:27:53AM -0500, Jonathon Jongsma wrote:
> In order to allow libvirt to create and start new mediated devices, we
> need to be able to verify that the device has been started. In order to
> do this, we'll need to save the UUID of newly-discovered devices within
> the virNodeDevCapMdev structure. This allows us to search the device
> list by UUID and verify whether the expected device has been started.
>
> Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
> ---
Reviewed-by: Erik Skultety <eskultet@redhat.com>