[PATCH v2 29/31] testcases: sysfs: Add sys_ksm01

Cyril Hrubis <[email protected]>
Newsgroups gmane.linux.ltp
Message-ID <[email protected]>
A test for /sys/kernel/mm/ksm/* files.

Signed-off-by: Cyril Hrubis <[email protected]>
---
 runtest/sysfs                                 |  1 +
 .../kernel/sysfs/kernel/mm/ksm/.gitignore     |  1 +
 testcases/kernel/sysfs/kernel/mm/ksm/Makefile |  7 ++
 .../kernel/sysfs/kernel/mm/ksm/sys_ksm01.c    | 64 +++++++++++++++++++
 4 files changed, 73 insertions(+)
 create mode 100644 testcases/kernel/sysfs/kernel/mm/ksm/.gitignore
 create mode 100644 testcases/kernel/sysfs/kernel/mm/ksm/Makefile
 create mode 100644 testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c

diff --git a/runtest/sysfs b/runtest/sysfs
index ec38d8b44..08358ebc6 100644
--- a/runtest/sysfs
+++ b/runtest/sysfs
@@ -24,3 +24,4 @@ sys_block_queue01 sys_block_queue01
 sys_block_size01 sys_block_size01
 sys_hugepages01 sys_hugepages01
 sys_hugepages02 sys_hugepages02
+sys_ksm01 sys_ksm01
diff --git a/testcases/kernel/sysfs/kernel/mm/ksm/.gitignore b/testcases/kernel/sysfs/kernel/mm/ksm/.gitignore
new file mode 100644
index 000000000..92fa7e2c1
--- /dev/null
+++ b/testcases/kernel/sysfs/kernel/mm/ksm/.gitignore
@@ -0,0 +1 @@
+/sys_ksm01
diff --git a/testcases/kernel/sysfs/kernel/mm/ksm/Makefile b/testcases/kernel/sysfs/kernel/mm/ksm/Makefile
new file mode 100644
index 000000000..781865569
--- /dev/null
+++ b/testcases/kernel/sysfs/kernel/mm/ksm/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2026 Cyril Hrubis <[email protected]>
+
+top_srcdir		?= ../../../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c b/testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c
new file mode 100644
index 000000000..b089e2bae
--- /dev/null
+++ b/testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2026 Cyril Hrubis <[email protected]>
+ */
+
+/*\
+ * Sanity checks for the Kernel Samepage Merging (KSM) attributes exported
+ * under /sys/kernel/mm/ksm/.
+ *
+ * The test verifies that:
+ *
+ * - run is one of 0 (stop), 1 (run) or 2 (unmerge)
+ * - merge_across_nodes and use_zero_pages are booleans
+ * - max_page_sharing is greater than 2 and less than INT_MAX
+ * - pages_to_scan and sleep_millisecs are non-negative
+ * - the page accounting counters (pages_shared, pages_sharing, pages_unshared,
+ *   pages_volatile, stable_node_chains, stable_node_dups) are non-negative
+ *
+ * All checks skip gracefully with TCONF when a particular attribute is not
+ * present, since the set of KSM tunables differs between kernel versions.
+ */
+
+#include <limits.h>
+#include "tst_test.h"
+#include "tst_sysfs_assert.h"
+
+#define KSM "/sys/kernel/mm/ksm"
+
+static const char *const nonneg_counters[] = {
+	"pages_shared",
+	"pages_sharing",
+	"pages_unshared",
+	"pages_volatile",
+	"stable_node_chains",
+	"stable_node_dups",
+	"pages_to_scan",
+	"sleep_millisecs",
+};
+
+static void do_test(void)
+{
+	unsigned int i;
+
+	/* 0 = stop, 1 = merge, 2 = unmerge */
+	TST_SYSFS_ASSERT_RANGELL(0, 2, KSM "/run");
+
+	TST_SYSFS_ASSERT_BOOL(KSM "/merge_across_nodes");
+	TST_SYSFS_ASSERT_BOOL(KSM "/use_zero_pages");
+
+	TST_SYSFS_ASSERT_RANGELL(2, INT_MAX, KSM "/max_page_sharing");
+
+	for (i = 0; i < ARRAY_SIZE(nonneg_counters); i++) {
+		TST_SYSFS_ASSERT_RANGEUU(0, ULONG_MAX, KSM "/%s",
+					 nonneg_counters[i]);
+	}
+}
+
+static struct tst_test test = {
+	.test_all = do_test,
+	.needs_kconfigs = (const char *const[]){
+		"CONFIG_KSM=y",
+		NULL
+	},
+};
-- 
2.54.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.