On Wed, Oct 6, 2021 at 1:31 PM Song Liu <songliubraving@xxxxxx> wrote: > > 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? > 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) { strncmp() would be more explicit. That's what you are trying to do (prefix match), right? > + 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 >