Commit 5a156353 authored by Ian Rogers's avatar Ian Rogers Committed by Namhyung Kim
Browse files

perf test: Avoid use perf_env



The perf_env global variable holds the host perf_env data but its use
is hit and miss. Switch to using local perf_env variables and ensure
scoped perf_env__init and perf_env__exit. This loses command line
setting of the perf_env, but this doesn't matter for tests. So the
perf_env is fully initialized, clear it with memset in perf_env__init.

Signed-off-by: default avatarIan Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250724163302.596743-13-irogers@google.com


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent b743a136
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -651,11 +651,13 @@ static int do_test_code_reading(bool try_kcore)
	struct dso *dso;
	const char *events[] = { "cycles", "cycles:u", "cpu-clock", "cpu-clock:u", NULL };
	int evidx = 0;
	struct perf_env host_env;

	pid = getpid();

	machine = machine__new_host();
	machine->env = &perf_env;
	perf_env__init(&host_env);
	machine->env = &host_env;

	ret = machine__create_kernel_maps(machine);
	if (ret < 0) {
@@ -791,6 +793,7 @@ static int do_test_code_reading(bool try_kcore)
	perf_cpu_map__put(cpus);
	perf_thread_map__put(threads);
	machine__delete(machine);
	perf_env__exit(&host_env);

	return err;
}
+28 −22
Original line number Diff line number Diff line
@@ -319,11 +319,12 @@ static int run_perf_script(struct test_data *td)

static int test__dlfilter_test(struct test_data *td)
{
	struct perf_env host_env;
	u64 sample_type = TEST_SAMPLE_TYPE;
	pid_t pid = 12345;
	pid_t tid = 12346;
	u64 id = 99;
	int err;
	int err = TEST_OK;

	if (get_dlfilters_path(td->name, td->dlfilters, PATH_MAX))
		return test_result("dlfilters not found", TEST_SKIP);
@@ -353,37 +354,42 @@ static int test__dlfilter_test(struct test_data *td)

	pr_debug("Creating new host machine structure\n");
	td->machine = machine__new_host();
	td->machine->env = &perf_env;
	perf_env__init(&host_env);
	td->machine->env = &host_env;

	td->fd = creat(td->perf_data_file_name, 0644);
	if (td->fd < 0)
		return test_result("Failed to create test perf.data file", TEST_FAIL);

	err = perf_header__write_pipe(td->fd);
	if (err < 0)
		return test_result("perf_header__write_pipe() failed", TEST_FAIL);

	if (err < 0) {
		err = test_result("perf_header__write_pipe() failed", TEST_FAIL);
		goto out;
	}
	err = write_attr(td, sample_type, &id);
	if (err)
		return test_result("perf_event__synthesize_attr() failed", TEST_FAIL);

	if (write_comm(td->fd, pid, tid, "test-prog"))
		return TEST_FAIL;

	if (write_mmap(td->fd, pid, tid, MAP_START, 0x10000, 0, td->prog_file_name))
		return TEST_FAIL;

	if (write_sample(td, sample_type, id, pid, tid) != TEST_OK)
		return TEST_FAIL;

	if (err) {
		err = test_result("perf_event__synthesize_attr() failed", TEST_FAIL);
		goto out;
	}
	if (write_comm(td->fd, pid, tid, "test-prog")) {
		err = TEST_FAIL;
		goto out;
	}
	if (write_mmap(td->fd, pid, tid, MAP_START, 0x10000, 0, td->prog_file_name)) {
		err = TEST_FAIL;
		goto out;
	}
	if (write_sample(td, sample_type, id, pid, tid) != TEST_OK) {
		err = TEST_FAIL;
		goto out;
	}
	if (verbose > 1)
		system_cmd("%s script -i %s -D", td->perf, td->perf_data_file_name);

	err = run_perf_script(td);
	if (err)
		return TEST_FAIL;

	return TEST_OK;
	err = run_perf_script(td) ? TEST_FAIL : TEST_OK;
out:
	perf_env__exit(&host_env);
	return err;
}

static void unlink_path(const char *path)
+1 −0
Original line number Diff line number Diff line
@@ -271,6 +271,7 @@ void perf_env__exit(struct perf_env *env)

void perf_env__init(struct perf_env *env)
{
	memset(env, 0, sizeof(*env));
#ifdef HAVE_LIBBPF_SUPPORT
	env->bpf_progs.infos = RB_ROOT;
	env->bpf_progs.btfs = RB_ROOT;