]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: Move openning IOMMU device to viriommufd
authorPavel Hrdina <phrdina@redhat.com>
Sun, 15 Feb 2026 14:32:24 +0000 (15:32 +0100)
committerPavel Hrdina <phrdina@redhat.com>
Mon, 16 Feb 2026 14:50:39 +0000 (15:50 +0100)
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/libvirt_private.syms
src/qemu/qemu_process.c
src/util/viriommufd.c
src/util/viriommufd.h

index 2f9fdc04ad03fc8609c1fa4085d8a69c794fa39e..576b1f65959e96c9774752230fa94dca68271941 100644 (file)
@@ -2648,7 +2648,7 @@ virInitctlFifos;
 virInitctlSetRunLevel;
 
 # util/viriommufd.h
-virIOMMUFDSetRLimitMode;
+virIOMMUFDOpenDevice;
 virIOMMUFDSupported;
 
 # util/viriscsi.h
index fd400ae8a6d399fe5d924bcabbdac2cf099a3491..9b459f47ca014fae920654defc4a50733e6290d1 100644 (file)
@@ -7693,15 +7693,8 @@ qemuProcessOpenIommuFd(virDomainObj *vm)
 
     VIR_DEBUG("Opening IOMMU FD for domain %s", vm->def->name);
 
-    if ((fd = open(VIR_IOMMU_DEV_PATH, O_RDWR | O_CLOEXEC)) < 0) {
-        virReportSystemError(errno, "%s", _("cannot open /dev/iommu"));
+    if ((fd = virIOMMUFDOpenDevice()) < 0)
         return -1;
-    }
-
-    if (virIOMMUFDSetRLimitMode(fd, true) < 0) {
-        VIR_FORCE_CLOSE(fd);
-        return -1;
-    }
 
     VIR_DEBUG("Opened IOMMU FD %d for domain %s", fd, vm->def->name);
     return fd;
index 44b30029a593da1593cd454e8deda27145fe7532..1f3353eab4cdd868bc7c3393dd4231db7608c7eb 100644 (file)
@@ -1,5 +1,7 @@
 #include <config.h>
 
+#include <fcntl.h>
+
 #include "viriommufd.h"
 #include "virlog.h"
 #include "virerror.h"
@@ -54,7 +56,7 @@ struct iommu_option {
  *
  * Returns: 0 on success, -1 on error
  */
-int
+static int
 virIOMMUFDSetRLimitMode(int fd, bool processAccounting)
 {
     struct iommu_option option = {
@@ -77,10 +79,24 @@ virIOMMUFDSetRLimitMode(int fd, bool processAccounting)
     return 0;
 }
 
+int
+virIOMMUFDOpenDevice(void)
+{
+    int fd = -1;
+
+    if ((fd = open(VIR_IOMMU_DEV_PATH, O_RDWR | O_CLOEXEC)) < 0)
+        virReportSystemError(errno, "%s", _("cannot open IOMMUFD device"));
+
+    if (virIOMMUFDSetRLimitMode(fd, true) < 0)
+        return -1;
+
+    return fd;
+}
+
 #else
 
-int virIOMMUFDSetRLimitMode(int fd G_GNUC_UNUSED,
-                            bool processAccounting G_GNUC_UNUSED)
+int
+virIOMMUFDOpenDevice(void)
 {
     virReportError(VIR_ERR_NO_SUPPORT, "%s",
                    _("IOMMUFD is not supported on this platform"));
index ec6be9fa6615073cd4c7b74bbb9ade514e3f4e85..223f44eb5c32df4a0c22d869d704c583f726b779 100644 (file)
@@ -22,6 +22,6 @@
 
 #define VIR_IOMMU_DEV_PATH "/dev/iommu"
 
-int virIOMMUFDSetRLimitMode(int fd, bool processAccounting);
+int virIOMMUFDOpenDevice(void);
 
 bool virIOMMUFDSupported(void);