[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