[Accel-config] [PATCH 1/5] accel-config: Remove use of libkmod

Ramesh Thomas <ramesh.thomas at intel.com> Wed, 01 Dec 2021 18:59:05 -0500
Newsgroups dev.linux.lists.accel-config
Message-ID <[email protected]>
From: Ramesh Thomas <ramesh.thomas(a)linux.intel.com>

Systems running accel-config is expected to have idxd kernel module
already installed. Accel-config would fail if it is not loaded and would
not try to load it. This removes the dependency on installion of kmod
development package.

Signed-off-by: Ramesh Thomas <ramesh.thomas(a)linux.intel.com>
---
 accfg/accel-config.c | 40 +++--------------------------
 accfg/lib/private.h  |  6 +----
 test/core.c          |  1 -
 test/libaccfg.c      | 61 +++++++-------------------------------------
 4 files changed, 14 insertions(+), 94 deletions(-)

diff --git a/accfg/accel-config.c b/accfg/accel-config.c
index 0840e0b..225ce02 100644
--- a/accfg/accel-config.c
+++ b/accfg/accel-config.c
@@ -7,7 +7,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/types.h>
-#include <libkmod.h>
 #include <builtin.h>
 #include <accfg/libaccel_config.h>
 #include <ccan/array_size/array_size.h>
@@ -75,34 +74,9 @@ static struct cmd_struct commands[] = {
 #endif
 };
 
-static int idxd_kmod_init(struct kmod_ctx **ctx, struct kmod_module **mod)
-{
-	int rc;
-
-	*ctx = kmod_new(NULL, NULL);
-	if (!*ctx)
-		return -ENXIO;
-
-	rc = kmod_module_new_from_name(*ctx, "idxd", mod);
-	if (rc < 0) {
-		kmod_unref(*ctx);
-		return rc;
-	}
-
-	rc = kmod_module_get_initstate(*mod);
-	if (rc < 0) {
-		kmod_module_unref(*mod);
-		kmod_unref(*ctx);
-	}
-
-	return rc;
-}
-
 int main(int argc, const char **argv)
 {
 	struct accfg_ctx *ctx;
-	struct kmod_ctx *kmod_ctx;
-	struct kmod_module *mod;
 	unsigned int last_error;
 	int rc;
 
@@ -122,18 +96,14 @@ int main(int argc, const char **argv)
 		return -EINVAL;
 	}
 
-	rc = idxd_kmod_init(&kmod_ctx, &mod);
-	if (rc < 0) {
-		fprintf(stderr, "Failed initializing kernel module\n");
-		goto error_exit;
+	if (access("/sys/module/idxd", F_OK)) {
+		fprintf(stderr, "idxd kernel module not loaded\n");
+		return EXIT_FAILURE;
 	}
 
 	rc = accfg_new(&ctx);
-	if (rc) {
-		kmod_module_unref(mod);
-		kmod_unref(kmod_ctx);
+	if (rc)
 		goto error_exit;
-	}
 
 	rc = main_handle_internal_command(argc, argv, ctx, commands,
 				     ARRAY_SIZE(commands));
@@ -161,8 +131,6 @@ int main(int argc, const char **argv)
 		printf(": %s\n", accfg_ctx_get_last_error_str(ctx));
 	}
 	accfg_unref(ctx);
-	kmod_module_unref(mod);
-	kmod_unref(kmod_ctx);
 
 	if (!rc)
 		return EXIT_SUCCESS;
diff --git a/accfg/lib/private.h b/accfg/lib/private.h
index 57aa1ed..cc7bb7e 100644
--- a/accfg/lib/private.h
+++ b/accfg/lib/private.h
@@ -8,8 +8,8 @@
 #include <stdbool.h>
 #include <syslog.h>
 #include <string.h>
+#include <inttypes.h>
 #include <libudev.h>
-#include <libkmod.h>
 #include <util/log.h>
 #include <uuid/uuid.h>
 #include <ccan/list/list.h>
@@ -165,8 +165,4 @@ static inline int check_udev(struct udev *udev)
 	return udev ? 0 : -ENXIO;
 }
 
