[LTP] [PATCH v2] tst_cgroup.c: Skip cases which testing cgroup v2 with CONFIG_RT_GROUP_SCHED=y

Wei Gao wegao@suse.com
Wed Jun 11 00:14:16 CEST 2025


RT_GROUP scheduling is cgroup v1 feature as of now. So we need skip test cases
for cgroup v2 with CONFIG_RT_GROUP_SCHED=y.

Skip cases list:
sched_rr_get_interval01
sched_rr_get_interval02
sched_rr_get_interval03
sched_setparam02
sched_getscheduler01

Fixes: https://github.com/linux-test-project/ltp/issues/1245
Signed-off-by: Wei Gao <wegao@suse.com>
---
 include/tst_cgroup.h                                  |  2 ++
 lib/tst_cgroup.c                                      | 11 +++++++++++
 .../sched_getscheduler/sched_getscheduler01.c         |  2 ++
 .../sched_rr_get_interval/sched_rr_get_interval01.c   |  2 ++
 .../sched_rr_get_interval/sched_rr_get_interval02.c   |  2 ++
 .../sched_rr_get_interval/sched_rr_get_interval03.c   |  2 ++
 .../kernel/syscalls/sched_setparam/sched_setparam02.c |  2 ++
 7 files changed, 23 insertions(+)

diff --git a/include/tst_cgroup.h b/include/tst_cgroup.h
index d2b5224a0..0f0f44ec3 100644
--- a/include/tst_cgroup.h
+++ b/include/tst_cgroup.h
@@ -256,4 +256,6 @@ int safe_cg_occursin(const char *file, const int lineno,
 
 int tst_cg_memory_recursiveprot(struct tst_cg_group *cg);
 
+void tst_check_rt_group_sched_support(void);
+
 #endif /* TST_CGROUP_H */
diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
index 36602402d..4ebdf701f 100644
--- a/lib/tst_cgroup.c
+++ b/lib/tst_cgroup.c
@@ -16,6 +16,7 @@
 #include "lapi/fcntl.h"
 #include "lapi/mount.h"
 #include "tst_safe_file_at.h"
+#include "tst_kconfig.h"
 
 struct cgroup_root;
 
@@ -1531,3 +1532,13 @@ int tst_cg_memory_recursiveprot(struct tst_cg_group *cg)
 		return cg->dirs_by_ctrl[0]->dir_root->memory_recursiveprot;
 	return 0;
 }
+
+void tst_check_rt_group_sched_support(void)
+{
+	static const char * const kconf[] = {"CONFIG_RT_GROUP_SCHED=y", NULL};
+
+	if ((access("/sys/fs/cgroup/cgroup.controllers", F_OK) == 0) && !tst_kconfig_check(kconf)) {
+		tst_brk(TCONF, "CONFIG_RT_GROUP_SCHED not support on cgroupv2");
+	}
+
+}
diff --git a/testcases/kernel/syscalls/sched_getscheduler/sched_getscheduler01.c b/testcases/kernel/syscalls/sched_getscheduler/sched_getscheduler01.c
index 7edb59481..58bbede9a 100644
--- a/testcases/kernel/syscalls/sched_getscheduler/sched_getscheduler01.c
+++ b/testcases/kernel/syscalls/sched_getscheduler/sched_getscheduler01.c
@@ -39,6 +39,8 @@ static void run(unsigned int n)
 	struct test_cases_t *tc = &tcases[n];
 	struct sched_param p = { .sched_priority = tc->priority };
 
+	tst_check_rt_group_sched_support();
+
 	TST_EXP_PASS_SILENT(tv->sched_setscheduler(0, tc->policy, &p));
 
 	if (!TST_PASS)
diff --git a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c
index b4d75bdcc..6dbf5af89 100644
--- a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c
+++ b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval01.c
@@ -43,6 +43,8 @@ static void setup(void)
 
 	tp.type = tv->ts_type;
 
+	tst_check_rt_group_sched_support();
+
 	if ((sys_sched_setscheduler(0, SCHED_RR, &p)) == -1)
 		tst_res(TFAIL | TERRNO, "sched_setscheduler() failed");
 
diff --git a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c
index 789e5ff10..3f6f34bbc 100644
--- a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c
+++ b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval02.c
@@ -36,6 +36,8 @@ static void setup(void)
 
 	tp.type = tv->ts_type;
 
+	tst_check_rt_group_sched_support();
+
 	if ((sys_sched_setscheduler(0, SCHED_FIFO, &p)) == -1)
 		tst_res(TFAIL | TERRNO, "sched_setscheduler() failed");
 }
diff --git a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c
index 5e2f4ed7e..d4b7a6f22 100644
--- a/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c
+++ b/testcases/kernel/syscalls/sched_rr_get_interval/sched_rr_get_interval03.c
@@ -59,6 +59,8 @@ static void setup(void)
 	bad_addr = tst_get_bad_addr(NULL);
 	tp.type = tv->ts_type;
 
+	tst_check_rt_group_sched_support();
+
 	if ((sys_sched_setscheduler(0, SCHED_RR, &p)) == -1)
 		tst_res(TFAIL | TERRNO, "sched_setscheduler() failed");
 
diff --git a/testcases/kernel/syscalls/sched_setparam/sched_setparam02.c b/testcases/kernel/syscalls/sched_setparam/sched_setparam02.c
index d71e2c6d6..99277baf6 100644
--- a/testcases/kernel/syscalls/sched_setparam/sched_setparam02.c
+++ b/testcases/kernel/syscalls/sched_setparam/sched_setparam02.c
@@ -36,6 +36,8 @@ static void run(unsigned int n)
 	struct sched_variant *tv = &sched_variants[tst_variant];
 	struct sched_param p = { .sched_priority = tc->param };
 
+	tst_check_rt_group_sched_support();
+
 	TST_EXP_PASS_SILENT(tv->sched_setscheduler(0, tc->policy, &p));
 
 	p.sched_priority = tc->priority;
-- 
2.49.0



More information about the ltp mailing list