[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