[LTP] [PATCH] lib: Add checking of setup params in kernel command line

Zhao Gongyi zhaogongyi@huawei.com
Thu Sep 15 06:10:35 CEST 2022


There are some test cases that need to check the configuration
of setup params, so we add tst_kernel_cmdline_check() to check it
in do_setup().

Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
---
 include/tst_kernel.h |  9 +++++++++
 include/tst_test.h   |  3 +++
 lib/tst_kernel.c     | 21 +++++++++++++++++++++
 lib/tst_test.c       |  9 +++++++++
 4 files changed, 42 insertions(+)

diff --git a/include/tst_kernel.h b/include/tst_kernel.h
index 9e17bb71e..874ec3bf4 100644
--- a/include/tst_kernel.h
+++ b/include/tst_kernel.h
@@ -20,4 +20,13 @@ int tst_kernel_bits(void);
  */
 int tst_check_driver(const char *driver);

+/*
+ * Checks if there is a configuration in the kernel command line.
+ *
+ * @param cmd The setup param that need to be checked in command line.
+ * @return Returns 0 if the kernel configured the setup param in command line.
+ * -1 when the setup param is not configured.
+ */
+int tst_kernel_cmdline_check(const char *cmd);
+
 #endif	/* TST_KERNEL_H__ */
diff --git a/include/tst_test.h b/include/tst_test.h
index ac52f268c..ba7d538b7 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -312,6 +312,9 @@ struct tst_test {

 	/* {} terminated array of required CGroup controllers */
 	const char *const *needs_cgroup_ctrls;
+
+	/* NULL terminated array of required kernel cmdlines. */
+	const char *const *needs_kernel_cmdlines;
 };

 /*
diff --git a/lib/tst_kernel.c b/lib/tst_kernel.c
index ecf4b917e..1e6d18e55 100644
--- a/lib/tst_kernel.c
+++ b/lib/tst_kernel.c
@@ -24,6 +24,8 @@
 #include "tst_kernel.h"
 #include "old_safe_stdio.h"

+#define COMMAND_LINE_SIZE 4096
+
 static int get_kernel_bits_from_uname(struct utsname *buf)
 {
 	if (uname(buf)) {
@@ -189,3 +191,22 @@ int tst_check_driver(const char *driver)

 	return ret;
 }
+
+int tst_kernel_cmdline_check(const char *cmd)
+{
+	char cmdline[COMMAND_LINE_SIZE];
+
+	FILE *f = fopen("/proc/cmdline", "r");
+	if (f == NULL) {
+		tst_brkm(TBROK | TERRNO, NULL, "Open /proc/cmdline failed");
+		return -1;
+	}
+
+	while (fscanf(f, "%s", cmdline) > 0) {
+		if (!strcmp(cmdline, cmd))
+			return 0;
+	}
+
+	tst_brkm(TCONF, NULL, "Setup param '%s' is not configured", cmd);
+	return -1;
+}
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 8ccde1629..7a842c5ae 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1125,6 +1125,15 @@ static void do_setup(int argc, char *argv[])
 	if (tst_test->min_kver)
 		check_kver();

+	if (tst_test->needs_kernel_cmdlines)
+	{
+		const char *cmd;
+		int i;
+
+		for (i = 0; (cmd = tst_test->needs_kernel_cmdlines[i]); ++i)
+			tst_kernel_cmdline_check(cmd);
+	}
+
 	if (tst_test->supported_archs && !tst_is_on_arch(tst_test->supported_archs))
 		tst_brk(TCONF, "This arch '%s' is not supported for test!", tst_arch.name);

--
2.17.1



More information about the ltp mailing list