]> xenbits.xensource.com Git - libvirt.git/commitdiff
nodedev: refactor virMediatedDeviceGetIOMMUGroupNum()
authorJonathon Jongsma <jjongsma@redhat.com>
Tue, 13 Apr 2021 19:09:19 +0000 (14:09 -0500)
committerJonathon Jongsma <jjongsma@redhat.com>
Thu, 15 Apr 2021 13:51:37 +0000 (08:51 -0500)
Currently virMediatedDeviceGetIOMMUGroupDev() looks up the iommu group
number and uses that to construct a path to the iommu group device.
virMediatedDeviceGetIOMMUGroupNum() then uses that device path and takes
the basename to get the group number. That's unnecessary extra string
manipulation for *GroupNum(). Reverse the implementations and make
*GroupDev() call *GroupNum().

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
src/util/virmdev.c

index 5f112c775f2dc9bfd031ef9d5606543820236039..fb89b80da4b37091e9771b31f065f941f3e525b9 100644 (file)
@@ -201,42 +201,38 @@ virMediatedDeviceGetPath(virMediatedDevice *dev)
 char *
 virMediatedDeviceGetIOMMUGroupDev(const char *uuidstr)
 {
-    g_autofree char *result_path = NULL;
-    g_autofree char *result_file = NULL;
-    g_autofree char *iommu_path = NULL;
-    g_autofree char *dev_path = virMediatedDeviceGetSysfsPath(uuidstr);
-
-    iommu_path = g_strdup_printf("%s/iommu_group", dev_path);
-
-    if (!virFileExists(iommu_path)) {
-        virReportSystemError(errno, _("failed to access '%s'"), iommu_path);
-        return NULL;
-    }
+    int group_num = virMediatedDeviceGetIOMMUGroupNum(uuidstr);
 
-    if (virFileResolveLink(iommu_path, &result_path) < 0) {
-        virReportSystemError(errno, _("failed to resolve '%s'"), iommu_path);
+    if (group_num < 0)
         return NULL;
-    }
-
-    result_file = g_path_get_basename(result_path);
 
-    return g_strdup_printf("/dev/vfio/%s", result_file);
+    return g_strdup_printf("/dev/vfio/%i", group_num);
 }
 
 
 int
 virMediatedDeviceGetIOMMUGroupNum(const char *uuidstr)
 {
-    g_autofree char *vfio_path = NULL;
+    g_autofree char *result_path = NULL;
     g_autofree char *group_num_str = NULL;
+    g_autofree char *iommu_path = NULL;
+    g_autofree char *dev_path = virMediatedDeviceGetSysfsPath(uuidstr);
     unsigned int group_num = -1;
 
-    if (!(vfio_path = virMediatedDeviceGetIOMMUGroupDev(uuidstr)))
+    iommu_path = g_strdup_printf("%s/iommu_group", dev_path);
+
+    if (!virFileExists(iommu_path)) {
+        virReportSystemError(errno, _("failed to access '%s'"), iommu_path);
+        return -1;
+    }
+
+    if (virFileResolveLink(iommu_path, &result_path) < 0) {
+        virReportSystemError(errno, _("failed to resolve '%s'"), iommu_path);
         return -1;
+    }
 
-    group_num_str = g_path_get_basename(vfio_path);
+    group_num_str = g_path_get_basename(result_path);
     ignore_value(virStrToLong_ui(group_num_str, NULL, 10, &group_num));
-
     return group_num;
 }