-static inline int check_kmod(struct kmod_ctx *kmod_ctx)
-{
-	return kmod_ctx ? 0 : -ENXIO;
-}
 #endif /* _LIBACCFG_PRIVATE_H_ */
diff --git a/test/core.c b/test/core.c
index 9346472..4fc99d9 100644
--- a/test/core.c
+++ b/test/core.c
@@ -3,7 +3,6 @@
 
 #include <linux/version.h>
 #include <sys/utsname.h>
-#include <libkmod.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <stdio.h>
diff --git a/test/libaccfg.c b/test/libaccfg.c
index 5a17650..9b65dc0 100644
--- a/test/libaccfg.c
+++ b/test/libaccfg.c
@@ -15,7 +15,6 @@
 #include <util/json.h>
 #include <util/filter.h>
 #include <syslog.h>
-#include <libkmod.h>
 #include <sys/wait.h>
 #include <uuid/uuid.h>
 #include <sys/types.h>
@@ -954,66 +953,30 @@ static struct _test_case test_cases[] = {
 	},
 };
 
-static int idxd_kmod_init(struct kmod_ctx **ctx, struct kmod_module **mod,
-		struct kmod_module **mdev_mod, int log_level)
-{
-	struct log_ctx log_ctx;
-	int rc;
-
-	log_init(&log_ctx, "test/init", "LIB-ACCELCONFIG_TEST");
-	log_ctx.log_priority = log_level;
-
-	*ctx = kmod_new(NULL, NULL);
-	if (!*ctx)
-		return -ENXIO;
-	kmod_set_log_priority(*ctx, log_level);
-
-	rc = kmod_module_new_from_name(*ctx, "idxd", mod);
-	if (rc < 0) {
-		kmod_unref(*ctx);
-		return rc;
-	}
-	rc = kmod_module_new_from_name(*ctx, "idxd_mdev", mdev_mod);
-	if (rc < 0) {
-		kmod_module_unref(*mod);
-		kmod_unref(*ctx);
-		return rc;
-	}
-	rc = kmod_module_get_initstate(*mdev_mod);
-	if (rc < 0) {
-		kmod_module_unref(*mdev_mod);
-		*mdev_mod = NULL;
-		mdev_disabled = true;
-	}
-	rc = kmod_module_get_initstate(*mod);
-	if (rc < 0) {
-		kmod_module_unref(*mod);
-		kmod_unref(*ctx);
-	}
-
-	return rc;
-}
-
 int test_libaccfg(int loglevel, struct accfg_test *test,
 		struct accfg_ctx *ctx)
 {
 	unsigned int i;
 	int err, result = EXIT_FAILURE;
-	struct kmod_ctx *kmod_ctx;
-	struct kmod_module *mod, *mdev_mod;
 	struct accfg_device *device;
+	struct log_ctx log_ctx;
 
 	if (!accfg_test_attempt(test, KERNEL_VERSION(5, 6, 0)))
 		return EXIT_SKIP;
 
 	accfg_set_log_priority(ctx, loglevel);
-	err = idxd_kmod_init(&kmod_ctx, &mod, &mdev_mod, loglevel);
-	if (err < 0) {
+	log_init(&log_ctx, "test/init", "LIB-ACCELCONFIG_TEST");
+	log_ctx.log_priority = loglevel;
+
+	if (access("/sys/module/idxd", F_OK)) {
 		accfg_test_skip(test);
-		fprintf(stderr, "idxd kmod unavailable skipping tests\n");
+		fprintf(stderr, "idxd kernel module not loaded\n");
 		return EXIT_SKIP;
 	}
 
+	if (access("/sys/module/idxd_mdev", F_OK))
+		mdev_disabled = true;
+
 	/*
 	 * iterate to check the state of each device, skip entire test if any of
 	 * them is active or not configurable
@@ -1074,12 +1037,6 @@ int test_libaccfg(int loglevel, struct accfg_test *test,
 
 	test_cleanup(ctx);
 
-	if (mdev_mod)
-		kmod_module_unref(mdev_mod);
-
-	kmod_module_unref(mod);
-	kmod_unref(kmod_ctx);
-
 	return result;
 }
 
-- 
2.26.3