Re: [PATCH] selftests/bpf: skip get_branch_snapshot in vm
From: Song Liu <song@kernel.org>
Date: 2021-10-07 00:35:43
Also in:
bpf
On Wed, Oct 6, 2021 at 2:36 PM Andrii Nakryiko [off-list ref] wrote:
On Wed, Oct 6, 2021 at 1:31 PM Song Liu [off-list ref] wrote:quoted
VMs running on latest kernel support LBR. However, bpf_get_branch_snapshot couldn't stop the LBR before too many entries are flushed. Skip the test for VMs before we find a proper fix for VMs. Read the "flags" line from /proc/cpuinfo, if it contains "hypervisor", skip test get_branch_snapshot. Fixes: 025bd7c753aa (selftests/bpf: Add test for bpf_get_branch_snapshot)missing quotes?
Aha, I copied this line from e31eec77e4ab90dcec7d2da93415f839098dc287. Will fix.
quoted
Signed-off-by: Song Liu <redacted> --- .../bpf/prog_tests/get_branch_snapshot.c | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+)diff --git a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c index 67e86f8d86775..bf9d47a859449 100644 --- a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c +++ b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c@@ -6,6 +6,30 @@ static int *pfd_array; static int cpu_cnt; +static bool is_hypervisor(void) +{ + char *line = NULL; + bool ret = false; + size_t len; + FILE *fp; + + fp = fopen("/proc/cpuinfo", "r"); + if (!fp) + return false; + + while (getline(&line, &len, fp) != -1) { + if (strstr(line, "flags") == line) {strncmp() would be more explicit. That's what you are trying to do (prefix match), right?
right... let me fix it in v2.
quoted
+ if (strstr(line, "hypervisor") != NULL) + ret = true; + break; + } + } + + free(line); + fclose(fp); + return ret; +} + static int create_perf_events(void) { struct perf_event_attr attr = {0};@@ -54,6 +78,14 @@ void test_get_branch_snapshot(void) struct get_branch_snapshot *skel = NULL; int err; + if (is_hypervisor()) { + /* As of today, LBR in hypervisor cannot be stopped before + * too many entries are flushed. Skip the test for now in + * hypervisor until we optimize the LBR in hypervisor. + */ + test__skip(); + return; + } if (create_perf_events()) { test__skip(); /* system doesn't support LBR */ goto cleanup; --2.30.2