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) Signed-off-by: Song Liu <songliubraving@xxxxxx> --- .../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) { + 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