On Fri, 8 Dec 2023 at 02:08, Kyle Huey me@kylehuey.com wrote:
On Thu, Dec 7, 2023 at 2:56 PM Kyle Huey me@kylehuey.com wrote:
On Thu, Dec 7, 2023 at 11:20 AM Marco Elver elver@google.com wrote:
On Thu, 7 Dec 2023 at 20:12, Andrii Nakryiko andrii.nakryiko@gmail.com wrote:
On Thu, Dec 7, 2023 at 8:35 AM Kyle Huey me@kylehuey.com wrote:
The test sets a hardware breakpoint and uses a bpf program to suppress the side effects of a perf event sample, including I/O availability signals, SIGTRAPs, and decrementing the event counter limit, if the ip matches the expected value. Then the function with the breakpoint is executed multiple times to test that all effects behave as expected.
Signed-off-by: Kyle Huey khuey@kylehuey.com
.../selftests/bpf/prog_tests/perf_skip.c | 145 ++++++++++++++++++ .../selftests/bpf/progs/test_perf_skip.c | 15 ++ 2 files changed, 160 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/perf_skip.c create mode 100644 tools/testing/selftests/bpf/progs/test_perf_skip.c
diff --git a/tools/testing/selftests/bpf/prog_tests/perf_skip.c b/tools/testing/selftests/bpf/prog_tests/perf_skip.c new file mode 100644 index 000000000000..f6fa9bfd9efa --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/perf_skip.c @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0 +#define _GNU_SOURCE
+/* We need the latest siginfo from the kernel repo. */ +#include <asm/siginfo.h>
selftests are built with UAPI headers' copies under tools/include, so CI did catch a real issue, I think. Try copying include/uapi/asm-generic/siginfo.h into tools/include/uapi/asm-generic/siginfo.h ?
I believe parts of this were inspired by tools/testing/selftests/perf_events/sigtrap_threads.c - getting the kernel headers is allowed, as long as $(KHDR_INCLUDES) is added to CFLAGS. See tools/testing/selftests/perf_events/Makefile. Not sure it's appropriate for this test though, if you don't want to add KHDR_INCLUDES for everything.
Yes, that's right. Namhyung's commit message for 91c97b36bd69 leads me to believe that I should copy siginfo.h over into tools/include and fix the perf_events self tests too.
- Kyle
That doesn't really help (though perhaps it should be done anyway so the selftests aren't reaching into include/) because the glibc headers still redefine a ton of stuff in asm-generic/siginfo.h.
From what I can see your test doesn't actually refer to any of the si_perf_* fields, but only needs it for this:
ASSERT_EQ(info->si_code, TRAP_PERF, "wrong si_code");
I think that's easy to fix by just defining TRAP_PERF yourself or leaving out the assert completely. If you get an unexpected SIGTRAP your asserts checking sigtrap_count elsewhere will fail, too. It'd just be harder to debug.