[PATCH v18 07/29] eal: move kernel module check function into VFIO

Anatoly Burakov anatoly.burakov at intel.com
Thu Sep 24 18:13:14 CEST 2026


EAL provides a "check if a kernel module is loaded" function, but the only
consumer of that function is VFIO. Move it and make it internal to VFIO.

Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
 lib/eal/common/eal_private.h | 14 ------------
 lib/eal/linux/eal.c          | 35 ------------------------------
 lib/eal/linux/eal_vfio.c     | 41 ++++++++++++++++++++++++++++++++++--
 3 files changed, 39 insertions(+), 51 deletions(-)

diff --git a/lib/eal/common/eal_private.h b/lib/eal/common/eal_private.h
index 6340bab8be0..8507791ec26 100644
--- a/lib/eal/common/eal_private.h
+++ b/lib/eal/common/eal_private.h
@@ -206,20 +206,6 @@ int rte_eal_alarm_init(void);
  */
 void rte_eal_alarm_cleanup(void);
 
-/**
- * Function is to check if the kernel module(like, vfio, vfio_iommu_type1,
- * etc.) loaded.
- *
- * @param module_name
- *	The module's name which need to be checked
- *
- * @return
- *	-1 means some error happens(NULL pointer or open failure)
- *	0  means the module not loaded
- *	1  means the module loaded
- */
-int rte_eal_check_module(const char *module_name);
-
 /**
  * Memory reservation flags.
  */
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 5577bab24a2..1d0894e7eab 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -17,9 +17,7 @@
 #include <fnmatch.h>
 #include <stddef.h>
 #include <errno.h>
-#include <limits.h>
 #include <sys/mman.h>
-#include <sys/stat.h>
 #if defined(RTE_ARCH_X86)
 #include <sys/io.h>
 #endif
@@ -1028,36 +1026,3 @@ rte_eal_vfio_get_vf_token(rte_uuid_t vf_token)
 	rte_uuid_copy(vf_token, cfg->vfio_vf_token);
 }
 
-int
-rte_eal_check_module(const char *module_name)
-{
-	char sysfs_mod_name[PATH_MAX];
-	struct stat st;
-	int n;
-
-	if (NULL == module_name)
-		return -1;
-
-	/* Check if there is sysfs mounted */
-	if (stat("/sys/module", &st) != 0) {
-		EAL_LOG(DEBUG, "sysfs is not mounted! error %i (%s)",
-			errno, strerror(errno));
-		return -1;
-	}
-
-	/* A module might be built-in, therefore try sysfs */
-	n = snprintf(sysfs_mod_name, PATH_MAX, "/sys/module/%s", module_name);
-	if (n < 0 || n > PATH_MAX) {
-		EAL_LOG(DEBUG, "Could not format module path");
-		return -1;
-	}
-
-	if (stat(sysfs_mod_name, &st) != 0) {
-		EAL_LOG(DEBUG, "Module %s not found! error %i (%s)",
-		        sysfs_mod_name, errno, strerror(errno));
-		return 0;
-	}
-
-	/* Module has been found */
-	return 1;
-}
diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c
index 8959a161530..ce247362662 100644
--- a/lib/eal/linux/eal_vfio.c
+++ b/lib/eal/linux/eal_vfio.c
@@ -4,9 +4,12 @@
 
 #include <uapi/linux/vfio.h>
 
+#include <errno.h>
 #include <inttypes.h>
+#include <limits.h>
 #include <string.h>
 #include <fcntl.h>
+#include <sys/stat.h>
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <dirent.h>
@@ -60,6 +63,40 @@ static struct vfio_config *default_vfio_cfg = &vfio_cfgs[0];
 /* whether VFIO is enabled (usable) in this process */
 static bool vfio_enabled;
 
+static int
+vfio_check_module(const char *module_name)
+{
+	char sysfs_mod_name[PATH_MAX];
+	struct stat st;
+	int n;
+
+	if (NULL == module_name)
+		return -1;
+
+	/* Check if there is sysfs mounted */
+	if (stat("/sys/module", &st) != 0) {
+		EAL_LOG(DEBUG, "sysfs is not mounted! error %i (%s)",
+			errno, strerror(errno));
+		return -1;
+	}
+
+	/* A module might be built-in, therefore try sysfs */
+	n = snprintf(sysfs_mod_name, PATH_MAX, "/sys/module/%s", module_name);
+	if (n < 0 || n > PATH_MAX) {
+		EAL_LOG(DEBUG, "Could not format module path");
+		return -1;
+	}
+
+	if (stat(sysfs_mod_name, &st) != 0) {
+		EAL_LOG(DEBUG, "Module %s not found! error %i (%s)",
+		        sysfs_mod_name, errno, strerror(errno));
+		return 0;
+	}
+
+	/* Module has been found */
+	return 1;
+}
+
 static int vfio_type1_dma_map(int);
 static int vfio_type1_dma_mem_map(int, uint64_t, uint64_t, uint64_t, int);
 static int vfio_spapr_dma_map(int);
@@ -1152,7 +1189,7 @@ rte_vfio_enable(const char *modname)
 	EAL_LOG(DEBUG, "Probing VFIO support...");
 
 	/* check if vfio module is loaded */
-	vfio_available = rte_eal_check_module(modname);
+	vfio_available = vfio_check_module(modname);
 
 	/* return error directly */
 	if (vfio_available == -1) {
@@ -1204,7 +1241,7 @@ RTE_EXPORT_INTERNAL_SYMBOL(rte_vfio_is_enabled)
 int
 rte_vfio_is_enabled(const char *modname)
 {
-	const int mod_available = rte_eal_check_module(modname) > 0;
+	const int mod_available = vfio_check_module(modname) > 0;
 	return vfio_enabled && mod_available;
 }
 
-- 
2.52.0



More information about the dev mailing list