* [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting
@ 2026-03-03 5:53 Hui Zhu
2026-03-03 5:53 ` [PATCH bpf-next v5 1/2] selftests/bpf: Remove kmem subtest from cgroup_iter_memcg Hui Zhu
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Hui Zhu @ 2026-03-03 5:53 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Shuah Khan, JP Kobryn, Roman Gushchin, Emil Tsalapatis, bpf,
linux-kselftest, linux-kernel
Cc: Hui Zhu
From: Hui Zhu <zhuhui@kylinos.cn>
While back-porting "mm: bpf kfuncs to access memcg data", I
encountered issues with test_cgroup_iter_memcg, specifically
in test_kmem.
The test_cgroup_iter_memcg test would falsely pass when
bpf_mem_cgroup_page_state() failed due to incompatible enum
values across kernel versions. Additionally, test_kmem would
fail on systems with cgroup.memory=nokmem enabled.
These patches are my fixes for the problems I encountered.
Changelog:
v5:
According to the comments of Emil Tsalapatis and JP Kobryn, dropped
"selftests/bpf: Check bpf_mem_cgroup_page_state return value".
v4:
Fixed wrong git commit log in "bpf: Use bpf_core_enum_value for stats in
cgroup_iter_memcg".
v3:
According to the comments of JP Kobryn, remove kmem subtest from
cgroup_iter_memcg and fix assertion string in test_pgfault.
v2:
According to the comments of JP Kobryn, added bpf_core_enum_value()
usage in the BPF program to handle cross-kernel enum value differences
at load-time instead of compile-time.
Dropped the mm/memcontrol.c patch.
Modified test_kmem handling: instead of skipping when nokmem is set,
verify that kmem value is zero as expected.
According to the comments of bot, fixed assertion message: changed
"bpf_mem_cgroup_page_state" to "bpf_mem_cgroup_vm_events" for PGFAULT
check.
Hui Zhu (2):
selftests/bpf: Remove kmem subtest from cgroup_iter_memcg
bpf: Use bpf_core_enum_value for stats in cgroup_iter_memcg
.../testing/selftests/bpf/cgroup_iter_memcg.h | 2 --
.../bpf/prog_tests/cgroup_iter_memcg.c | 28 -------------------
.../selftests/bpf/progs/cgroup_iter_memcg.c | 18 ++++++++----
3 files changed, 12 insertions(+), 36 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH bpf-next v5 1/2] selftests/bpf: Remove kmem subtest from cgroup_iter_memcg
2026-03-03 5:53 [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting Hui Zhu
@ 2026-03-03 5:53 ` Hui Zhu
2026-03-03 5:53 ` [PATCH bpf-next v5 2/2] bpf: Use bpf_core_enum_value for stats in cgroup_iter_memcg Hui Zhu
2026-03-10 19:00 ` [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Hui Zhu @ 2026-03-03 5:53 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Shuah Khan, JP Kobryn, Roman Gushchin, Emil Tsalapatis, bpf,
linux-kselftest, linux-kernel
Cc: Hui Zhu, JP Kobryn
From: Hui Zhu <zhuhui@kylinos.cn>
When cgroup.memory=nokmem is set in the kernel command line, kmem
accounting is disabled. This causes the test_kmem subtest in
cgroup_iter_memcg to fail because it expects non-zero kmem values.
Remove the kmem subtest altogether since the remaining subtests
(shmem, file, pgfault) already provide sufficient coverage for
the cgroup iter memcg functionality.
Reviewed-by: JP Kobryn <jp.kobryn@linux.dev>
Signed-off-by: Hui Zhu <zhuhui@kylinos.cn>
---
.../testing/selftests/bpf/cgroup_iter_memcg.h | 2 --
.../bpf/prog_tests/cgroup_iter_memcg.c | 28 -------------------
.../selftests/bpf/progs/cgroup_iter_memcg.c | 1 -
3 files changed, 31 deletions(-)
diff --git a/tools/testing/selftests/bpf/cgroup_iter_memcg.h b/tools/testing/selftests/bpf/cgroup_iter_memcg.h
index 3f59b127943b..ff20ec537164 100644
--- a/tools/testing/selftests/bpf/cgroup_iter_memcg.h
+++ b/tools/testing/selftests/bpf/cgroup_iter_memcg.h
@@ -9,8 +9,6 @@ struct memcg_query {
unsigned long nr_shmem;
unsigned long nr_file_pages;
unsigned long nr_file_mapped;
- /* some memcg_stat_item */
- unsigned long memcg_kmem;
/* some vm_event_item */
unsigned long pgfault;
};
diff --git a/tools/testing/selftests/bpf/prog_tests/cgroup_iter_memcg.c b/tools/testing/selftests/bpf/prog_tests/cgroup_iter_memcg.c
index a5afd16705f0..88fc3e83d2b7 100644
--- a/tools/testing/selftests/bpf/prog_tests/cgroup_iter_memcg.c
+++ b/tools/testing/selftests/bpf/prog_tests/cgroup_iter_memcg.c
@@ -126,32 +126,6 @@ static void test_shmem(struct bpf_link *link, struct memcg_query *memcg_query)
shm_unlink("/tmp_shmem");
}
-#define NR_PIPES 64
-static void test_kmem(struct bpf_link *link, struct memcg_query *memcg_query)
-{
- int fds[NR_PIPES][2], i;
-
- /*
- * Increase kmem value by creating pipes which will allocate some
- * kernel buffers.
- */
- for (i = 0; i < NR_PIPES; i++) {
- if (!ASSERT_OK(pipe(fds[i]), "pipe"))
- goto cleanup;
- }
-
- if (!ASSERT_OK(read_stats(link), "read stats"))
- goto cleanup;
-
- ASSERT_GT(memcg_query->memcg_kmem, 0, "kmem value");
-
-cleanup:
- for (i = i - 1; i >= 0; i--) {
- close(fds[i][0]);
- close(fds[i][1]);
- }
-}
-
static void test_pgfault(struct bpf_link *link, struct memcg_query *memcg_query)
{
void *map;
@@ -209,8 +183,6 @@ void test_cgroup_iter_memcg(void)
test_shmem(link, &skel->data_query->memcg_query);
if (test__start_subtest("cgroup_iter_memcg__file"))
test_file(link, &skel->data_query->memcg_query);
- if (test__start_subtest("cgroup_iter_memcg__kmem"))
- test_kmem(link, &skel->data_query->memcg_query);
if (test__start_subtest("cgroup_iter_memcg__pgfault"))
test_pgfault(link, &skel->data_query->memcg_query);
diff --git a/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c b/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c
index 59fb70a3cc50..12f79a44133e 100644
--- a/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c
+++ b/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c
@@ -30,7 +30,6 @@ int cgroup_memcg_query(struct bpf_iter__cgroup *ctx)
memcg_query.nr_shmem = bpf_mem_cgroup_page_state(memcg, NR_SHMEM);
memcg_query.nr_file_pages = bpf_mem_cgroup_page_state(memcg, NR_FILE_PAGES);
memcg_query.nr_file_mapped = bpf_mem_cgroup_page_state(memcg, NR_FILE_MAPPED);
- memcg_query.memcg_kmem = bpf_mem_cgroup_page_state(memcg, MEMCG_KMEM);
memcg_query.pgfault = bpf_mem_cgroup_vm_events(memcg, PGFAULT);
bpf_put_mem_cgroup(memcg);
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH bpf-next v5 2/2] bpf: Use bpf_core_enum_value for stats in cgroup_iter_memcg
2026-03-03 5:53 [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting Hui Zhu
2026-03-03 5:53 ` [PATCH bpf-next v5 1/2] selftests/bpf: Remove kmem subtest from cgroup_iter_memcg Hui Zhu
@ 2026-03-03 5:53 ` Hui Zhu
2026-03-10 19:00 ` [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Hui Zhu @ 2026-03-03 5:53 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Shuah Khan, JP Kobryn, Roman Gushchin, Emil Tsalapatis, bpf,
linux-kselftest, linux-kernel
Cc: Hui Zhu, JP Kobryn
From: Hui Zhu <zhuhui@kylinos.cn>
Replace hardcoded enum values with bpf_core_enum_value() calls in
cgroup_iter_memcg test to improve portability across different
kernel versions.
The change adds runtime enum value resolution for:
- node_stat_item: NR_ANON_MAPPED, NR_SHMEM, NR_FILE_PAGES,
NR_FILE_MAPPED
- vm_event_item: PGFAULT
This ensures the BPF program can adapt to enum value changes
between kernel versions.
Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com>
Reviewed-by: JP Kobryn <jp.kobryn@linux.dev>
Signed-off-by: Hui Zhu <zhuhui@kylinos.cn>
---
.../selftests/bpf/progs/cgroup_iter_memcg.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c b/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c
index 12f79a44133e..06a385c9d85b 100644
--- a/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c
+++ b/tools/testing/selftests/bpf/progs/cgroup_iter_memcg.c
@@ -26,11 +26,18 @@ int cgroup_memcg_query(struct bpf_iter__cgroup *ctx)
bpf_mem_cgroup_flush_stats(memcg);
- memcg_query.nr_anon_mapped = bpf_mem_cgroup_page_state(memcg, NR_ANON_MAPPED);
- memcg_query.nr_shmem = bpf_mem_cgroup_page_state(memcg, NR_SHMEM);
- memcg_query.nr_file_pages = bpf_mem_cgroup_page_state(memcg, NR_FILE_PAGES);
- memcg_query.nr_file_mapped = bpf_mem_cgroup_page_state(memcg, NR_FILE_MAPPED);
- memcg_query.pgfault = bpf_mem_cgroup_vm_events(memcg, PGFAULT);
+ memcg_query.nr_anon_mapped = bpf_mem_cgroup_page_state(
+ memcg,
+ bpf_core_enum_value(enum node_stat_item, NR_ANON_MAPPED));
+ memcg_query.nr_shmem = bpf_mem_cgroup_page_state(
+ memcg, bpf_core_enum_value(enum node_stat_item, NR_SHMEM));
+ memcg_query.nr_file_pages = bpf_mem_cgroup_page_state(
+ memcg, bpf_core_enum_value(enum node_stat_item, NR_FILE_PAGES));
+ memcg_query.nr_file_mapped = bpf_mem_cgroup_page_state(
+ memcg,
+ bpf_core_enum_value(enum node_stat_item, NR_FILE_MAPPED));
+ memcg_query.pgfault = bpf_mem_cgroup_vm_events(
+ memcg, bpf_core_enum_value(enum vm_event_item, PGFAULT));
bpf_put_mem_cgroup(memcg);
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting
2026-03-03 5:53 [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting Hui Zhu
2026-03-03 5:53 ` [PATCH bpf-next v5 1/2] selftests/bpf: Remove kmem subtest from cgroup_iter_memcg Hui Zhu
2026-03-03 5:53 ` [PATCH bpf-next v5 2/2] bpf: Use bpf_core_enum_value for stats in cgroup_iter_memcg Hui Zhu
@ 2026-03-10 19:00 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-03-10 19:00 UTC (permalink / raw)
To: Hui Zhu
Cc: ast, daniel, andrii, martin.lau, eddyz87, song, yonghong.song,
john.fastabend, kpsingh, sdf, haoluo, jolsa, shuah, inwardvessel,
roman.gushchin, emil, bpf, linux-kselftest, linux-kernel, zhuhui
Hello:
This series was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <ast@kernel.org>:
On Tue, 3 Mar 2026 13:53:07 +0800 you wrote:
> From: Hui Zhu <zhuhui@kylinos.cn>
>
> While back-porting "mm: bpf kfuncs to access memcg data", I
> encountered issues with test_cgroup_iter_memcg, specifically
> in test_kmem.
> The test_cgroup_iter_memcg test would falsely pass when
> bpf_mem_cgroup_page_state() failed due to incompatible enum
> values across kernel versions. Additionally, test_kmem would
> fail on systems with cgroup.memory=nokmem enabled.
>
> [...]
Here is the summary with links:
- [bpf-next,v5,1/2] selftests/bpf: Remove kmem subtest from cgroup_iter_memcg
https://git.kernel.org/bpf/bpf-next/c/a8fce027e17b
- [bpf-next,v5,2/2] bpf: Use bpf_core_enum_value for stats in cgroup_iter_memcg
https://git.kernel.org/bpf/bpf-next/c/da99028c2113
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-03-10 19:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-03 5:53 [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting Hui Zhu
2026-03-03 5:53 ` [PATCH bpf-next v5 1/2] selftests/bpf: Remove kmem subtest from cgroup_iter_memcg Hui Zhu
2026-03-03 5:53 ` [PATCH bpf-next v5 2/2] bpf: Use bpf_core_enum_value for stats in cgroup_iter_memcg Hui Zhu
2026-03-10 19:00 ` [PATCH bpf-next v5 0/2] Fix test_cgroup_iter_memcg issues found during back-porting patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox