Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf session: Add host_env argument to perf_session__new

When creating a perf_session the host perf_env may or may not want to
be used. For example, `perf top` uses a host perf_env while `perf
inject` does not. Add a host_env argument to perf_session__new so that
sessions requiring a host perf_env can pass it in. Currently if none
is specified the global perf_env variable is used, but this will
change in later patches.

Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250724163302.596743-14-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>

authored by

Ian Rogers and committed by
Namhyung Kim
740f7ba1 5a156353

+8 -5
+2 -1
tools/perf/builtin-inject.c
··· 2539 2539 inject.tool.bpf_metadata = perf_event__repipe_op2_synth; 2540 2540 inject.tool.dont_split_sample_group = true; 2541 2541 inject.session = __perf_session__new(&data, &inject.tool, 2542 - /*trace_event_repipe=*/inject.output.is_pipe); 2542 + /*trace_event_repipe=*/inject.output.is_pipe, 2543 + /*host_env=*/NULL); 2543 2544 2544 2545 if (IS_ERR(inject.session)) { 2545 2546 ret = PTR_ERR(inject.session);
+3 -2
tools/perf/util/session.c
··· 138 138 139 139 struct perf_session *__perf_session__new(struct perf_data *data, 140 140 struct perf_tool *tool, 141 - bool trace_event_repipe) 141 + bool trace_event_repipe, 142 + struct perf_env *host_env) 142 143 { 143 144 int ret = -ENOMEM; 144 145 struct perf_session *session = zalloc(sizeof(*session)); ··· 192 191 symbol_conf.kallsyms_name = perf_data__kallsyms_name(data); 193 192 } 194 193 } else { 195 - session->machines.host.env = &perf_env; 194 + session->machines.host.env = host_env ?: &perf_env; 196 195 } 197 196 if (session->evlist) 198 197 session->evlist->session = session;
+3 -2
tools/perf/util/session.h
··· 107 107 108 108 struct perf_session *__perf_session__new(struct perf_data *data, 109 109 struct perf_tool *tool, 110 - bool trace_event_repipe); 110 + bool trace_event_repipe, 111 + struct perf_env *host_env); 111 112 112 113 static inline struct perf_session *perf_session__new(struct perf_data *data, 113 114 struct perf_tool *tool) 114 115 { 115 - return __perf_session__new(data, tool, /*trace_event_repipe=*/false); 116 + return __perf_session__new(data, tool, /*trace_event_repipe=*/false, /*host_env=*/NULL); 116 117 } 117 118 118 119 void perf_session__delete(struct perf_session *session);