Message ID | 20190716105634.21827-1-iii@linux.ibm.com |
---|---|
State | Accepted |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf,v2] selftests/bpf: skip nmi test when perf hw events are disabled | expand |
On Tue, Jul 16, 2019 at 3:56 AM Ilya Leoshkevich <iii@linux.ibm.com> wrote: > > Some setups (e.g. virtual machines) might run with hardware perf events > disabled. If this is the case, skip the test_send_signal_nmi test. > > Add a separate test involving a software perf event. This allows testing > the perf event path regardless of hardware perf event support. > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > --- LGTM! Acked-by: Andrii Nakryiko <andriin@fb.com> > > v1->v2: Skip the test instead of using a software event. > Add a separate test with a software event. > > .../selftests/bpf/prog_tests/send_signal.c | 33 ++++++++++++++++++- > 1 file changed, 32 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/send_signal.c b/tools/testing/selftests/bpf/prog_tests/send_signal.c > index 67cea1686305..54218ee3c004 100644 > --- a/tools/testing/selftests/bpf/prog_tests/send_signal.c > +++ b/tools/testing/selftests/bpf/prog_tests/send_signal.c > @@ -173,6 +173,18 @@ static int test_send_signal_tracepoint(void) > return test_send_signal_common(&attr, BPF_PROG_TYPE_TRACEPOINT, "tracepoint"); > } > [...]
On Tue, Jul 16, 2019 at 07:57:04AM -0700, Andrii Nakryiko wrote: > On Tue, Jul 16, 2019 at 3:56 AM Ilya Leoshkevich <iii@linux.ibm.com> wrote: > > > > Some setups (e.g. virtual machines) might run with hardware perf events > > disabled. If this is the case, skip the test_send_signal_nmi test. > > > > Add a separate test involving a software perf event. This allows testing > > the perf event path regardless of hardware perf event support. > > > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > > --- > > LGTM! > > Acked-by: Andrii Nakryiko <andriin@fb.com> Applied, Thanks
diff --git a/tools/testing/selftests/bpf/prog_tests/send_signal.c b/tools/testing/selftests/bpf/prog_tests/send_signal.c index 67cea1686305..54218ee3c004 100644 --- a/tools/testing/selftests/bpf/prog_tests/send_signal.c +++ b/tools/testing/selftests/bpf/prog_tests/send_signal.c @@ -173,6 +173,18 @@ static int test_send_signal_tracepoint(void) return test_send_signal_common(&attr, BPF_PROG_TYPE_TRACEPOINT, "tracepoint"); } +static int test_send_signal_perf(void) +{ + struct perf_event_attr attr = { + .sample_period = 1, + .type = PERF_TYPE_SOFTWARE, + .config = PERF_COUNT_SW_CPU_CLOCK, + }; + + return test_send_signal_common(&attr, BPF_PROG_TYPE_PERF_EVENT, + "perf_sw_event"); +} + static int test_send_signal_nmi(void) { struct perf_event_attr attr = { @@ -181,8 +193,26 @@ static int test_send_signal_nmi(void) .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_CPU_CYCLES, }; + int pmu_fd; + + /* Some setups (e.g. virtual machines) might run with hardware + * perf events disabled. If this is the case, skip this test. + */ + pmu_fd = syscall(__NR_perf_event_open, &attr, 0 /* pid */, + -1 /* cpu */, -1 /* group_fd */, 0 /* flags */); + if (pmu_fd == -1) { + if (errno == ENOENT) { + printf("%s:SKIP:no PERF_COUNT_HW_CPU_CYCLES\n", + __func__); + return 0; + } + /* Let the test fail with a more informative message */ + } else { + close(pmu_fd); + } - return test_send_signal_common(&attr, BPF_PROG_TYPE_PERF_EVENT, "perf_event"); + return test_send_signal_common(&attr, BPF_PROG_TYPE_PERF_EVENT, + "perf_hw_event"); } void test_send_signal(void) @@ -190,6 +220,7 @@ void test_send_signal(void) int ret = 0; ret |= test_send_signal_tracepoint(); + ret |= test_send_signal_perf(); ret |= test_send_signal_nmi(); if (!ret) printf("test_send_signal:OK\n");
Some setups (e.g. virtual machines) might run with hardware perf events disabled. If this is the case, skip the test_send_signal_nmi test. Add a separate test involving a software perf event. This allows testing the perf event path regardless of hardware perf event support. Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> --- v1->v2: Skip the test instead of using a software event. Add a separate test with a software event. .../selftests/bpf/prog_tests/send_signal.c | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-)