diff options
| author | Song Liu <[email protected]> | 2021-10-06 22:02:31 -0700 | 
|---|---|---|
| committer | Andrii Nakryiko <[email protected]> | 2021-10-07 21:51:04 -0700 | 
| commit | aa67fdb4643616f04cb59b6d090010c371ab1a80 (patch) | |
| tree | 17f11d2fb60a7921036df220f5b70ae12acd08ae /tools/testing/selftests/bpf/prog_tests | |
| parent | 0eb4ef88c53f7169c44b1bd2ace5389981409a60 (diff) | |
selftests/bpf: Skip the second half of get_branch_snapshot in vm
VMs running on upstream 5.12+ kernel support LBR. However,
bpf_get_branch_snapshot couldn't stop the LBR before too many entries
are flushed. Skip the hit/waste test for VMs before we find a proper fix
for LBR in VM.
Fixes: 025bd7c753aa ("selftests/bpf: Add test for bpf_get_branch_snapshot")
Signed-off-by: Song Liu <[email protected]>
Signed-off-by: Andrii Nakryiko <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests')
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c | 34 | 
1 files changed, 34 insertions, 0 deletions
| 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 67e86f8d8677..e4f92feb7b32 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 (!strncmp(line, "flags", 5)) { +			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}; @@ -83,6 +107,16 @@ void test_get_branch_snapshot(void)  		goto cleanup;  	} +	if (is_hypervisor()) { +		/* As of today, LBR in hypervisor cannot be stopped before +		 * too many entries are flushed. Skip the hit/waste test +		 * for now in hypervisor until we optimize the LBR in +		 * hypervisor. +		 */ +		test__skip(); +		goto cleanup; +	} +  	ASSERT_GT(skel->bss->test1_hits, 6, "find_looptest_in_lbr");  	/* Given we stop LBR in software, we will waste a few entries. |