Verify that child processes correctly inherit BPF-THP policy from their parent during fork() operations. Signed-off-by: Yafang Shao --- .../selftests/bpf/prog_tests/thp_adjust.c | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/thp_adjust.c b/tools/testing/selftests/bpf/prog_tests/thp_adjust.c index 0d570cee9006..f585e60882e8 100644 --- a/tools/testing/selftests/bpf/prog_tests/thp_adjust.c +++ b/tools/testing/selftests/bpf/prog_tests/thp_adjust.c @@ -267,6 +267,37 @@ static void subtest_thp_global_policy(void) bpf_link__destroy(global_link); } +static void subtest_thp_fork(void) +{ + int elighble, child, pid, status; + struct bpf_link *ops_link; + char *ptr; + + ops_link = bpf_map__attach_struct_ops(skel->maps.thp_eligible_ops); + if (!ASSERT_OK_PTR(ops_link, "attach struct_ops")) + return; + + child = fork(); + if (!ASSERT_GE(child, 0, "fork")) + goto destroy; + + if (child == 0) { + ptr = thp_alloc(); + elighble = get_thp_eligible(getpid(), (unsigned long)ptr); + ASSERT_EQ(elighble, 0, "THPeligible"); + thp_free(ptr); + + exit(EXIT_SUCCESS); + } + + pid = waitpid(child, &status, 0); + ASSERT_EQ(pid, child, "waitpid"); + +destroy: + bpf_link__destroy(ops_link); + +} + static int thp_adjust_setup(void) { int err = -1, pmd_order; @@ -319,6 +350,8 @@ void test_thp_adjust(void) subtest_thp_policy_update(); if (test__start_subtest("global_policy")) subtest_thp_global_policy(); + if (test__start_subtest("thp_fork")) + subtest_thp_fork(); thp_adjust_destroy(); } -- 2.47.3