Commit aa67fdb4 authored by Song Liu's avatar Song Liu Committed by Andrii Nakryiko
Browse files

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: 025bd7c7 ("selftests/bpf: Add test for bpf_get_branch_snapshot")
Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20211007050231.728496-1-songliubraving@fb.com
parent 0eb4ef88
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -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.