From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2A981F7569 for ; Tue, 27 May 2025 06:42:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328130; cv=none; b=BMXGhSDPBU/R0qVPzrX8aEyTec4YJoPGSOHEnKl+8ZH0FnRKx/fbfP7qjElj18QvsmVV8Cak7oyZwV8OZvlL2t5cl6rCwdejPmI7rIL8VnhYaNkoyMXONJw82r0OFsIPCUHsP2JY1+T5EvfwT8/Xt38+v4vOd9qX4QSN84FxBFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328130; c=relaxed/simple; bh=XChWteBctxeWL1Rwse5CqoRsSov4sR5z7bCht2vx/OA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=U3F9f6mM056zZFEtE+xmV+fd956Jtrq/pGmpw+3aHomWGeQxYZif9/leWwOeenytg441PstYqbYh3scoBNkZ5VUmDgtpzBlpmlk9FNBE+e78K3SY7P/VzHEWaVl9oCJYrJQv4NCbR6FfBoJNPK2nt0/Fwph5uAQQuDa+72HhvXE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=EO/FN2nq; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="EO/FN2nq" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3111a070de6so4970666a91.0 for ; Mon, 26 May 2025 23:42:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328126; x=1748932926; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=BLSSGptbTqFJV6eiV57TFyRAKLc3NlAg3ltvbKzMjyw=; b=EO/FN2nqCEYKR+tbuX7Keq7mhfaO3y28SBPT+JfkUmhnhLYDaCKG4+OLkQ6DPuy03t Ipcj7jto8e4/bj0Xw16SLJxvKDNrNc6V78w+AXpeK/Z+Na3jwHbxCBVk/OadTv82jDSQ 1QG7sxGCmSJcSahHED4CPw7E6IAofPKQAjW6K8COIawlmaq+Fb8x1qSRm/Q4EdUZDTms K3nOgGP5dPb6ZxH3l423MM2nTeSx56N0mFbCWEbSh/J7tRtAHKdC8jq4M87K51FN5ws9 JDz3ydYbHzr4dSR0HGKMO+flulKt8jKcsN08iimOqKMIQR/0l5MMWwJArGpWAfn5QVu/ peow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328126; x=1748932926; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BLSSGptbTqFJV6eiV57TFyRAKLc3NlAg3ltvbKzMjyw=; b=foQTE5reFlRCy1JxzdBkiWuGjjo26N7K7e11VvYgiFMrejSlFOey9mKWGlkDU9qD1m 3Yn9r/qZsHfyGYp2ixIZASCLYewmyDTOcg4Rf4a5Sh+maQq+xLrbsJGjdSvgMArcAPnV vu6NQWklZvLbix4wisDAU3ayxwZxU4ttuYuORm0wITPRbTAWnENlyHPfuoAKfw5u/590 pRuFrraabc4D1/zhTPMN9iKDNeH24kit+mB0PiBSlFnUeCzW26KG+zqTRA79CTNlPXju mfi+3qLgjpLoGpghI5+8Owg2E1CVMRYvxXmoCcVEPBSW6g+B1I2cen14VOv58EeUTay7 u9pQ== X-Forwarded-Encrypted: i=1; AJvYcCWLJS7bkhSrMW9ohqq3HkB0yvMX96fe1FNp9DSsQ9F3ez86NTG5xfd+BVlsqN/AHl327pE+AfYXjATiVJ4=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/BGi8dBBQvDyLBjt1wThTyJlXYk9PbGVO5WEQOPgTwPOAxtza /8S4Y9wxsdhumO1ahrP8MfqPRb4ZgQtplfs2GhhkWirxqy8BHIKcYIVNEPQ7RMPfW4Sne81CpHp uJ2C/SmhIRQ== X-Google-Smtp-Source: AGHT+IGMNfhGpbKaVUusybQ0FYfjTv0oCvnUbeStjXS12L3enCXSD8X0f2Q+UrTt2q2038VhOhhycFowYHeg X-Received: from pja14.prod.google.com ([2002:a17:90b:548e:b0:2ef:d283:5089]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3cc7:b0:30e:ee4:3094 with SMTP id 98e67ed59e1d1-3110f0c724emr16342216a91.1.1748328126151; Mon, 26 May 2025 23:42:06 -0700 (PDT) Date: Mon, 26 May 2025 23:41:43 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-2-irogers@google.com> Subject: [PATCH v1 01/11] perf session: Add accessor for session->header.env From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The perf_env from the header in the session is frequently accessed, add an accessor function rather than access directly. Cache the value to avoid repeated calls. No behavioral change. Signed-off-by: Ian Rogers --- tools/perf/builtin-annotate.c | 4 +-- tools/perf/builtin-buildid-cache.c | 2 +- tools/perf/builtin-c2c.c | 16 ++++++------ tools/perf/builtin-inject.c | 2 +- tools/perf/builtin-kmem.c | 2 +- tools/perf/builtin-kvm.c | 4 +-- tools/perf/builtin-kwork.c | 2 +- tools/perf/builtin-lock.c | 4 +-- tools/perf/builtin-mem.c | 2 +- tools/perf/builtin-record.c | 22 +++++++++-------- tools/perf/builtin-report.c | 8 +++--- tools/perf/builtin-sched.c | 8 +++--- tools/perf/builtin-script.c | 14 ++++++----- tools/perf/builtin-stat.c | 23 ++++++++--------- tools/perf/builtin-timechart.c | 2 +- tools/perf/builtin-top.c | 5 ++-- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/topology.c | 38 +++++++++++++---------------- tools/perf/util/bpf-event.c | 2 +- tools/perf/util/branch.c | 2 +- tools/perf/util/data-convert-bt.c | 16 ++++++------ tools/perf/util/data-convert-json.c | 36 +++++++++++++-------------- tools/perf/util/session.c | 7 +++++- tools/perf/util/session.h | 2 ++ tools/perf/util/tool.c | 2 +- 25 files changed, 120 insertions(+), 107 deletions(-) diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 9833c2c82a2f..326593862998 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -562,7 +562,7 @@ static int __cmd_annotate(struct perf_annotate *ann) } =20 if (!annotate_opts.objdump_path) { - ret =3D perf_env__lookup_objdump(&session->header.env, + ret =3D perf_env__lookup_objdump(perf_session__env(session), &annotate_opts.objdump_path); if (ret) goto out; @@ -896,7 +896,7 @@ int cmd_annotate(int argc, const char **argv) =20 symbol_conf.try_vmlinux_path =3D true; =20 - ret =3D symbol__init(&annotate.session->header.env); + ret =3D symbol__init(perf_session__env(annotate.session)); if (ret < 0) goto out_delete; =20 diff --git a/tools/perf/builtin-buildid-cache.c b/tools/perf/builtin-buildi= d-cache.c index b0511d16aeb6..a10cf3243efa 100644 --- a/tools/perf/builtin-buildid-cache.c +++ b/tools/perf/builtin-buildid-cache.c @@ -453,7 +453,7 @@ int cmd_buildid_cache(int argc, const char **argv) return PTR_ERR(session); } =20 - if (symbol__init(session ? &session->header.env : NULL) < 0) + if (symbol__init(session ? perf_session__env(session) : NULL) < 0) goto out; =20 setup_pager(); diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index e2e257bcc461..8cb36d9433f8 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -2267,14 +2267,15 @@ static int setup_nodes(struct perf_session *session) int node, idx; struct perf_cpu cpu; int *cpu2node; + struct perf_env *env =3D perf_session__env(session); =20 if (c2c.node_info > 2) c2c.node_info =3D 2; =20 - c2c.nodes_cnt =3D session->header.env.nr_numa_nodes; - c2c.cpus_cnt =3D session->header.env.nr_cpus_avail; + c2c.nodes_cnt =3D env->nr_numa_nodes; + c2c.cpus_cnt =3D env->nr_cpus_avail; =20 - n =3D session->header.env.numa_nodes; + n =3D env->numa_nodes; if (!n) return -EINVAL; =20 @@ -3030,6 +3031,7 @@ static int perf_c2c__report(int argc, const char **ar= gv) }; int err =3D 0; const char *output_str, *sort_str =3D NULL; + struct perf_env *env; =20 argc =3D parse_options(argc, argv, options, report_c2c_usage, PARSE_OPT_STOP_AT_NON_OPTION); @@ -3072,14 +3074,14 @@ static int perf_c2c__report(int argc, const char **= argv) pr_debug("Error creating perf session\n"); goto out; } - + env =3D perf_session__env(session); /* * Use the 'tot' as default display type if user doesn't specify it; * since Arm64 platform doesn't support HITMs flag, use 'peer' as the * default display type. */ if (!display) { - if (!strcmp(perf_env__arch(&session->header.env), "arm64")) + if (!strcmp(perf_env__arch(env), "arm64")) display =3D "peer"; else display =3D "tot"; @@ -3109,7 +3111,7 @@ static int perf_c2c__report(int argc, const char **ar= gv) goto out_session; } =20 - err =3D mem2node__init(&c2c.mem2node, &session->header.env); + err =3D mem2node__init(&c2c.mem2node, env); if (err) goto out_session; =20 @@ -3117,7 +3119,7 @@ static int perf_c2c__report(int argc, const char **ar= gv) if (err) goto out_mem2node; =20 - if (symbol__init(&session->header.env) < 0) + if (symbol__init(env) < 0) goto out_mem2node; =20 /* No pipe support at the moment. */ diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 11e49cafa3af..1b8c4ff39124 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -2601,7 +2601,7 @@ int cmd_inject(int argc, const char **argv) inject.tool.finished_round =3D perf_event__drop_oe; } #endif - ret =3D symbol__init(&inject.session->header.env); + ret =3D symbol__init(perf_session__env(inject.session)); if (ret < 0) goto out_delete; =20 diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 67fb1946ef13..7929a5fa5f46 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -2024,7 +2024,7 @@ int cmd_kmem(int argc, const char **argv) symbol_conf.use_callchain =3D true; } =20 - symbol__init(&session->header.env); + symbol__init(perf_session__env(session)); =20 if (perf_time__parse_str(&ptime, time_str) !=3D 0) { pr_err("Invalid time string\n"); diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 67fd2b006b0b..b3f4797d4342 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1175,7 +1175,7 @@ static int cpu_isa_config(struct perf_kvm_stat *kvm) } cpuid =3D buf; } else - cpuid =3D kvm->session->header.env.cpuid; + cpuid =3D perf_session__env(kvm->session)->cpuid; =20 if (!cpuid) { pr_err("Failed to look up CPU type\n"); @@ -1561,7 +1561,7 @@ static int read_events(struct perf_kvm_stat *kvm) return PTR_ERR(kvm->session); } =20 - symbol__init(&kvm->session->header.env); + symbol__init(perf_session__env(kvm->session)); =20 if (!perf_session__has_traces(kvm->session, "kvm record")) { ret =3D -EINVAL; diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index c41a68d073de..d2e08de5976d 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -1804,7 +1804,7 @@ static int perf_kwork__read_events(struct perf_kwork = *kwork) return PTR_ERR(session); } =20 - symbol__init(&session->header.env); + symbol__init(perf_session__env(session)); =20 if (perf_kwork__check_config(kwork, session) !=3D 0) goto out_delete; diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index 41f6f3d2b779..d525a25fa84e 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -1876,7 +1876,7 @@ static int __cmd_report(bool display_info) } =20 symbol_conf.allow_aliases =3D true; - symbol__init(&session->header.env); + symbol__init(perf_session__env(session)); =20 if (!data.is_pipe) { if (!perf_session__has_traces(session, "lock record")) @@ -2042,7 +2042,7 @@ static int __cmd_contention(int argc, const char **ar= gv) con.save_callstack =3D true; =20 symbol_conf.allow_aliases =3D true; - symbol__init(&session->header.env); + symbol__init(perf_session__env(session)); =20 if (use_bpf) { err =3D target__validate(&target); diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c index 5ec83cd85650..c6496adff3fe 100644 --- a/tools/perf/builtin-mem.c +++ b/tools/perf/builtin-mem.c @@ -304,7 +304,7 @@ static int report_raw_events(struct perf_mem *mem) goto out_delete; } =20 - ret =3D symbol__init(&session->header.env); + ret =3D symbol__init(perf_session__env(session)); if (ret < 0) goto out_delete; =20 diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 136c0172799a..406b2166a3e9 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -2192,7 +2192,7 @@ static int record__setup_sb_evlist(struct record *rec) } } =20 - if (evlist__add_bpf_sb_event(rec->sb_evlist, &rec->session->header.env))= { + if (evlist__add_bpf_sb_event(rec->sb_evlist, perf_session__env(rec->sess= ion))) { pr_err("Couldn't ask for PERF_RECORD_BPF_EVENT side band events.\n."); return -1; } @@ -2211,15 +2211,16 @@ static int record__init_clock(struct record *rec) struct perf_session *session =3D rec->session; struct timespec ref_clockid; struct timeval ref_tod; + struct perf_env *env =3D perf_session__env(session); u64 ref; =20 if (!rec->opts.use_clockid) return 0; =20 if (rec->opts.use_clockid && rec->opts.clockid_res_ns) - session->header.env.clock.clockid_res_ns =3D rec->opts.clockid_res_ns; + env->clock.clockid_res_ns =3D rec->opts.clockid_res_ns; =20 - session->header.env.clock.clockid =3D rec->opts.clockid; + env->clock.clockid =3D rec->opts.clockid; =20 if (gettimeofday(&ref_tod, NULL) !=3D 0) { pr_err("gettimeofday failed, cannot set reference time.\n"); @@ -2234,12 +2235,12 @@ static int record__init_clock(struct record *rec) ref =3D (u64) ref_tod.tv_sec * NSEC_PER_SEC + (u64) ref_tod.tv_usec * NSEC_PER_USEC; =20 - session->header.env.clock.tod_ns =3D ref; + env->clock.tod_ns =3D ref; =20 ref =3D (u64) ref_clockid.tv_sec * NSEC_PER_SEC + (u64) ref_clockid.tv_nsec; =20 - session->header.env.clock.clockid_ns =3D ref; + env->clock.clockid_ns =3D ref; return 0; } =20 @@ -2385,6 +2386,7 @@ static int __cmd_record(struct record *rec, int argc,= const char **argv) int fd; float ratio =3D 0; enum evlist_ctl_cmd cmd =3D EVLIST_CTL_CMD_UNSUPPORTED; + struct perf_env *env; =20 atexit(record__sig_exit); signal(SIGCHLD, sig_handler); @@ -2426,7 +2428,7 @@ static int __cmd_record(struct record *rec, int argc,= const char **argv) pr_err("Perf session creation failed.\n"); return PTR_ERR(session); } - + env =3D perf_session__env(session); if (record__threads_enabled(rec)) { if (perf_data__is_pipe(&rec->data)) { pr_err("Parallel trace streaming is not available in pipe mode.\n"); @@ -2460,8 +2462,8 @@ static int __cmd_record(struct record *rec, int argc,= const char **argv) } #endif // HAVE_EVENTFD_SUPPORT =20 - session->header.env.comp_type =3D PERF_COMP_ZSTD; - session->header.env.comp_level =3D rec->opts.comp_level; + env->comp_type =3D PERF_COMP_ZSTD; + env->comp_level =3D rec->opts.comp_level; =20 if (rec->opts.kcore && !record__kcore_readable(&session->machines.host)) { @@ -2514,7 +2516,7 @@ static int __cmd_record(struct record *rec, int argc,= const char **argv) } /* Debug message used by test scripts */ pr_debug3("perf record done opening and mmapping events\n"); - session->header.env.comp_mmap_len =3D session->evlist->core.mmap_len; + env->comp_mmap_len =3D session->evlist->core.mmap_len; =20 if (rec->opts.kcore) { err =3D record__kcore_copy(&session->machines.host, data); @@ -2842,7 +2844,7 @@ static int __cmd_record(struct record *rec, int argc,= const char **argv) =20 if (rec->session->bytes_transferred && rec->session->bytes_compressed) { ratio =3D (float)rec->session->bytes_transferred/(float)rec->session->by= tes_compressed; - session->header.env.comp_ratio =3D ratio + 0.5; + env->comp_ratio =3D ratio + 0.5; } =20 if (forks) { diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index f0299c7ee025..9238cb993015 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -447,7 +447,7 @@ static int report__setup_sample_type(struct report *rep) } } =20 - callchain_param_setup(sample_type, perf_env__arch(&rep->session->header.e= nv)); + callchain_param_setup(sample_type, perf_env__arch(perf_session__env(rep->= session))); =20 if (rep->stitch_lbr && (callchain_param.record_mode !=3D CALLCHAIN_LBR)) { ui__warning("Can't find LBR callchain. Switch off --stitch-lbr.\n" @@ -547,7 +547,7 @@ static int evlist__tui_block_hists_browse(struct evlist= *evlist, struct report * evlist__for_each_entry(evlist, pos) { ret =3D report__browse_block_hists(&rep->block_reports[i++].hist, rep->min_percent, pos, - &rep->session->header.env); + perf_session__env(rep->session)); if (ret !=3D 0) return ret; } @@ -682,7 +682,7 @@ static int report__browse_hists(struct report *rep) } =20 ret =3D evlist__tui_browse_hists(evlist, help, NULL, rep->min_percent, - &session->header.env, true); + perf_session__env(session), true); /* * Usually "ret" is the last pressed key, and we only * care if the key notifies us to switch data file. @@ -1832,7 +1832,7 @@ int cmd_report(int argc, const char **argv) annotation_config__init(); } =20 - if (symbol__init(&session->header.env) < 0) + if (symbol__init(perf_session__env(session)) < 0) goto error; =20 if (report.time_str) { diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 26ece6e9bfd1..9b5c2f693bbe 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c @@ -1922,7 +1922,7 @@ static int perf_sched__read_events(struct perf_sched = *sched) return PTR_ERR(session); } =20 - symbol__init(&session->header.env); + symbol__init(perf_session__env(session)); =20 /* prefer sched_waking if it is captured */ if (evlist__find_tracepoint_by_name(session->evlist, "sched:sched_waking"= )) @@ -3236,6 +3236,7 @@ static int perf_sched__timehist(struct perf_sched *sc= hed) }; =20 struct perf_session *session; + struct perf_env *env; struct evlist *evlist; int err =3D -1; =20 @@ -3260,6 +3261,7 @@ static int perf_sched__timehist(struct perf_sched *sc= hed) if (IS_ERR(session)) return PTR_ERR(session); =20 + env =3D perf_session__env(session); if (cpu_list) { err =3D perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap); if (err < 0) @@ -3268,7 +3270,7 @@ static int perf_sched__timehist(struct perf_sched *sc= hed) =20 evlist =3D session->evlist; =20 - symbol__init(&session->header.env); + symbol__init(env); =20 if (perf_time__parse_str(&sched->ptime, sched->time_str) !=3D 0) { pr_err("Invalid time string\n"); @@ -3305,7 +3307,7 @@ static int perf_sched__timehist(struct perf_sched *sc= hed) goto out; =20 /* pre-allocate struct for per-CPU idle stats */ - sched->max_cpu.cpu =3D session->header.env.nr_cpus_online; + sched->max_cpu.cpu =3D env->nr_cpus_online; if (sched->max_cpu.cpu =3D=3D 0) sched->max_cpu.cpu =3D 4; if (init_idle_threads(sched->max_cpu.cpu)) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 6c3bf74dd78c..55b7c5ed8245 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -712,7 +712,7 @@ static int perf_session__check_output_opt(struct perf_s= ession *session) } } =20 - if (tod && !session->header.env.clock.enabled) { + if (tod && !perf_session__env(session)->clock.enabled) { pr_err("Can't provide 'tod' time, missing clock data. " "Please record with -k/--clockid option.\n"); return -1; @@ -757,7 +757,7 @@ tod_scnprintf(struct perf_script *script, char *buf, in= t buflen, if (buflen < 64 || !script) return buf; =20 - env =3D &script->session->header.env; + env =3D perf_session__env(script->session); if (!env->clock.enabled) { scnprintf(buf, buflen, "disabled"); return buf; @@ -3853,6 +3853,7 @@ int cmd_script(int argc, const char **argv) "perf script [] [script-args]", NULL }; + struct perf_env *env; =20 perf_set_singlethreaded(); =20 @@ -4099,6 +4100,7 @@ int cmd_script(int argc, const char **argv) if (IS_ERR(session)) return PTR_ERR(session); =20 + env =3D perf_session__env(session); if (header || header_only) { script.tool.show_feat_hdr =3D SHOW_FEAT_HEADER; perf_session__fprintf_info(session, stdout, show_full_info); @@ -4108,17 +4110,17 @@ int cmd_script(int argc, const char **argv) if (show_full_info) script.tool.show_feat_hdr =3D SHOW_FEAT_HEADER_FULL_INFO; =20 - if (symbol__init(&session->header.env) < 0) + if (symbol__init(env) < 0) goto out_delete; =20 uname(&uts); if (data.is_pipe) { /* Assume pipe_mode indicates native_arch */ native_arch =3D true; - } else if (session->header.env.arch) { - if (!strcmp(uts.machine, session->header.env.arch)) + } else if (env->arch) { + if (!strcmp(uts.machine, env->arch)) native_arch =3D true; else if (!strcmp(uts.machine, "x86_64") && - !strcmp(session->header.env.arch, "i386")) + !strcmp(env->arch, "i386")) native_arch =3D true; } =20 diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index bf0e5e12d992..be5f1f8204c9 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -1694,48 +1694,48 @@ static struct aggr_cpu_id perf_env__get_global_aggr= _by_cpu(struct perf_cpu cpu _ static struct aggr_cpu_id perf_stat__get_socket_file(struct perf_stat_conf= ig *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_socket_aggr_by_cpu(cpu, &perf_stat.session->header.e= nv); + return perf_env__get_socket_aggr_by_cpu(cpu, perf_session__env(perf_stat.= session)); } static struct aggr_cpu_id perf_stat__get_die_file(struct perf_stat_config = *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_die_aggr_by_cpu(cpu, &perf_stat.session->header.env); + return perf_env__get_die_aggr_by_cpu(cpu, perf_session__env(perf_stat.ses= sion)); } =20 static struct aggr_cpu_id perf_stat__get_cluster_file(struct perf_stat_con= fig *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_cluster_aggr_by_cpu(cpu, &perf_stat.session->header.= env); + return perf_env__get_cluster_aggr_by_cpu(cpu, perf_session__env(perf_stat= .session)); } =20 static struct aggr_cpu_id perf_stat__get_cache_file(struct perf_stat_confi= g *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_cache_aggr_by_cpu(cpu, &perf_stat.session->header.en= v); + return perf_env__get_cache_aggr_by_cpu(cpu, perf_session__env(perf_stat.s= ession)); } =20 static struct aggr_cpu_id perf_stat__get_core_file(struct perf_stat_config= *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_core_aggr_by_cpu(cpu, &perf_stat.session->header.env= ); + return perf_env__get_core_aggr_by_cpu(cpu, perf_session__env(perf_stat.se= ssion)); } =20 static struct aggr_cpu_id perf_stat__get_cpu_file(struct perf_stat_config = *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_cpu_aggr_by_cpu(cpu, &perf_stat.session->header.env); + return perf_env__get_cpu_aggr_by_cpu(cpu, perf_session__env(perf_stat.ses= sion)); } =20 static struct aggr_cpu_id perf_stat__get_node_file(struct perf_stat_config= *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_node_aggr_by_cpu(cpu, &perf_stat.session->header.env= ); + return perf_env__get_node_aggr_by_cpu(cpu, perf_session__env(perf_stat.se= ssion)); } =20 static struct aggr_cpu_id perf_stat__get_global_file(struct perf_stat_conf= ig *config __maybe_unused, struct perf_cpu cpu) { - return perf_env__get_global_aggr_by_cpu(cpu, &perf_stat.session->header.e= nv); + return perf_env__get_global_aggr_by_cpu(cpu, perf_session__env(perf_stat.= session)); } =20 static aggr_cpu_id_get_t aggr_mode__get_aggr_file(enum aggr_mode aggr_mode) @@ -1794,7 +1794,7 @@ static aggr_get_id_t aggr_mode__get_id_file(enum aggr= _mode aggr_mode) =20 static int perf_stat_init_aggr_mode_file(struct perf_stat *st) { - struct perf_env *env =3D &st->session->header.env; + struct perf_env *env =3D perf_session__env(st->session); aggr_cpu_id_get_t get_id =3D aggr_mode__get_aggr_file(stat_config.aggr_mo= de); bool needs_sort =3D stat_config.aggr_mode !=3D AGGR_NONE; =20 @@ -2115,8 +2115,9 @@ static int process_stat_round_event(struct perf_sessi= on *session, { struct perf_record_stat_round *stat_round =3D &event->stat_round; struct timespec tsh, *ts =3D NULL; - const char **argv =3D session->header.env.cmdline_argv; - int argc =3D session->header.env.nr_cmdline; + struct perf_env *env =3D perf_session__env(session); + const char **argv =3D env->cmdline_argv; + int argc =3D env->nr_cmdline; =20 process_counters(); =20 diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 068d297aaf44..22050c640dfa 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -1618,7 +1618,7 @@ static int __cmd_timechart(struct timechart *tchart, = const char *output_name) if (IS_ERR(session)) return PTR_ERR(session); =20 - symbol__init(&session->header.env); + symbol__init(perf_session__env(session)); =20 (void)perf_header__process_sections(&session->header, perf_data__fd(session->data), diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 7b6cde87d2af..0427dc027519 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -647,7 +647,8 @@ static void *display_thread_tui(void *arg) } =20 ret =3D evlist__tui_browse_hists(top->evlist, help, &hbt, top->min_percen= t, - &top->session->header.env, !top->record_opts.overwrite); + perf_session__env(top->session), + !top->record_opts.overwrite); if (ret =3D=3D K_RELOAD) { top->zero =3D true; goto repeat; @@ -1253,7 +1254,7 @@ static int __cmd_top(struct perf_top *top) int ret; =20 if (!annotate_opts.objdump_path) { - ret =3D perf_env__lookup_objdump(&top->session->header.env, + ret =3D perf_env__lookup_objdump(perf_session__env(top->session), &annotate_opts.objdump_path); if (ret) return ret; diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 07eddd5c0baa..dc3a016f302d 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -4749,7 +4749,7 @@ static int trace__replay(struct trace *trace) if (trace->opts.target.tid) symbol_conf.tid_list_str =3D strdup(trace->opts.target.tid); =20 - if (symbol__init(&session->header.env) < 0) + if (symbol__init(perf_session__env(session)) < 0) goto out; =20 trace->host =3D &session->machines.host; diff --git a/tools/perf/tests/topology.c b/tools/perf/tests/topology.c index a8cb5ba898ab..bc7d10630dad 100644 --- a/tools/perf/tests/topology.c +++ b/tools/perf/tests/topology.c @@ -69,9 +69,11 @@ static int check_cpu_topology(char *path, struct perf_cp= u_map *map) int i; struct aggr_cpu_id id; struct perf_cpu cpu; + struct perf_env *env; =20 session =3D perf_session__new(&data, NULL); TEST_ASSERT_VAL("can't get session", !IS_ERR(session)); + env =3D perf_session__env(session); cpu__setup_cpunode_map(); =20 /* On platforms with large numbers of CPUs process_cpu_topology() @@ -95,9 +97,7 @@ static int check_cpu_topology(char *path, struct perf_cpu= _map *map) * condition is true (see do_core_id_test in header.c). So always * run this test on those platforms. */ - if (!session->header.env.cpu - && strncmp(session->header.env.arch, "s390", 4) - && strncmp(session->header.env.arch, "aarch64", 7)) + if (!env->cpu && strncmp(env->arch, "s390", 4) && strncmp(env->arch, "aar= ch64", 7)) return TEST_SKIP; =20 /* @@ -106,20 +106,20 @@ static int check_cpu_topology(char *path, struct perf= _cpu_map *map) * physical_package_id will be set to -1. Hence skip this * test if physical_package_id returns -1 for cpu from perf_cpu_map. */ - if (!strncmp(session->header.env.arch, "ppc64le", 7)) { + if (!strncmp(env->arch, "ppc64le", 7)) { if (cpu__get_socket_id(perf_cpu_map__cpu(map, 0)) =3D=3D -1) return TEST_SKIP; } =20 - TEST_ASSERT_VAL("Session header CPU map not set", session->header.env.cpu= ); + TEST_ASSERT_VAL("Session header CPU map not set", env->cpu); =20 - for (i =3D 0; i < session->header.env.nr_cpus_avail; i++) { + for (i =3D 0; i < env->nr_cpus_avail; i++) { cpu.cpu =3D i; if (!perf_cpu_map__has(map, cpu)) continue; pr_debug("CPU %d, core %d, socket %d\n", i, - session->header.env.cpu[i].core_id, - session->header.env.cpu[i].socket_id); + env->cpu[i].core_id, + env->cpu[i].socket_id); } =20 // Test that CPU ID contains socket, die, core and CPU @@ -129,13 +129,12 @@ static int check_cpu_topology(char *path, struct perf= _cpu_map *map) cpu.cpu =3D=3D id.cpu.cpu); =20 TEST_ASSERT_VAL("Cpu map - Core ID doesn't match", - session->header.env.cpu[cpu.cpu].core_id =3D=3D id.core); + env->cpu[cpu.cpu].core_id =3D=3D id.core); TEST_ASSERT_VAL("Cpu map - Socket ID doesn't match", - session->header.env.cpu[cpu.cpu].socket_id =3D=3D - id.socket); + env->cpu[cpu.cpu].socket_id =3D=3D id.socket); =20 TEST_ASSERT_VAL("Cpu map - Die ID doesn't match", - session->header.env.cpu[cpu.cpu].die_id =3D=3D id.die); + env->cpu[cpu.cpu].die_id =3D=3D id.die); TEST_ASSERT_VAL("Cpu map - Node ID is set", id.node =3D=3D -1); TEST_ASSERT_VAL("Cpu map - Thread IDX is set", id.thread_idx =3D=3D -1); } @@ -144,14 +143,13 @@ static int check_cpu_topology(char *path, struct perf= _cpu_map *map) perf_cpu_map__for_each_cpu(cpu, i, map) { id =3D aggr_cpu_id__core(cpu, NULL); TEST_ASSERT_VAL("Core map - Core ID doesn't match", - session->header.env.cpu[cpu.cpu].core_id =3D=3D id.core); + env->cpu[cpu.cpu].core_id =3D=3D id.core); =20 TEST_ASSERT_VAL("Core map - Socket ID doesn't match", - session->header.env.cpu[cpu.cpu].socket_id =3D=3D - id.socket); + env->cpu[cpu.cpu].socket_id =3D=3D id.socket); =20 TEST_ASSERT_VAL("Core map - Die ID doesn't match", - session->header.env.cpu[cpu.cpu].die_id =3D=3D id.die); + env->cpu[cpu.cpu].die_id =3D=3D id.die); TEST_ASSERT_VAL("Core map - Node ID is set", id.node =3D=3D -1); TEST_ASSERT_VAL("Core map - Thread IDX is set", id.thread_idx =3D=3D -1); } @@ -160,11 +158,10 @@ static int check_cpu_topology(char *path, struct perf= _cpu_map *map) perf_cpu_map__for_each_cpu(cpu, i, map) { id =3D aggr_cpu_id__die(cpu, NULL); TEST_ASSERT_VAL("Die map - Socket ID doesn't match", - session->header.env.cpu[cpu.cpu].socket_id =3D=3D - id.socket); + env->cpu[cpu.cpu].socket_id =3D=3D id.socket); =20 TEST_ASSERT_VAL("Die map - Die ID doesn't match", - session->header.env.cpu[cpu.cpu].die_id =3D=3D id.die); + env->cpu[cpu.cpu].die_id =3D=3D id.die); =20 TEST_ASSERT_VAL("Die map - Node ID is set", id.node =3D=3D -1); TEST_ASSERT_VAL("Die map - Core is set", id.core =3D=3D -1); @@ -176,8 +173,7 @@ static int check_cpu_topology(char *path, struct perf_c= pu_map *map) perf_cpu_map__for_each_cpu(cpu, i, map) { id =3D aggr_cpu_id__socket(cpu, NULL); TEST_ASSERT_VAL("Socket map - Socket ID doesn't match", - session->header.env.cpu[cpu.cpu].socket_id =3D=3D - id.socket); + env->cpu[cpu.cpu].socket_id =3D=3D id.socket); =20 TEST_ASSERT_VAL("Socket map - Node ID is set", id.node =3D=3D -1); TEST_ASSERT_VAL("Socket map - Die ID is set", id.die =3D=3D -1); diff --git a/tools/perf/util/bpf-event.c b/tools/perf/util/bpf-event.c index c81444059ad0..c67e3ec938d0 100644 --- a/tools/perf/util/bpf-event.c +++ b/tools/perf/util/bpf-event.c @@ -184,7 +184,7 @@ static int perf_event__synthesize_one_bpf_prog(struct p= erf_session *session, * for perf-record and perf-report use header.env; * otherwise, use global perf_env. */ - env =3D session->data ? &session->header.env : &perf_env; + env =3D session->data ? perf_session__env(session) : &perf_env; =20 arrays =3D 1UL << PERF_BPIL_JITED_KSYMS; arrays |=3D 1UL << PERF_BPIL_JITED_FUNC_LENS; diff --git a/tools/perf/util/branch.c b/tools/perf/util/branch.c index ab760e267d41..3712be067464 100644 --- a/tools/perf/util/branch.c +++ b/tools/perf/util/branch.c @@ -46,7 +46,7 @@ const char *branch_new_type_name(int new_type) "FAULT_DATA", "FAULT_INST", /* - * TODO: This switch should happen on 'session->header.env.arch' + * TODO: This switch should happen on 'perf_session__env(session)->arch' * instead, because an arm64 platform perf recording could be * opened for analysis on other platforms as well. */ diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-conve= rt-bt.c index 5e7ff09fbc95..3d2e437e1354 100644 --- a/tools/perf/util/data-convert-bt.c +++ b/tools/perf/util/data-convert-bt.c @@ -1338,14 +1338,14 @@ static void cleanup_events(struct perf_session *ses= sion) static int setup_streams(struct ctf_writer *cw, struct perf_session *sessi= on) { struct ctf_stream **stream; - struct perf_header *ph =3D &session->header; + struct perf_env *env =3D perf_session__env(session); int ncpus; =20 /* * Try to get the number of cpus used in the data file, * if not present fallback to the MAX_CPUS. */ - ncpus =3D ph->env.nr_cpus_avail ?: MAX_CPUS; + ncpus =3D env->nr_cpus_avail ?: MAX_CPUS; =20 stream =3D zalloc(sizeof(*stream) * ncpus); if (!stream) { @@ -1371,7 +1371,7 @@ static void free_streams(struct ctf_writer *cw) static int ctf_writer__setup_env(struct ctf_writer *cw, struct perf_session *session) { - struct perf_header *header =3D &session->header; + struct perf_env *env =3D perf_session__env(session); struct bt_ctf_writer *writer =3D cw->writer; =20 #define ADD(__n, __v) \ @@ -1380,11 +1380,11 @@ do { \ return -1; \ } while (0) =20 - ADD("host", header->env.hostname); + ADD("host", env->hostname); ADD("sysname", "Linux"); - ADD("release", header->env.os_release); - ADD("version", header->env.version); - ADD("machine", header->env.arch); + ADD("release", env->os_release); + ADD("version", env->version); + ADD("machine", env->arch); ADD("domain", "kernel"); ADD("tracer_name", "perf"); =20 @@ -1401,7 +1401,7 @@ static int ctf_writer__setup_clock(struct ctf_writer = *cw, int64_t offset =3D 0; =20 if (tod) { - struct perf_env *env =3D &session->header.env; + struct perf_env *env =3D perf_session__env(session); =20 if (!env->clock.enabled) { pr_err("Can't provide --tod time, missing clock data. " diff --git a/tools/perf/util/data-convert-json.c b/tools/perf/util/data-con= vert-json.c index d9f805bf6fb0..9dc1e184cf3c 100644 --- a/tools/perf/util/data-convert-json.c +++ b/tools/perf/util/data-convert-json.c @@ -257,7 +257,8 @@ static int process_sample_event(const struct perf_tool = *tool, static void output_headers(struct perf_session *session, struct convert_js= on *c) { struct stat st; - struct perf_header *header =3D &session->header; + const struct perf_header *header =3D &session->header; + const struct perf_env *env =3D perf_session__env(session); int ret; int fd =3D perf_data__fd(session->data); int i; @@ -280,32 +281,32 @@ static void output_headers(struct perf_session *sessi= on, struct convert_json *c) output_json_key_format(out, true, 2, "data-size", "%" PRIu64, header->dat= a_size); output_json_key_format(out, true, 2, "feat-offset", "%" PRIu64, header->f= eat_offset); =20 - output_json_key_string(out, true, 2, "hostname", header->env.hostname); - output_json_key_string(out, true, 2, "os-release", header->env.os_release= ); - output_json_key_string(out, true, 2, "arch", header->env.arch); + output_json_key_string(out, true, 2, "hostname", env->hostname); + output_json_key_string(out, true, 2, "os-release", env->os_release); + output_json_key_string(out, true, 2, "arch", env->arch); =20 - if (header->env.cpu_desc) - output_json_key_string(out, true, 2, "cpu-desc", header->env.cpu_desc); + if (env->cpu_desc) + output_json_key_string(out, true, 2, "cpu-desc", env->cpu_desc); =20 - output_json_key_string(out, true, 2, "cpuid", header->env.cpuid); - output_json_key_format(out, true, 2, "nrcpus-online", "%u", header->env.n= r_cpus_online); - output_json_key_format(out, true, 2, "nrcpus-avail", "%u", header->env.nr= _cpus_avail); + output_json_key_string(out, true, 2, "cpuid", env->cpuid); + output_json_key_format(out, true, 2, "nrcpus-online", "%u", env->nr_cpus_= online); + output_json_key_format(out, true, 2, "nrcpus-avail", "%u", env->nr_cpus_a= vail); =20 - if (header->env.clock.enabled) { + if (env->clock.enabled) { output_json_key_format(out, true, 2, "clockid", - "%u", header->env.clock.clockid); + "%u", env->clock.clockid); output_json_key_format(out, true, 2, "clock-time", - "%" PRIu64, header->env.clock.clockid_ns); + "%" PRIu64, env->clock.clockid_ns); output_json_key_format(out, true, 2, "real-time", - "%" PRIu64, header->env.clock.tod_ns); + "%" PRIu64, env->clock.tod_ns); } =20 - output_json_key_string(out, true, 2, "perf-version", header->env.version); + output_json_key_string(out, true, 2, "perf-version", env->version); =20 output_json_key_format(out, true, 2, "cmdline", "["); - for (i =3D 0; i < header->env.nr_cmdline; i++) { + for (i =3D 0; i < env->nr_cmdline; i++) { output_json_delimiters(out, i !=3D 0, 3); - output_json_string(c->out, header->env.cmdline_argv[i]); + output_json_string(c->out, env->cmdline_argv[i]); } output_json_format(out, false, 2, "]"); } @@ -376,8 +377,7 @@ int bt_convert__perf2json(const char *input_name, const= char *output_name, fprintf(stderr, "Error creating perf session!\n"); goto err_fclose; } - - if (symbol__init(&session->header.env) < 0) { + if (symbol__init(perf_session__env(session)) < 0) { fprintf(stderr, "Symbol init error!\n"); goto err_session_delete; } diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index a320672c264e..d3888b78ed50 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -2554,7 +2554,7 @@ int perf_session__cpu_bitmap(struct perf_session *ses= sion, { int i, err =3D -1; struct perf_cpu_map *map; - int nr_cpus =3D min(session->header.env.nr_cpus_avail, MAX_NR_CPUS); + int nr_cpus =3D min(perf_session__env(session)->nr_cpus_avail, MAX_NR_CPU= S); struct perf_cpu cpu; =20 for (i =3D 0; i < PERF_TYPE_MAX; ++i) { @@ -2743,3 +2743,8 @@ int perf_session__dsos_hit_all(struct perf_session *s= ession) =20 return 0; } + +struct perf_env *perf_session__env(struct perf_session *session) +{ + return &session->header.env; +} diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index db1c120a9e67..e7f7464b838f 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h @@ -208,4 +208,6 @@ int perf_event__process_finished_round(const struct per= f_tool *tool, union perf_event *event, struct ordered_events *oe); =20 +struct perf_env *perf_session__env(struct perf_session *session); + #endif /* __PERF_SESSION_H */ diff --git a/tools/perf/util/tool.c b/tools/perf/util/tool.c index 37bd8ac63b01..903efa107a3c 100644 --- a/tools/perf/util/tool.c +++ b/tools/perf/util/tool.c @@ -17,7 +17,7 @@ static int perf_session__process_compressed_event(struct = perf_session *session, void *src; size_t decomp_size, src_size; u64 decomp_last_rem =3D 0; - size_t mmap_len, decomp_len =3D session->header.env.comp_mmap_len; + size_t mmap_len, decomp_len =3D perf_session__env(session)->comp_mmap_len; struct decomp *decomp, *decomp_last =3D session->active_decomp->decomp_la= st; =20 if (decomp_last) { --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE6241F8ADD for ; Tue, 27 May 2025 06:42:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328130; cv=none; b=YAzfNoHdl9n3rN1vB7GqaKr67wjQUTYtd7m9H/foeVZe7zq+2+McQuJH2R0BNwM07b+Aq+d1zdAWU5qBKAU9dBlDyAcjP0UxhyI+Uc4k6hcravPr7sX0WqmiqAaiWBwEBTPVk3Ve9Per1Rmr2fS27OjgizkIRo8xBJKgvW/uecc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328130; c=relaxed/simple; bh=esAza8BpL9KLHFoVuUTADRG9Z6iKZDwRWo4BZz0qfjU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=tP8p2jnnM0UxEu8IB5MVupxio9X4HYAgouCNDGL8VwyqPpqwL4fqTJvcr5eMJLqVPwb8hD6/twbe7HBC2GF6ATTO2zilngMFtSVefZF4TR2Mcpe4dd7ORaO88nPOh4dXpjoblTXtke+8Vdiau8N3ONXmuzIDTv+aqAjWFc/K6vk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=rSrPUo2u; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="rSrPUo2u" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b2c36951518so1669982a12.2 for ; Mon, 26 May 2025 23:42:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328128; x=1748932928; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=WNBSgGt6ntBeP6bJfTxMkVoL1Im4HvH+NsU4r6JbrSA=; b=rSrPUo2ua0rUpurKv+UseGLnNc7ZLcWb8NN9C24C7FGbkfNEX7kgtusH9+dfm//os6 RnhZ4Bg3MnYmnuDWdYhBjdxCdEOvlJUvM2XFAVmNGM2T/q/k37Zv+qotuiaqsY2SMOvO LOk1lNJS16XAi8BbC76FdkQutYom5LgL4++rDRyf/oNgTGZASj5+ElSrD95RefZtZDjT NIueyf60mtr81hEST58f32EEVYksFHWdsWTR+nSoEwRM6zlMCggSewqzyPJj+RtR7ZZD zadqs2Gf9o/1pjbN1PPxLEHSjiDBQJ87OXjekOqzVaM/VFuOTEjPtqucQMVbFxBOLVOy +Q2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328128; x=1748932928; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WNBSgGt6ntBeP6bJfTxMkVoL1Im4HvH+NsU4r6JbrSA=; b=JZy1wEK23IFDEzWde3hXBCT8A++o7kraXrDeJugVktCG67LCCiRPfHMMNqxOc1gDA6 1ZsFls/FtozDe8tvMafDYQKA7nHKfsxlPQTniOFzfsurYMJVUc/MVIMIkZ8mF/sfLWNd BxnnHDPXjhI4P9nFNJ+5zRBN6frdW/+kGM42hV8KL8iU5l8aR931U+YvbTzgDyMvpvbX LHoOX+4EUQo8R6WhUiX90hagdg5t7FxTAMFNc5NYnL+W8YN6NoC7dPxg8Dqw5GBIPKnO KQXf31/1C4qF73qZzKDu18LBv3E7Aa1fBXnbFn5NSoG1V2GxbMWPjP/L/j4u4k8oe+D8 oZLg== X-Forwarded-Encrypted: i=1; AJvYcCW2l7s5T+8atiiw742g2oJ33raWhFwvJW4y1vhKWpFtIUtIlsjn4wF0yGCgaLbt7cS86Rra+Nk0BZnt3cs=@vger.kernel.org X-Gm-Message-State: AOJu0YyJAt3qb+4AlfVN4+yM138nmUp54qopaxLXH2jtknauomu3LLMA EiBBPya8CqLgeAPyEV/TCqPRQNkodsUcu4MwRj99rFNaVOIrq1FnDGOBgOpOgXcyCmDJtEmPvZA qZ/m1rSyuIA== X-Google-Smtp-Source: AGHT+IFenJln4YVrxzSoeKFPhnKekKykeEQwGp49nReAoUtxshS+gVghFYMEClRpQQkgs64NC+iCtwEFYlZz X-Received: from pfkq8.prod.google.com ([2002:a05:6a00:848:b0:742:ac1f:7e2f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:c707:b0:1f5:8622:5ed5 with SMTP id adf61e73a8af0-2188c1e875dmr19059538637.3.1748328128059; Mon, 26 May 2025 23:42:08 -0700 (PDT) Date: Mon, 26 May 2025 23:41:44 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-3-irogers@google.com> Subject: [PATCH v1 02/11] perf session: Add an env pointer for the current perf_env From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Initialize to `&header.env`. This will later allow the env value to be changed. Signed-off-by: Ian Rogers --- tools/perf/util/session.c | 3 ++- tools/perf/util/session.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index d3888b78ed50..3af518243daf 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -155,6 +155,7 @@ struct perf_session *__perf_session__new(struct perf_da= ta *data, ordered_events__deliver_event, NULL); =20 perf_env__init(&session->header.env); + session->env =3D &session->header.env; if (data) { ret =3D perf_data__open(data); if (ret < 0) @@ -2746,5 +2747,5 @@ int perf_session__dsos_hit_all(struct perf_session *s= ession) =20 struct perf_env *perf_session__env(struct perf_session *session) { - return &session->header.env; + return session->env; } diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index e7f7464b838f..088868f1004a 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h @@ -45,6 +45,8 @@ struct perf_session { struct perf_header header; /** @machines: Machines within the session a host and 0 or more guests. */ struct machines machines; + /** @env: The perf_env being worked with, either from a data file or the = host's. */ + struct perf_env *env; /** @evlist: List of evsels/events of the session. */ struct evlist *evlist; /** @auxtrace: callbacks to allow AUX area data decoding. */ --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B9301FC7C5 for ; Tue, 27 May 2025 06:42:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328133; cv=none; b=pt769TVX0zetCjWjDQuYv2KFlYH+k2tzgm5OJTVgttkaWDlIhwi7cxZO0y9vKCEW3xqRwk8M6x8vepdUT17SrTeUpb5FZd27LxOK6ydYSbrfFp0tKKSTUzNTN1jQIT7fV0wbcAx+kqAXghA6Zw7yZ6BrVIl+BwxQokY3U5i32lk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328133; c=relaxed/simple; bh=ZDm31FfHy0h9d3TWNNNiAXdOHpXi5vYqUedTkakDLOM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uQ/2RjLuDyHNS6r/xsdSawXLuv4Pq0nof+9bXcVHh4jfkNMefO6uDmgKVnQB/qstlQdi2Yw9YqsJMtd3VLFQkXqWA8TG1fVKwRzu/fQjDl6mAJe2merOA1o3HZeBP54v0sn8yS8L1QwFSfKqCisb/mtq71DKF8kOvSteznNFOGs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=peH6R5yU; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="peH6R5yU" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-234042bdcc5so19762745ad.0 for ; Mon, 26 May 2025 23:42:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328130; x=1748932930; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=rDBpbpsYgqLkOcx3zNUIeqrEAl0fb06VtvHqHgTH7CQ=; b=peH6R5yU5zUKNAls1ZkYN9yuh/gsCIIvu5xaUKgnBoKDHx+sRONYvyU9wCOBryfaT7 gs9wrFdFv9cHGe5HvpSS8qPEF4JK00Bb3MSVLgbFeGSxNoEAf2n42NuBGvostWBo+eVe C5BRaoKXg3tsHPkvDn+5q7PO7L9WSmOEPZauA43W3e6tiWxZsf0MhKEHTXrVhNjOMyGS M6FlPF85XpDMF/fHzhA+x+e6D1bnxgC5ntK3434s/FFycZLB9eQInhWgCwU+EAItLzSu Ogru1Shdmg2L4SHgZHgdCVAb+wG2tF9zrPbXzV1PEEztif+YzI4mgUQIo+IRGsNKi5PS 7AnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328130; x=1748932930; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rDBpbpsYgqLkOcx3zNUIeqrEAl0fb06VtvHqHgTH7CQ=; b=hDaH4+p/F7pGXoYszZ/lbrPQFhgZcf3eehO3Ymgse2EDJt4aGykNYpnCgSX3uWxrH+ y+raw5/qt5uFPOAZON6xYywyVPCMkVrOYc93l0exW18kPGOQ8Tvzm599//axJuRQNnWR JNnUX+K4hJyHFCBEfxYHe3kLzrlZLMO0BTw3LPja6eBAb514W+aG7QkZaRQuDtGuywMe OhKm0bVD7ABm4KhEKwaq/Cc8TWJbQJatmfOP/AaqlvTnqhix//pE8Crfxxf61H3CdQco CLKdYLgqF/+/EcMMBsOQVN11kA5eeGclOsog9wAcNTBWxm5gf2c2Yalz6gJvPxFr36Tx tBCQ== X-Forwarded-Encrypted: i=1; AJvYcCWo+GCSa0HquvMmJwS93ajr+Qhshdx4iX8TRORAZc8RfWdg3gztaz83Vqg+SpEJfS4i9q9iE/BuLPS2YNE=@vger.kernel.org X-Gm-Message-State: AOJu0YwENftZzjSFb5iNbO5eLUw70vLJacLujS2OA7nCxFyv7rBcX/En xrHWA7FXTSFlrAUlLVkZ1DDQ2sgYY1kXd/OZiLnhN1bGhSxAeKmYIijsEsrf/amLPBpKyE9mhlD E3pNDuzLWjQ== X-Google-Smtp-Source: AGHT+IGMXvuiR1zerHk3aQo+rgRobZgtLILUogGw7uq9DS/VlrJI0H6VM+HSxBsgDTEpNX/0OCWvgMYdst7A X-Received: from pllk4.prod.google.com ([2002:a17:902:7604:b0:234:3f28:4851]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:32c8:b0:223:f9a4:3f99 with SMTP id d9443c01a7336-23414f9f230mr185352785ad.29.1748328130225; Mon, 26 May 2025 23:42:10 -0700 (PDT) Date: Mon, 26 May 2025 23:41:45 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-4-irogers@google.com> Subject: [PATCH v1 03/11] perf evlist: Change env variable to session From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The session holds a perf_env pointer env. In UI code container_of is used to turn the env to a session, but this assumes the session header's env is in use. Rather than a dubious container_of, hold the session in the evlist and derive the env from the session with evsel__env, perf_session__env, etc. Signed-off-by: Ian Rogers --- tools/perf/builtin-report.c | 6 +++++- tools/perf/builtin-script.c | 2 +- tools/perf/builtin-top.c | 2 +- tools/perf/tests/topology.c | 1 + tools/perf/ui/browser.h | 4 ++-- tools/perf/ui/browsers/header.c | 4 +--- tools/perf/ui/browsers/hists.c | 2 +- tools/perf/util/amd-sample-raw.c | 2 +- tools/perf/util/arm-spe.c | 2 +- tools/perf/util/evlist.h | 2 +- tools/perf/util/evsel.c | 12 +++++++++--- tools/perf/util/evsel.h | 1 + tools/perf/util/header.c | 2 +- tools/perf/util/s390-cpumsf.c | 2 +- tools/perf/util/sample-raw.c | 7 ++++--- tools/perf/util/sample-raw.h | 2 +- tools/perf/util/session.c | 4 +++- 17 files changed, 35 insertions(+), 22 deletions(-) diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 9238cb993015..9b7bf1dcaa1b 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -1264,6 +1264,8 @@ static int process_attr(const struct perf_tool *tool = __maybe_unused, union perf_event *event, struct evlist **pevlist) { + struct perf_session *session; + struct perf_env *env; u64 sample_type; int err; =20 @@ -1276,7 +1278,9 @@ static int process_attr(const struct perf_tool *tool = __maybe_unused, * on events sample_type. */ sample_type =3D evlist__combined_sample_type(*pevlist); - callchain_param_setup(sample_type, perf_env__arch((*pevlist)->env)); + session =3D (*pevlist)->session; + env =3D perf_session__env(session); + callchain_param_setup(sample_type, perf_env__arch(env)); return 0; } =20 diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 55b7c5ed8245..165668d67a6a 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -2533,7 +2533,7 @@ static int process_attr(const struct perf_tool *tool,= union perf_event *event, * on events sample_type. */ sample_type =3D evlist__combined_sample_type(evlist); - callchain_param_setup(sample_type, perf_env__arch((*pevlist)->env)); + callchain_param_setup(sample_type, perf_env__arch(perf_session__env(scr->= session))); =20 /* Enable fields for callchain entries */ if (symbol_conf.use_callchain && diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 0427dc027519..3c89568dd6d0 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -1654,7 +1654,6 @@ int cmd_top(int argc, const char **argv) "Couldn't read the cpuid for this machine: %s\n", str_error_r(errno, errbuf, sizeof(errbuf))); } - top.evlist->env =3D &perf_env; =20 argc =3D parse_options(argc, argv, options, top_usage, 0); if (argc) @@ -1827,6 +1826,7 @@ int cmd_top(int argc, const char **argv) top.session =3D NULL; goto out_delete_evlist; } + top.session->env =3D &perf_env; =20 if (!evlist__needs_bpf_sb_event(top.evlist)) top.record_opts.no_bpf_event =3D true; diff --git a/tools/perf/tests/topology.c b/tools/perf/tests/topology.c index bc7d10630dad..ec01150d208d 100644 --- a/tools/perf/tests/topology.c +++ b/tools/perf/tests/topology.c @@ -43,6 +43,7 @@ static int session_write_header(char *path) =20 session->evlist =3D evlist__new_default(); TEST_ASSERT_VAL("can't get evlist", session->evlist); + session->evlist->session =3D session; =20 perf_header__set_feat(&session->header, HEADER_CPU_TOPOLOGY); perf_header__set_feat(&session->header, HEADER_NRCPUS); diff --git a/tools/perf/ui/browser.h b/tools/perf/ui/browser.h index f59ad4f14d33..9d4404f9b87f 100644 --- a/tools/perf/ui/browser.h +++ b/tools/perf/ui/browser.h @@ -71,8 +71,8 @@ int ui_browser__help_window(struct ui_browser *browser, c= onst char *text); bool ui_browser__dialog_yesno(struct ui_browser *browser, const char *text= ); int ui_browser__input_window(const char *title, const char *text, char *in= put, const char *exit_msg, int delay_sec); -struct perf_env; -int tui__header_window(struct perf_env *env); +struct perf_session; +int tui__header_window(struct perf_session *session); =20 void ui_browser__argv_seek(struct ui_browser *browser, off_t offset, int w= hence); unsigned int ui_browser__argv_refresh(struct ui_browser *browser); diff --git a/tools/perf/ui/browsers/header.c b/tools/perf/ui/browsers/heade= r.c index 2213b4661600..5b5ca32e3eef 100644 --- a/tools/perf/ui/browsers/header.c +++ b/tools/perf/ui/browsers/header.c @@ -93,16 +93,14 @@ static int ui__list_menu(int argc, char * const argv[]) return list_menu__run(&menu); } =20 -int tui__header_window(struct perf_env *env) +int tui__header_window(struct perf_session *session) { int i, argc =3D 0; char **argv; - struct perf_session *session; char *ptr, *pos; size_t size; FILE *fp =3D open_memstream(&ptr, &size); =20 - session =3D container_of(env, struct perf_session, header.env); perf_header__fprintf_info(session, fp, true); fclose(fp); =20 diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index d26b925e3d7f..d9d3fb44477a 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c @@ -3233,7 +3233,7 @@ static int evsel__hists_browse(struct evsel *evsel, i= nt nr_events, const char *h case 'i': /* env->arch is NULL for live-mode (i.e. perf top) */ if (env->arch) - tui__header_window(env); + tui__header_window(evsel__session(evsel)); continue; case 'F': symbol_conf.filter_relative ^=3D 1; diff --git a/tools/perf/util/amd-sample-raw.c b/tools/perf/util/amd-sample-= raw.c index 022c9eb39509..ac24b4cb4a91 100644 --- a/tools/perf/util/amd-sample-raw.c +++ b/tools/perf/util/amd-sample-raw.c @@ -354,7 +354,7 @@ static void parse_cpuid(struct perf_env *env) */ bool evlist__has_amd_ibs(struct evlist *evlist) { - struct perf_env *env =3D evlist->env; + struct perf_env *env =3D perf_session__env(evlist->session); int ret, nr_pmu_mappings =3D perf_env__nr_pmu_mappings(env); const char *pmu_mapping =3D perf_env__pmu_mappings(env); char name[sizeof("ibs_fetch")]; diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c index 2a9775649cc2..2d36c062e71d 100644 --- a/tools/perf/util/arm-spe.c +++ b/tools/perf/util/arm-spe.c @@ -760,7 +760,7 @@ static bool arm_spe__synth_ds(struct arm_spe_queue *spe= q, const char *cpuid; =20 pr_warning_once("Old SPE metadata, re-record to improve decode accuracy\= n"); - cpuid =3D perf_env__cpuid(spe->session->evlist->env); + cpuid =3D perf_env__cpuid(perf_session__env(spe->session)); midr =3D strtol(cpuid, NULL, 16); } else { /* CPU ID is -1 for per-thread mode */ diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 85859708393e..121879aef60f 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -70,7 +70,7 @@ struct evlist { struct mmap *overwrite_mmap; struct evsel *selected; struct events_stats stats; - struct perf_env *env; + struct perf_session *session; void (*trace_event_sample_raw)(struct evlist *evlist, union perf_event *event, struct perf_sample *sample); diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index d55482f094bf..24c93ea5ba0a 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -48,6 +48,7 @@ #include "record.h" #include "debug.h" #include "trace-event.h" +#include "session.h" #include "stat.h" #include "string2.h" #include "memswap.h" @@ -3839,11 +3840,16 @@ int evsel__open_strerror(struct evsel *evsel, struc= t target *target, err, str_error_r(err, sbuf, sizeof(sbuf)), evsel__name(evsel)); } =20 +struct perf_session *evsel__session(struct evsel *evsel) +{ + return evsel && evsel->evlist ? evsel->evlist->session : NULL; +} + struct perf_env *evsel__env(struct evsel *evsel) { - if (evsel && evsel->evlist && evsel->evlist->env) - return evsel->evlist->env; - return &perf_env; + struct perf_session *session =3D evsel__session(evsel); + + return session ? perf_session__env(session) : &perf_env; } =20 static int store_evsel_ids(struct evsel *evsel, struct evlist *evlist) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 6dbc9690e0c9..847acf9f6795 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -537,6 +537,7 @@ static inline bool evsel__is_dummy_event(struct evsel *= evsel) (evsel->core.attr.config =3D=3D PERF_COUNT_SW_DUMMY); } =20 +struct perf_session *evsel__session(struct evsel *evsel); struct perf_env *evsel__env(struct evsel *evsel); =20 int evsel__store_ids(struct evsel *evsel, struct evlist *evlist); diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index e3cdc3b7b4ab..c3621f718cb3 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -4228,7 +4228,7 @@ int perf_session__read_header(struct perf_session *se= ssion) if (session->evlist =3D=3D NULL) return -ENOMEM; =20 - session->evlist->env =3D &header->env; + session->evlist->session =3D session; session->machines.host.env =3D &header->env; =20 /* diff --git a/tools/perf/util/s390-cpumsf.c b/tools/perf/util/s390-cpumsf.c index 0ce52f0280b8..c17dbe232c54 100644 --- a/tools/perf/util/s390-cpumsf.c +++ b/tools/perf/util/s390-cpumsf.c @@ -1142,7 +1142,7 @@ int s390_cpumsf_process_auxtrace_info(union perf_even= t *event, sf->machine =3D &session->machines.host; /* No kvm support */ sf->auxtrace_type =3D auxtrace_info->type; sf->pmu_type =3D PERF_TYPE_RAW; - sf->machine_type =3D s390_cpumsf_get_type(session->evlist->env->cpuid); + sf->machine_type =3D s390_cpumsf_get_type(perf_session__env(session)->cpu= id); =20 sf->auxtrace.process_event =3D s390_cpumsf_process_event; sf->auxtrace.process_auxtrace_event =3D s390_cpumsf_process_auxtrace_even= t; diff --git a/tools/perf/util/sample-raw.c b/tools/perf/util/sample-raw.c index f3f6bd9d290e..bcf442574d6e 100644 --- a/tools/perf/util/sample-raw.c +++ b/tools/perf/util/sample-raw.c @@ -6,15 +6,16 @@ #include "env.h" #include "header.h" #include "sample-raw.h" +#include "session.h" =20 /* * Check platform the perf data file was created on and perform platform * specific interpretation. */ -void evlist__init_trace_event_sample_raw(struct evlist *evlist) +void evlist__init_trace_event_sample_raw(struct evlist *evlist, struct per= f_env *env) { - const char *arch_pf =3D perf_env__arch(evlist->env); - const char *cpuid =3D perf_env__cpuid(evlist->env); + const char *arch_pf =3D perf_env__arch(env); + const char *cpuid =3D perf_env__cpuid(env); =20 if (arch_pf && !strcmp("s390", arch_pf)) evlist->trace_event_sample_raw =3D evlist__s390_sample_raw; diff --git a/tools/perf/util/sample-raw.h b/tools/perf/util/sample-raw.h index ea01c5811503..896e9a87e373 100644 --- a/tools/perf/util/sample-raw.h +++ b/tools/perf/util/sample-raw.h @@ -11,5 +11,5 @@ void evlist__s390_sample_raw(struct evlist *evlist, union= perf_event *event, bool evlist__has_amd_ibs(struct evlist *evlist); void evlist__amd_sample_raw(struct evlist *evlist, union perf_event *event, struct perf_sample *sample); -void evlist__init_trace_event_sample_raw(struct evlist *evlist); +void evlist__init_trace_event_sample_raw(struct evlist *evlist, struct per= f_env *env); #endif /* __PERF_EVLIST_H */ diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 3af518243daf..beb74d9fcc07 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -177,7 +177,7 @@ struct perf_session *__perf_session__new(struct perf_da= ta *data, perf_session__set_comm_exec(session); } =20 - evlist__init_trace_event_sample_raw(session->evlist); + evlist__init_trace_event_sample_raw(session->evlist, &session->header.e= nv); =20 /* Open the directory data. */ if (data->is_dir) { @@ -193,6 +193,8 @@ struct perf_session *__perf_session__new(struct perf_da= ta *data, } else { session->machines.host.env =3D &perf_env; } + if (session->evlist) + session->evlist->session =3D session; =20 session->machines.host.single_address_space =3D perf_env__single_address_space(session->machines.host.env); --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6FF951FC104 for ; Tue, 27 May 2025 06:42:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328135; cv=none; b=ja9uHiyC9KxCUlqM8C7pVhQycTqNA8jKonk3Nu/MqeboM7dWpQnxeeVeKavAtVE3xz7S3lcTl9GNgXfuCyLT3STS9n6Z2WIjsz1qd56AZsYFEMLxA1yFVmoe1uVOELaKKDR4EFWqSU1TB5N0w/42oWwNh5leKl/NVWnlScmOcz0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328135; c=relaxed/simple; bh=ryw2eoYjACTIGQRMkd4hz0ET0kZ3Vh9p4lk/pjBkwTY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=G8khEE+sk63DU676XwTvLju1rUcuh7IAEvC8iKDgFPkagv0iNj5UOer5DnbmmeHi4XwzadyI350Ze34I49uLatsG/RCvrSQdtsfwQ+MYZw7LEMQhuDPTan3uXlXppAvJgLDROnH/Y/P4WBTKdpan424qxvNyFaSPHZc7MwB2ZCQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=rWMmoZ9a; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="rWMmoZ9a" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-22e7e097ef7so21605035ad.2 for ; Mon, 26 May 2025 23:42:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328133; x=1748932933; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=MUnLtN4WGSVmNn4Wi8d1LDZQIGLwuZhZKvVW1jdBqts=; b=rWMmoZ9aZtc/ywiv4F2meX6p+UgaCJiKmxp/ui8So87UMxGGl21gY3wcbv2C3ZwQez z+xDd0ccpZyQXUwSWMexvMMvZokHVQIkw0DZQPr4ffx1BCxzNcH9L20In7A91U/7t8Db iC07U1FPylVyiLJeT3TBqtasZpL3ezcy8xCVF7HC9FcOGXgSv+WyTmtQUR9ElcHLcdZR lSrGfpfnsfeyA94MgBGhLP9pX7nuVjzVdxKluZOl6HSu6XcTiF4g/2csqm34aURiw7L5 64uMzvLjum1LfE3B9eodUgOdwnmBPwJAwE/G/E4FlyYusmzyZKmz1SkMLBiU+KYNM+3d vwbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328133; x=1748932933; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MUnLtN4WGSVmNn4Wi8d1LDZQIGLwuZhZKvVW1jdBqts=; b=CBiTZzlfgtz23db0bkVV0x8aKeIHJ6ne8JrQjzv/+S/+uwcVHFhd+qYSy0XdNu4kY9 W+iexCqZ8A2DnH8W2m2+vcuoP9BcdAbUp6HFz3V5nT5yqyiRUcAnQMQUqnzPlwKGhWQQ xqA3eaM9OrENMXvE2GaX3ROJSdkGjIuP4xzQLdktCDwlP4JXDZz/fmT6gn8MdDDR+JXc rAZWU7AG+OFKUH2F8HOPqT6EX3fbDuPI/2pDp7ZtF6Q4OVQOgABmFu37TLao+DqQANkV 09kTPpbnCyIQX0j5z/XKOApHbeta5sk1h/Zk5/BX3ebYczdLVv4DYIXEEvvlbrUk3mG2 h3ug== X-Forwarded-Encrypted: i=1; AJvYcCU8IJvwfr3fzMoEucT9nn29HDwIux5yMtAfau8k69PhGCTvlvjBckYWu6cSI/svuaafnIxnfmqGUlDOFPI=@vger.kernel.org X-Gm-Message-State: AOJu0YwuSdbBIciDgXPOSEb3dzpIfmnYfm6wmHiG91kM7f+XEeE2MxHR OYEz814KYEWGSOgvnI6d3XQIdu/IIWqTp5DD0JZwv0NnZpEf7nKtoNYROK9Zy9WiVeVzuA3Z3/t ZucOW10+jVg== X-Google-Smtp-Source: AGHT+IGHKk5a7AWx1PjC3QXyGO8PNB5ZFjuWpmgN79JUKqYAxatNVA8sujVhm0NZ0Vz4B0jASoO7rX0EVWw9 X-Received: from plmt11.prod.google.com ([2002:a17:903:3d4b:b0:234:659b:127c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:41cc:b0:22c:3294:f038 with SMTP id d9443c01a7336-23414f5cda8mr160849955ad.18.1748328132578; Mon, 26 May 2025 23:42:12 -0700 (PDT) Date: Mon, 26 May 2025 23:41:46 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-5-irogers@google.com> Subject: [PATCH v1 04/11] perf header: Clean up use of perf_env From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Always use the perf_env from the feat_fd's perf_header. Cache the value on entry to a function in `env` and use `env->` consistently in the code. Ensure the header is initialized for use in perf_session__do_write_header. Signed-off-by: Ian Rogers --- tools/perf/util/header.c | 178 ++++++++++++++++++++++----------------- 1 file changed, 100 insertions(+), 78 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index c3621f718cb3..2e9a05e10ed5 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -557,6 +557,7 @@ static int write_event_desc(struct feat_fd *ff, static int write_cmdline(struct feat_fd *ff, struct evlist *evlist __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; char pbuf[MAXPATHLEN], *buf; int i, ret, n; =20 @@ -564,7 +565,7 @@ static int write_cmdline(struct feat_fd *ff, buf =3D perf_exe(pbuf, MAXPATHLEN); =20 /* account for binary path */ - n =3D perf_env.nr_cmdline + 1; + n =3D env->nr_cmdline + 1; =20 ret =3D do_write(ff, &n, sizeof(n)); if (ret < 0) @@ -574,8 +575,8 @@ static int write_cmdline(struct feat_fd *ff, if (ret < 0) return ret; =20 - for (i =3D 0 ; i < perf_env.nr_cmdline; i++) { - ret =3D do_write_string(ff, perf_env.cmdline_argv[i]); + for (i =3D 0 ; i < env->nr_cmdline; i++) { + ret =3D do_write_string(ff, env->cmdline_argv[i]); if (ret < 0) return ret; } @@ -586,6 +587,7 @@ static int write_cmdline(struct feat_fd *ff, static int write_cpu_topology(struct feat_fd *ff, struct evlist *evlist __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; struct cpu_topology *tp; u32 i; int ret, j; @@ -613,17 +615,17 @@ static int write_cpu_topology(struct feat_fd *ff, break; } =20 - ret =3D perf_env__read_cpu_topology_map(&perf_env); + ret =3D perf_env__read_cpu_topology_map(env); if (ret < 0) goto done; =20 - for (j =3D 0; j < perf_env.nr_cpus_avail; j++) { - ret =3D do_write(ff, &perf_env.cpu[j].core_id, - sizeof(perf_env.cpu[j].core_id)); + for (j =3D 0; j < env->nr_cpus_avail; j++) { + ret =3D do_write(ff, &env->cpu[j].core_id, + sizeof(env->cpu[j].core_id)); if (ret < 0) return ret; - ret =3D do_write(ff, &perf_env.cpu[j].socket_id, - sizeof(perf_env.cpu[j].socket_id)); + ret =3D do_write(ff, &env->cpu[j].socket_id, + sizeof(env->cpu[j].socket_id)); if (ret < 0) return ret; } @@ -641,9 +643,9 @@ static int write_cpu_topology(struct feat_fd *ff, goto done; } =20 - for (j =3D 0; j < perf_env.nr_cpus_avail; j++) { - ret =3D do_write(ff, &perf_env.cpu[j].die_id, - sizeof(perf_env.cpu[j].die_id)); + for (j =3D 0; j < env->nr_cpus_avail; j++) { + ret =3D do_write(ff, &env->cpu[j].die_id, + sizeof(env->cpu[j].die_id)); if (ret < 0) return ret; } @@ -2111,17 +2113,18 @@ static void print_cpu_pmu_caps(struct feat_fd *ff, = FILE *fp) =20 static void print_pmu_caps(struct feat_fd *ff, FILE *fp) { + struct perf_env *env =3D &ff->ph->env; struct pmu_caps *pmu_caps; =20 - for (int i =3D 0; i < ff->ph->env.nr_pmus_with_caps; i++) { - pmu_caps =3D &ff->ph->env.pmu_caps[i]; + for (int i =3D 0; i < env->nr_pmus_with_caps; i++) { + pmu_caps =3D &env->pmu_caps[i]; __print_pmu_caps(fp, pmu_caps->nr_caps, pmu_caps->caps, pmu_caps->pmu_name); } =20 - if (strcmp(perf_env__arch(&ff->ph->env), "x86") =3D=3D 0 && - perf_env__has_pmu_mapping(&ff->ph->env, "ibs_op")) { - char *max_precise =3D perf_env__find_pmu_cap(&ff->ph->env, "cpu", "max_p= recise"); + if (strcmp(perf_env__arch(env), "x86") =3D=3D 0 && + perf_env__has_pmu_mapping(env, "ibs_op")) { + char *max_precise =3D perf_env__find_pmu_cap(env, "cpu", "max_precise"); =20 if (max_precise !=3D NULL && atoi(max_precise) =3D=3D 0) fprintf(fp, "# AMD systems uses ibs_op// PMU for some precise events, e= .g.: cycles:p, see the 'perf list' man page for further details.\n"); @@ -2130,18 +2133,19 @@ static void print_pmu_caps(struct feat_fd *ff, FILE= *fp) =20 static void print_pmu_mappings(struct feat_fd *ff, FILE *fp) { + struct perf_env *env =3D &ff->ph->env; const char *delimiter =3D "# pmu mappings: "; char *str, *tmp; u32 pmu_num; u32 type; =20 - pmu_num =3D ff->ph->env.nr_pmu_mappings; + pmu_num =3D env->nr_pmu_mappings; if (!pmu_num) { fprintf(fp, "# pmu mappings: not available\n"); return; } =20 - str =3D ff->ph->env.pmu_mappings; + str =3D env->pmu_mappings; =20 while (pmu_num) { type =3D strtoul(str, &tmp, 0); @@ -2223,17 +2227,18 @@ static void memory_node__fprintf(struct memory_node= *n, =20 static void print_mem_topology(struct feat_fd *ff, FILE *fp) { + struct perf_env *env =3D &ff->ph->env; struct memory_node *nodes; int i, nr; =20 - nodes =3D ff->ph->env.memory_nodes; - nr =3D ff->ph->env.nr_memory_nodes; + nodes =3D env->memory_nodes; + nr =3D env->nr_memory_nodes; =20 fprintf(fp, "# memory nodes (nr %d, block size 0x%llx):\n", - nr, ff->ph->env.memory_bsize); + nr, env->memory_bsize); =20 for (i =3D 0; i < nr; i++) { - memory_node__fprintf(&nodes[i], ff->ph->env.memory_bsize, fp); + memory_node__fprintf(&nodes[i], env->memory_bsize, fp); } } =20 @@ -2431,6 +2436,7 @@ static int process_build_id(struct feat_fd *ff, void = *data __maybe_unused) =20 static int process_nrcpus(struct feat_fd *ff, void *data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; int ret; u32 nr_cpus_avail, nr_cpus_online; =20 @@ -2441,20 +2447,21 @@ static int process_nrcpus(struct feat_fd *ff, void = *data __maybe_unused) ret =3D do_read_u32(ff, &nr_cpus_online); if (ret) return ret; - ff->ph->env.nr_cpus_avail =3D (int)nr_cpus_avail; - ff->ph->env.nr_cpus_online =3D (int)nr_cpus_online; + env->nr_cpus_avail =3D (int)nr_cpus_avail; + env->nr_cpus_online =3D (int)nr_cpus_online; return 0; } =20 static int process_total_mem(struct feat_fd *ff, void *data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; u64 total_mem; int ret; =20 ret =3D do_read_u64(ff, &total_mem); if (ret) return -1; - ff->ph->env.total_mem =3D (unsigned long long)total_mem; + env->total_mem =3D (unsigned long long)total_mem; return 0; } =20 @@ -2515,13 +2522,14 @@ process_event_desc(struct feat_fd *ff, void *data _= _maybe_unused) =20 static int process_cmdline(struct feat_fd *ff, void *data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; char *str, *cmdline =3D NULL, **argv =3D NULL; u32 nr, i, len =3D 0; =20 if (do_read_u32(ff, &nr)) return -1; =20 - ff->ph->env.nr_cmdline =3D nr; + env->nr_cmdline =3D nr; =20 cmdline =3D zalloc(ff->size + nr + 1); if (!cmdline) @@ -2541,8 +2549,8 @@ static int process_cmdline(struct feat_fd *ff, void *= data __maybe_unused) len +=3D strlen(str) + 1; free(str); } - ff->ph->env.cmdline =3D cmdline; - ff->ph->env.cmdline_argv =3D (const char **) argv; + env->cmdline =3D cmdline; + env->cmdline_argv =3D (const char **) argv; return 0; =20 error: @@ -2556,19 +2564,19 @@ static int process_cpu_topology(struct feat_fd *ff,= void *data __maybe_unused) u32 nr, i; char *str =3D NULL; struct strbuf sb; - int cpu_nr =3D ff->ph->env.nr_cpus_avail; + struct perf_env *env =3D &ff->ph->env; + int cpu_nr =3D env->nr_cpus_avail; u64 size =3D 0; - struct perf_header *ph =3D ff->ph; bool do_core_id_test =3D true; =20 - ph->env.cpu =3D calloc(cpu_nr, sizeof(*ph->env.cpu)); - if (!ph->env.cpu) + env->cpu =3D calloc(cpu_nr, sizeof(*env->cpu)); + if (!env->cpu) return -1; =20 if (do_read_u32(ff, &nr)) goto free_cpu; =20 - ph->env.nr_sibling_cores =3D nr; + env->nr_sibling_cores =3D nr; size +=3D sizeof(u32); if (strbuf_init(&sb, 128) < 0) goto free_cpu; @@ -2584,12 +2592,12 @@ static int process_cpu_topology(struct feat_fd *ff,= void *data __maybe_unused) size +=3D string_size(str); zfree(&str); } - ph->env.sibling_cores =3D strbuf_detach(&sb, NULL); + env->sibling_cores =3D strbuf_detach(&sb, NULL); =20 if (do_read_u32(ff, &nr)) return -1; =20 - ph->env.nr_sibling_threads =3D nr; + env->nr_sibling_threads =3D nr; size +=3D sizeof(u32); =20 for (i =3D 0; i < nr; i++) { @@ -2603,14 +2611,14 @@ static int process_cpu_topology(struct feat_fd *ff,= void *data __maybe_unused) size +=3D string_size(str); zfree(&str); } - ph->env.sibling_threads =3D strbuf_detach(&sb, NULL); + env->sibling_threads =3D strbuf_detach(&sb, NULL); =20 /* * The header may be from old perf, * which doesn't include core id and socket id information. */ if (ff->size <=3D size) { - zfree(&ph->env.cpu); + zfree(&env->cpu); return 0; } =20 @@ -2619,15 +2627,15 @@ static int process_cpu_topology(struct feat_fd *ff,= void *data __maybe_unused) * This depends on the configuration. * AArch64 is the same. */ - if (ph->env.arch && (!strncmp(ph->env.arch, "s390", 4) - || !strncmp(ph->env.arch, "aarch64", 7))) + if (env->arch && (!strncmp(env->arch, "s390", 4) + || !strncmp(env->arch, "aarch64", 7))) do_core_id_test =3D false; =20 for (i =3D 0; i < (u32)cpu_nr; i++) { if (do_read_u32(ff, &nr)) goto free_cpu; =20 - ph->env.cpu[i].core_id =3D nr; + env->cpu[i].core_id =3D nr; size +=3D sizeof(u32); =20 if (do_read_u32(ff, &nr)) @@ -2639,7 +2647,7 @@ static int process_cpu_topology(struct feat_fd *ff, v= oid *data __maybe_unused) goto free_cpu; } =20 - ph->env.cpu[i].socket_id =3D nr; + env->cpu[i].socket_id =3D nr; size +=3D sizeof(u32); } =20 @@ -2653,7 +2661,7 @@ static int process_cpu_topology(struct feat_fd *ff, v= oid *data __maybe_unused) if (do_read_u32(ff, &nr)) return -1; =20 - ph->env.nr_sibling_dies =3D nr; + env->nr_sibling_dies =3D nr; size +=3D sizeof(u32); =20 for (i =3D 0; i < nr; i++) { @@ -2667,13 +2675,13 @@ static int process_cpu_topology(struct feat_fd *ff,= void *data __maybe_unused) size +=3D string_size(str); zfree(&str); } - ph->env.sibling_dies =3D strbuf_detach(&sb, NULL); + env->sibling_dies =3D strbuf_detach(&sb, NULL); =20 for (i =3D 0; i < (u32)cpu_nr; i++) { if (do_read_u32(ff, &nr)) goto free_cpu; =20 - ph->env.cpu[i].die_id =3D nr; + env->cpu[i].die_id =3D nr; } =20 return 0; @@ -2682,12 +2690,13 @@ static int process_cpu_topology(struct feat_fd *ff,= void *data __maybe_unused) strbuf_release(&sb); zfree(&str); free_cpu: - zfree(&ph->env.cpu); + zfree(&env->cpu); return -1; } =20 static int process_numa_topology(struct feat_fd *ff, void *data __maybe_un= used) { + struct perf_env *env =3D &ff->ph->env; struct numa_node *nodes, *n; u32 nr, i; char *str; @@ -2722,8 +2731,8 @@ static int process_numa_topology(struct feat_fd *ff, = void *data __maybe_unused) if (!n->map) goto error; } - ff->ph->env.nr_numa_nodes =3D nr; - ff->ph->env.numa_nodes =3D nodes; + env->nr_numa_nodes =3D nr; + env->numa_nodes =3D nodes; return 0; =20 error: @@ -2733,6 +2742,7 @@ static int process_numa_topology(struct feat_fd *ff, = void *data __maybe_unused) =20 static int process_pmu_mappings(struct feat_fd *ff, void *data __maybe_unu= sed) { + struct perf_env *env =3D &ff->ph->env; char *name; u32 pmu_num; u32 type; @@ -2746,7 +2756,7 @@ static int process_pmu_mappings(struct feat_fd *ff, v= oid *data __maybe_unused) return 0; } =20 - ff->ph->env.nr_pmu_mappings =3D pmu_num; + env->nr_pmu_mappings =3D pmu_num; if (strbuf_init(&sb, 128) < 0) return -1; =20 @@ -2765,14 +2775,14 @@ static int process_pmu_mappings(struct feat_fd *ff,= void *data __maybe_unused) goto error; =20 if (!strcmp(name, "msr")) - ff->ph->env.msr_pmu_type =3D type; + env->msr_pmu_type =3D type; =20 free(name); pmu_num--; } /* AMD may set it by evlist__has_amd_ibs() from perf_session__new() */ - free(ff->ph->env.pmu_mappings); - ff->ph->env.pmu_mappings =3D strbuf_detach(&sb, NULL); + free(env->pmu_mappings); + env->pmu_mappings =3D strbuf_detach(&sb, NULL); return 0; =20 error: @@ -2782,6 +2792,7 @@ static int process_pmu_mappings(struct feat_fd *ff, v= oid *data __maybe_unused) =20 static int process_group_desc(struct feat_fd *ff, void *data __maybe_unuse= d) { + struct perf_env *env =3D &ff->ph->env; size_t ret =3D -1; u32 i, nr, nr_groups; struct perf_session *session; @@ -2795,7 +2806,7 @@ static int process_group_desc(struct feat_fd *ff, voi= d *data __maybe_unused) if (do_read_u32(ff, &nr_groups)) return -1; =20 - ff->ph->env.nr_groups =3D nr_groups; + env->nr_groups =3D nr_groups; if (!nr_groups) { pr_debug("group desc not available\n"); return 0; @@ -2879,6 +2890,7 @@ static int process_auxtrace(struct feat_fd *ff, void = *data __maybe_unused) =20 static int process_cache(struct feat_fd *ff, void *data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; struct cpu_cache_level *caches; u32 cnt, i, version; =20 @@ -2919,8 +2931,8 @@ static int process_cache(struct feat_fd *ff, void *da= ta __maybe_unused) #undef _R } =20 - ff->ph->env.caches =3D caches; - ff->ph->env.caches_cnt =3D cnt; + env->caches =3D caches; + env->caches_cnt =3D cnt; return 0; out_free_caches: for (i =3D 0; i < cnt; i++) { @@ -2956,6 +2968,7 @@ static int process_sample_time(struct feat_fd *ff, vo= id *data __maybe_unused) static int process_mem_topology(struct feat_fd *ff, void *data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; struct memory_node *nodes; u64 version, i, nr, bsize; int ret =3D -1; @@ -2994,9 +3007,9 @@ static int process_mem_topology(struct feat_fd *ff, nodes[i] =3D n; } =20 - ff->ph->env.memory_bsize =3D bsize; - ff->ph->env.memory_nodes =3D nodes; - ff->ph->env.nr_memory_nodes =3D nr; + env->memory_bsize =3D bsize; + env->memory_nodes =3D nodes; + env->nr_memory_nodes =3D nr; ret =3D 0; =20 out: @@ -3008,7 +3021,9 @@ static int process_mem_topology(struct feat_fd *ff, static int process_clockid(struct feat_fd *ff, void *data __maybe_unused) { - if (do_read_u64(ff, &ff->ph->env.clock.clockid_res_ns)) + struct perf_env *env =3D &ff->ph->env; + + if (do_read_u64(ff, &env->clock.clockid_res_ns)) return -1; =20 return 0; @@ -3017,6 +3032,7 @@ static int process_clockid(struct feat_fd *ff, static int process_clock_data(struct feat_fd *ff, void *_data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; u32 data32; u64 data64; =20 @@ -3031,26 +3047,27 @@ static int process_clock_data(struct feat_fd *ff, if (do_read_u32(ff, &data32)) return -1; =20 - ff->ph->env.clock.clockid =3D data32; + env->clock.clockid =3D data32; =20 /* TOD ref time */ if (do_read_u64(ff, &data64)) return -1; =20 - ff->ph->env.clock.tod_ns =3D data64; + env->clock.tod_ns =3D data64; =20 /* clockid ref time */ if (do_read_u64(ff, &data64)) return -1; =20 - ff->ph->env.clock.clockid_ns =3D data64; - ff->ph->env.clock.enabled =3D true; + env->clock.clockid_ns =3D data64; + env->clock.enabled =3D true; return 0; } =20 static int process_hybrid_topology(struct feat_fd *ff, void *data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; struct hybrid_node *nodes, *n; u32 nr, i; =20 @@ -3074,8 +3091,8 @@ static int process_hybrid_topology(struct feat_fd *ff, goto error; } =20 - ff->ph->env.nr_hybrid_nodes =3D nr; - ff->ph->env.hybrid_nodes =3D nodes; + env->nr_hybrid_nodes =3D nr; + env->hybrid_nodes =3D nodes; return 0; =20 error: @@ -3227,19 +3244,21 @@ static int process_bpf_btf(struct feat_fd *ff, void= *data __maybe_unused) static int process_compressed(struct feat_fd *ff, void *data __maybe_unused) { - if (do_read_u32(ff, &(ff->ph->env.comp_ver))) + struct perf_env *env =3D &ff->ph->env; + + if (do_read_u32(ff, &(env->comp_ver))) return -1; =20 - if (do_read_u32(ff, &(ff->ph->env.comp_type))) + if (do_read_u32(ff, &(env->comp_type))) return -1; =20 - if (do_read_u32(ff, &(ff->ph->env.comp_level))) + if (do_read_u32(ff, &(env->comp_level))) return -1; =20 - if (do_read_u32(ff, &(ff->ph->env.comp_ratio))) + if (do_read_u32(ff, &(env->comp_ratio))) return -1; =20 - if (do_read_u32(ff, &(ff->ph->env.comp_mmap_len))) + if (do_read_u32(ff, &(env->comp_mmap_len))) return -1; =20 return 0; @@ -3311,19 +3330,21 @@ static int __process_pmu_caps(struct feat_fd *ff, i= nt *nr_caps, static int process_cpu_pmu_caps(struct feat_fd *ff, void *data __maybe_unused) { - int ret =3D __process_pmu_caps(ff, &ff->ph->env.nr_cpu_pmu_caps, - &ff->ph->env.cpu_pmu_caps, - &ff->ph->env.max_branches, - &ff->ph->env.br_cntr_nr, - &ff->ph->env.br_cntr_width); + struct perf_env *env =3D &ff->ph->env; + int ret =3D __process_pmu_caps(ff, &env->nr_cpu_pmu_caps, + &env->cpu_pmu_caps, + &env->max_branches, + &env->br_cntr_nr, + &env->br_cntr_width); =20 - if (!ret && !ff->ph->env.cpu_pmu_caps) + if (!ret && !env->cpu_pmu_caps) pr_debug("cpu pmu capabilities not available\n"); return ret; } =20 static int process_pmu_caps(struct feat_fd *ff, void *data __maybe_unused) { + struct perf_env *env =3D &ff->ph->env; struct pmu_caps *pmu_caps; u32 nr_pmu, i; int ret; @@ -3361,8 +3382,8 @@ static int process_pmu_caps(struct feat_fd *ff, void = *data __maybe_unused) } } =20 - ff->ph->env.nr_pmus_with_caps =3D nr_pmu; - ff->ph->env.pmu_caps =3D pmu_caps; + env->nr_pmus_with_caps =3D nr_pmu; + env->pmu_caps =3D pmu_caps; return 0; =20 err: @@ -3660,6 +3681,7 @@ static int perf_session__do_write_header(struct perf_= session *session, struct perf_header *header =3D &session->header; struct evsel *evsel; struct feat_fd ff =3D { + .ph =3D header, .fd =3D fd, }; u64 attr_offset =3D sizeof(f_header), attr_size =3D 0; --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9CFC81FFC77 for ; Tue, 27 May 2025 06:42:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328137; cv=none; b=sI6Pr+t2On9w/xgj5GwvC0eLyBLzD9X2SuqWRc/fjc5Xck+QkFW1rsjLvXhJhE3T8n0fSy7n/OcHVSjCF+5yAc+JkYAoaRq5N1HLFhaxG//5JjJvX8zECvYBsJoKIqkMwx/IXWhQShY318W0rC8p24Q7bEfakwD1xbk1qN/95Gg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328137; c=relaxed/simple; bh=f+bQ3Jv5bB9u7ogojqWPKsGXPSw5u7vrWgbYZOKwxlY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=BOERh0uUxWdeZLs/wb7w5NeecPshL5DPKIR9x6ZPQxDstC1P6pGGr9m2krrQckISiwtO1q9PlPVHvWMlEN+V5f2onNOlpEUg1qhcNqOYGCxyh+HrgRNkxFlo6GjWPrx0F4ghQGaMMa+HaWLh/dVl31kInHZqAasXNpwOARjpLxQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=2eLWwFFh; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="2eLWwFFh" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-23228c09e14so41767225ad.1 for ; Mon, 26 May 2025 23:42:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328135; x=1748932935; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=osa5wtVgN75Qz2+/E2ShchmseliLYV0sbPvRf6suVCQ=; b=2eLWwFFhdTBn45vFEU09Fc+yNBhRtfrjC9sP9B89nBp65td4hMgfvY3bIrGl/9mwY7 UspsF/x49NJ93FjAm9iOMulQn6dsujprqzJKiMSGicvILSQD1EWk0c2KyyL+ZetBhlx8 OsJigHMBLtRE0+lO8pqJbxKKQLmwHKPSCb48EmxGHQ2964rIbvt60Yb3B0lX50LS9nYo gdc3ZabxoaamPHYHJRWB3QlXLpAIUcl/XKpOagNqDbO1V0gThhHe2DFwZk81h571tT4r Hg97UrzzWWdJDtLTpRztcy0AQIL+Xemd9N4EZm0qw41U/xmdklJ0a2CcsjjTfaJIUjQL vbWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328135; x=1748932935; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=osa5wtVgN75Qz2+/E2ShchmseliLYV0sbPvRf6suVCQ=; b=usWQhDW6h3tGMBqRDHRjNK+PzQAbwVtVQKas1Gz3gU5eiLxix/I9GLSMRjvnjnL1JS QoJzrX5Wov4k3SAAc0LikAzChIJukhX4vMbv4bxTelLxy8+5YOFbGWPGQmFm/VOd/YY+ fUGegwL2ZIpgp0o3mqWhJWKDEQ2AhhbsameTWL3BpH+E9GMIxbDu7C0re+RC9Rn6YGl8 zcYxnx9L17entUxopsKzU1ESYt5DNcLMCAbr6cJmHKYloPiB6rtJqAUD5X3R3WtI4th3 hxkoNoYcMPUsbexw2zyAfHGBd8OLBB5NVq9eKJt03rgG7Rbk6AvILzw/hAZiHbmWmV3C emvg== X-Forwarded-Encrypted: i=1; AJvYcCWCF8usCoCHpYw8M5dtQcB//nW10tOrKMvDbvmTv8lBjqkjIb26V0DbAhuy/tDE2wvES+Kt4gEBjRy+Utg=@vger.kernel.org X-Gm-Message-State: AOJu0YyOMwtT63+HqLKbVgqH+cI1THvQJFqyy6Cm0znb31zhmQhKJJv7 lNvlQVqd4Vw6e5aUNzc/6evjoI5NDzSisIWd2xBVJq7nENSzZxOmmMtpEQDPxy6qTyy/3LylrGs duU2Rxlff0w== X-Google-Smtp-Source: AGHT+IHBlK8YqoPMAr7xh9aEs9BuP63hCf3vUPjkswlC+FGyc/S92WE6qVaUgB/MfYWJFOpNBewMgTCnn2Lz X-Received: from plgf13.prod.google.com ([2002:a17:902:ce8d:b0:234:711c:9397]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2402:b0:234:8aad:73cd with SMTP id d9443c01a7336-2348aad7438mr34457945ad.30.1748328134808; Mon, 26 May 2025 23:42:14 -0700 (PDT) Date: Mon, 26 May 2025 23:41:47 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-6-irogers@google.com> Subject: [PATCH v1 05/11] perf test: Avoid use perf_env From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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: Ian Rogers --- tools/perf/tests/code-reading.c | 5 +++- tools/perf/tests/dlfilter-test.c | 50 ++++++++++++++++++-------------- tools/perf/util/env.c | 1 + 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-readin= g.c index cf6edbe697b2..4b2461e93b2b 100644 --- a/tools/perf/tests/code-reading.c +++ b/tools/perf/tests/code-reading.c @@ -651,11 +651,13 @@ static int do_test_code_reading(bool try_kcore) struct dso *dso; const char *events[] =3D { "cycles", "cycles:u", "cpu-clock", "cpu-clock:= u", NULL }; int evidx =3D 0; + struct perf_env host_env; =20 pid =3D getpid(); =20 machine =3D machine__new_host(); - machine->env =3D &perf_env; + perf_env__init(&host_env); + machine->env =3D &host_env; =20 ret =3D machine__create_kernel_maps(machine); if (ret < 0) { @@ -798,6 +800,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); =20 return err; } diff --git a/tools/perf/tests/dlfilter-test.c b/tools/perf/tests/dlfilter-t= est.c index 54f59d1246bc..6427e3382711 100644 --- a/tools/perf/tests/dlfilter-test.c +++ b/tools/perf/tests/dlfilter-test.c @@ -319,11 +319,12 @@ static int run_perf_script(struct test_data *td) =20 static int test__dlfilter_test(struct test_data *td) { + struct perf_env host_env; u64 sample_type =3D TEST_SAMPLE_TYPE; pid_t pid =3D 12345; pid_t tid =3D 12346; u64 id =3D 99; - int err; + int err =3D TEST_OK; =20 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) =20 pr_debug("Creating new host machine structure\n"); td->machine =3D machine__new_host(); - td->machine->env =3D &perf_env; + perf_env__init(&host_env); + td->machine->env =3D &host_env; =20 td->fd =3D creat(td->perf_data_file_name, 0644); if (td->fd < 0) return test_result("Failed to create test perf.data file", TEST_FAIL); =20 err =3D perf_header__write_pipe(td->fd); - if (err < 0) - return test_result("perf_header__write_pipe() failed", TEST_FAIL); - + if (err < 0) { + err =3D test_result("perf_header__write_pipe() failed", TEST_FAIL); + goto out; + } err =3D 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_nam= e)) - return TEST_FAIL; - - if (write_sample(td, sample_type, id, pid, tid) !=3D TEST_OK) - return TEST_FAIL; - + if (err) { + err =3D test_result("perf_event__synthesize_attr() failed", TEST_FAIL); + goto out; + } + if (write_comm(td->fd, pid, tid, "test-prog")) { + err =3D TEST_FAIL; + goto out; + } + if (write_mmap(td->fd, pid, tid, MAP_START, 0x10000, 0, td->prog_file_nam= e)) { + err =3D TEST_FAIL; + goto out; + } + if (write_sample(td, sample_type, id, pid, tid) !=3D TEST_OK) { + err =3D TEST_FAIL; + goto out; + } if (verbose > 1) system_cmd("%s script -i %s -D", td->perf, td->perf_data_file_name); =20 - err =3D run_perf_script(td); - if (err) - return TEST_FAIL; - - return TEST_OK; + err =3D run_perf_script(td) ? TEST_FAIL : TEST_OK; +out: + perf_env__exit(&host_env); + return err; } =20 static void unlink_path(const char *path) diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 36411749e007..b363c933e782 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -254,6 +254,7 @@ void perf_env__exit(struct perf_env *env) =20 void perf_env__init(struct perf_env *env) { + memset(env, 0, sizeof(*env)); #ifdef HAVE_LIBBPF_SUPPORT env->bpf_progs.infos =3D RB_ROOT; env->bpf_progs.btfs =3D RB_ROOT; --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1917B202C5D for ; Tue, 27 May 2025 06:42:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328140; cv=none; b=m8cdB9DAr6eI4TN9XoUiqofuIjj7etTgPq5VSpS++6B027/+F4Yogi2egbEDPys/qjxhN9NbTqik7JGLVKcvU3IQe/nzRQ4KTNX+6uILoWqLT33FMYVO7Qy0nwyEL7g40A7sA27soOs2yOujzzm9JQMB3RCRiVFiPUZ/8YcUwls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328140; c=relaxed/simple; bh=Lk3DRYGD+SHY8MhJeChpSoSm5juJjk9zmN2YQ0n2PfE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=O3VpO1wYaEo7a0ogFXYxA7B4RGrfP1t1Cax+BMFsNjOBGpzXw3DlcQfjtdS/ix81txoPgx3Az2xoixp1uQcEzAoeisQIQPMZaSr+7SNsuTn6eQa3NmeXTuFk0abOfRK/uYKZtOUTr0juA8H3Q3wf759BduJwMAuaXsxKUTqaIEA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Ju6n2L4J; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Ju6n2L4J" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-31171a736b2so2376592a91.1 for ; Mon, 26 May 2025 23:42:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328137; x=1748932937; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=EQf+Z2part0hsdtY7//u4THJS4IDXYFor1XjnfmY5gg=; b=Ju6n2L4J20KAC9sgf78Ugd8Yl98oMoR0nR/OGKZsTFC+hOBE9ULc6xM6gY8r9sOStl ZJ8rfrL+gSlVEefICXc6poTKqePftIc6p0p9zE7Zsrib/kS3ixg/wd3qFEcogJAtVDFB b+Bf0iblK3kCfPgihxSdtZRt680sfwEwvufg8lckEDnfr3uHjgva65Hto8Fhj2L9fd6v XkM1rQ0/5T/3hOkKLyEpN46vudUWKtBT63415zMA/uZbQ/hn401pca6YFknLKTfxjDYJ hUjrDI6R/ZGEzNCL2RndhbUP0TPuLaaNzZd8GtLBG5JYldOPdlHEZ2lpDS5V4lQ96aa8 1RPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328137; x=1748932937; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=EQf+Z2part0hsdtY7//u4THJS4IDXYFor1XjnfmY5gg=; b=kx5zC/dnEibXp5wYG/NRPAtMZ5i60TNNOL1FjkuYo4ggiAJXEC0NoNpbsht0pyhCkS B198FjGPlJeBJXmdif8v92rgjovx7JkTq+ZkqUwd0O5FXq6pSoEmyBHkwxEpCKVspYx1 yndiUvRFBmUMt3mOwEtTWIZ19t9fjiEqJ5Im1NhflUjUpn47R+CQgpFO4KaTTBSfKvCn LqTII1SdsNupJoYvdk40VU9rbNfeCpwmjLOLKDC8tcOcqdOxwatYzJSRXYXoaYn0U19E X9nm7fgNZPvvV2pF69c5ycVzhZ2nymomYJN7dVYZAZKtkgPhIBG/br3ZQBBIhYH6iEM4 lCCQ== X-Forwarded-Encrypted: i=1; AJvYcCXHcN9p9Mi3X1/6XGDfxhmEJuL5yXiNasTOF9YKtcNLszSwtNyNopwG8dgOoegEyf1eWi/CPDNZ0V0vhV4=@vger.kernel.org X-Gm-Message-State: AOJu0YxirnSvJ8V2ivDVk3P524a0JEVSAUpF47ePWixjmyeYJ1yDX7+9 zkt0yYarOuI+pwfZBCyyDYBOXqb0dweCPN7Ee3TVSQcislxv9aewtJyL8bbVf8Q5sgdaNCDVkrS 89gxy33rFSg== X-Google-Smtp-Source: AGHT+IH63nXw7pXDu0b2FYWDPpqXAyJ0WhvWKd5PccXZpsPz9a+Wx6sv15yS8l2Bt2yFk1APhDR1qWujVQuT X-Received: from pjbpq14.prod.google.com ([2002:a17:90b:3d8e:b0:311:2c1f:b0d8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3f0d:b0:309:f407:5ad1 with SMTP id 98e67ed59e1d1-311108a1d6amr22190394a91.14.1748328137381; Mon, 26 May 2025 23:42:17 -0700 (PDT) Date: Mon, 26 May 2025 23:41:48 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-7-irogers@google.com> Subject: [PATCH v1 06/11] perf top: Make perf_env locally scoped From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The use of the global host perf_env variable is potentially inconsistent within the code. Switch perf top to using a locally scoped variable that is generally accessed through the session. Signed-off-by: Ian Rogers --- tools/perf/builtin-top.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 3c89568dd6d0..9ca0617047fd 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -1301,7 +1301,7 @@ static int __cmd_top(struct perf_top *top) perf_set_multithreaded(); =20 if (perf_hpp_list.socket) { - ret =3D perf_env__read_cpu_topology_map(&perf_env); + ret =3D perf_env__read_cpu_topology_map(perf_session__env(top->session)); if (ret < 0) { char errbuf[BUFSIZ]; const char *err =3D str_error_r(-ret, errbuf, sizeof(errbuf)); @@ -1624,6 +1624,7 @@ int cmd_top(int argc, const char **argv) NULL }; int status =3D hists__init(); + struct perf_env host_env; =20 if (status < 0) return status; @@ -1639,12 +1640,17 @@ int cmd_top(int argc, const char **argv) =20 status =3D perf_config(perf_top_config, &top); if (status) - return status; + goto out_delete_evlist; /* * Since the per arch annotation init routine may need the cpuid, read * it here, since we are not getting this from the perf.data header. */ - status =3D perf_env__read_cpuid(&perf_env); + perf_env__init(&host_env); + status =3D perf_env__set_cmdline(&host_env, argc, argv); + if (status) + goto out_delete_evlist; + + status =3D perf_env__read_cpuid(&host_env); if (status) { /* * Some arches do not provide a get_cpuid(), so just use pr_debug, other= wise @@ -1661,18 +1667,24 @@ int cmd_top(int argc, const char **argv) =20 if (disassembler_style) { annotate_opts.disassembler_style =3D strdup(disassembler_style); - if (!annotate_opts.disassembler_style) - return -ENOMEM; + if (!annotate_opts.disassembler_style) { + status =3D -ENOMEM; + goto out_delete_evlist; + } } if (objdump_path) { annotate_opts.objdump_path =3D strdup(objdump_path); - if (!annotate_opts.objdump_path) - return -ENOMEM; + if (!annotate_opts.objdump_path) { + status =3D -ENOMEM; + goto out_delete_evlist; + } } if (addr2line_path) { symbol_conf.addr2line_path =3D strdup(addr2line_path); - if (!symbol_conf.addr2line_path) - return -ENOMEM; + if (!symbol_conf.addr2line_path) { + status =3D -ENOMEM; + goto out_delete_evlist; + } } =20 status =3D symbol__validate_sym_arguments(); @@ -1826,7 +1838,7 @@ int cmd_top(int argc, const char **argv) top.session =3D NULL; goto out_delete_evlist; } - top.session->env =3D &perf_env; + top.session->env =3D &host_env; =20 if (!evlist__needs_bpf_sb_event(top.evlist)) top.record_opts.no_bpf_event =3D true; @@ -1841,7 +1853,7 @@ int cmd_top(int argc, const char **argv) goto out_delete_evlist; } =20 - if (evlist__add_bpf_sb_event(top.sb_evlist, &perf_env)) { + if (evlist__add_bpf_sb_event(top.sb_evlist, &host_env)) { pr_err("Couldn't ask for PERF_RECORD_BPF_EVENT side band events.\n."); status =3D -EINVAL; goto out_delete_evlist; @@ -1863,6 +1875,7 @@ int cmd_top(int argc, const char **argv) evlist__delete(top.evlist); perf_session__delete(top.session); annotation_options__exit(); + perf_env__exit(&host_env); =20 return status; } --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4024620551C for ; Tue, 27 May 2025 06:42:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328141; cv=none; b=Z+ijHYL5iSqQLx1yE/dNMpi0DvLU3UQlJvzo21yqjQyT9hNjnSS7WQLwOPKs/tdsqbgtV/cKjYgofdBiZGZzRvhESCDIPOtMq+2QtnZljWaReXyel4oZmm1M4UjttNdSRUCu0pqM6WscgwteuYgRbz/HczPXoQ2nkX0XLXkw1CA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328141; c=relaxed/simple; bh=6GAQwN/G8OaPU5mQrLfIZzTMBZfklMbE3h/w4v7DU6Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Fwk2f+lngN9/x49ole7BwWrEfb4kTOH3oWudsHxjtVpkopGWjdWr/xNoj/XIySDNGI+IFa56dtQ4TmmIqVdF/L4CTc4thXjvWlcFo0CJ2Y/3lQdY3v5xAIuFGiFjPViS+AoGKST5d9okbGIY7lcrQjPXwptOp5AS0GaLqvrCJU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=SHAqnrXk; arc=none smtp.client-ip=209.85.210.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SHAqnrXk" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-740270e168aso2168180b3a.1 for ; Mon, 26 May 2025 23:42:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328139; x=1748932939; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=YBLkKYkdQ5SiRC198gXvkCB/ma/yQ9E3LOnnNzaUpPE=; b=SHAqnrXkray3yUDLuFE9fZBD6dM6fD0QW+sjwwXtGNoGY19iIPBJ6F9XIY+e9SKKkv vFtQnRSzn5XzmD5VVZazSy+ATBapGYgcUMUKyCpCMV1H3uQIlUnlHZ0bYuk/lQ8yF7/w PeBYqVWlDOdFrqfSMXbajto6KvpzSXAgrUeRZp1EvbH67ggNfSPJ6tskIPVPXncYbwk+ lQMyqNNGdsrGMCe3yGLMV1iAN9PUb9XJy/57x2I9TtHPtzMlqXHsMOyKQxUI6LwK7pAp dhhzi7sGocGNuwqZbihO5dkLP4uyEn/Y2fjY8ZqYNLGaXBL00bRsq/QAjLmd/27gLxZ5 Kr3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328139; x=1748932939; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=YBLkKYkdQ5SiRC198gXvkCB/ma/yQ9E3LOnnNzaUpPE=; b=DqIclPoFSj46tMgAEw4L5lWBkcqA79CzHHB7VNYqlxZ+Kv4dGGYJ6R3UAxnytNXELq 0TTArnS3bRGaH+lx7H5I1lxvoMe65Z8IfvAvMbAmXiCH8n4L6aZNk3q8SPq66KcgklDa wdmPDpiE1jDSSZ7Q4PMugCOObDAZk9m42R2xZSPflxstY2F/vlMtE+Cjyl29iPkxzOub ooQZBuUaU75Dm9MM7FvdSfaAJeptbImllikYUY1Hr5TfZpwQzR5o+DLmV1IUIBwY6fST 3Ir74nSC2Fue2U0mEhz7nBzJadqve1vW4gQKY/tHC4bbO3XU9igGD+XIzSfOUlVHkJJR hong== X-Forwarded-Encrypted: i=1; AJvYcCUnJ+bupsTq67H0LloUgp/jw0yjMyaXAMoUorlVpY2TATUW4FlMpBAqytTsjdufOFDMQsFHB0iFkpxZJo0=@vger.kernel.org X-Gm-Message-State: AOJu0YybXGQ9KScMt99OLILFsEZBkEEmeU49Q3/uG0gwRqMlCTdLpFDV iw71rEXdsOTva88Uv07MWUJCgWdz2rykrTrahCifDyPDGhYDHNoIr6P/5FUOawv7t7DvE4OJ96n I6wNMCOBiFQ== X-Google-Smtp-Source: AGHT+IHqlWKmFD9yc2csGjHzi/9TzTaV3F/Ku4c45zz+W7Lqi3AOLD7NV2uIbBNeShcVb9hrPPZxDweD3Vwi X-Received: from pfad17.prod.google.com ([2002:a05:6a00:291:b0:746:1a2e:b29b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d1b:b0:740:4095:4d07 with SMTP id d2e1a72fcca58-745fdf4aabcmr19069753b3a.12.1748328139389; Mon, 26 May 2025 23:42:19 -0700 (PDT) Date: Mon, 26 May 2025 23:41:49 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-8-irogers@google.com> Subject: [PATCH v1 07/11] perf session: Add host_env argument to perf_session__new From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- tools/perf/builtin-inject.c | 3 ++- tools/perf/util/session.c | 5 +++-- tools/perf/util/session.h | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 1b8c4ff39124..e6f1bf093bc3 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -2532,7 +2532,8 @@ int cmd_inject(int argc, const char **argv) inject.tool.auxtrace =3D perf_event__repipe_auxtrace; inject.tool.dont_split_sample_group =3D true; inject.session =3D __perf_session__new(&data, &inject.tool, - /*trace_event_repipe=3D*/inject.output.is_pipe); + /*trace_event_repipe=3D*/inject.output.is_pipe, + /*host_env=3D*/NULL); =20 if (IS_ERR(inject.session)) { ret =3D PTR_ERR(inject.session); diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index beb74d9fcc07..9b477cc73c85 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -137,7 +137,8 @@ static int ordered_events__deliver_event(struct ordered= _events *oe, =20 struct perf_session *__perf_session__new(struct perf_data *data, struct perf_tool *tool, - bool trace_event_repipe) + bool trace_event_repipe, + struct perf_env *host_env) { int ret =3D -ENOMEM; struct perf_session *session =3D zalloc(sizeof(*session)); @@ -191,7 +192,7 @@ struct perf_session *__perf_session__new(struct perf_da= ta *data, symbol_conf.kallsyms_name =3D perf_data__kallsyms_name(data); } } else { - session->machines.host.env =3D &perf_env; + session->machines.host.env =3D host_env ?: &perf_env; } if (session->evlist) session->evlist->session =3D session; diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index 088868f1004a..baa59fab761b 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h @@ -109,12 +109,13 @@ struct perf_tool; =20 struct perf_session *__perf_session__new(struct perf_data *data, struct perf_tool *tool, - bool trace_event_repipe); + bool trace_event_repipe, + struct perf_env *host_env); =20 static inline struct perf_session *perf_session__new(struct perf_data *dat= a, struct perf_tool *tool) { - return __perf_session__new(data, tool, /*trace_event_repipe=3D*/false); + return __perf_session__new(data, tool, /*trace_event_repipe=3D*/false, /*= host_env=3D*/NULL); } =20 void perf_session__delete(struct perf_session *session); --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95634207E03 for ; Tue, 27 May 2025 06:42:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328144; cv=none; b=QZzfFldyLINnrDchJGx96zE4HFT4MdcCNEsC/x90I4919KVx8sAf8HJbzRbBknglksVVHRGvs2zuA/md7BhV4+s/9uI+7E50kxm5+AQQctqkPWiwAyB42JeuB7AEEhKSVhmLRwpnp+W8fBqLYczeqXZ8k4rQ+Ripwm/9zDzx00k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328144; c=relaxed/simple; bh=PoSIx3oY0LJ9QKqM6N4DaxmQDep27IcY3SKWoO04ZlA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=lpuW29dEdMJ2WKQzV/v3OJowdVtyjqWzZrIEYi8mQwxN6x4dzueRxBTUXo/nEuWRFAT8qk3D2QT3O/QUNB34ylGTWOACd0cXa87Vxajhzmv+25xaFBJO7drbrkgu4RcyN1qKGV9sL0l+Ixf14Zs143RZ+Gl7PV/VQF7Eoq3SBkM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=nGdaCCw4; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="nGdaCCw4" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-e7d92c6ebbeso2976458276.0 for ; Mon, 26 May 2025 23:42:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328141; x=1748932941; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=XNsWVbZHKMTH+JLxsWG7Haie8oSBX2sugIIaYnA3oGo=; b=nGdaCCw4uUF6G7wBksMy6I6vdaq3Y3Fav4f0GsU6Jm3qi4JWFl3y6XkmGNNpfUxP8N 9xbospaa+847ee6Z+3i3rvXgUuYrSwN7JXgTQrKLABX9JqSpJyXeTd2R1uZM3WMf6X9n R4cg2nXxD3uNSqg5CDdGWTltr9LUDvlqSnCiRxcOMpwbWS9dFvp1hNs2SZ0EglkwpyVn 3Z2Lmm3mRIGzOgWtfb4vU3TgJF9YcG0xmbVaOi5ibDz7rVk23is4fJiOvQS/J7x0Q0PA VGpkWEKz5wRP3kT+C72R1nUE6BvQXi+8WcITpg8ahJ91nlKGVfa35jmfW3hywmI4h3PV Wvcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328141; x=1748932941; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=XNsWVbZHKMTH+JLxsWG7Haie8oSBX2sugIIaYnA3oGo=; b=ix/yZEu3C6ZVhE1Iw4CgM4r4lBdI5W9rGGWArUdOV2MRLoZgW5npHpONX7UA6HZW2f /Q8CnItvfSTjfVRctCiaZWcCEy0ypLyPKxFCceaSHCS63KQoOYsQ645nKA9i/JWDheS/ koeEDRGVEuio+IeUYv4cyHv/kltSzBgnga+5ogKx5JsB+6Eh+x+kltFmD/pQHPlsdTx/ TEdljDBbjTwdVJJU7t6cs5CXgTBTOe/cJbAQpFWw/GD/C9SB//2ollHba0kvGQPrAlJ4 SnFzge5f6N6n4adXdQREpI1NsLRbA4Zr+v91yST5rtcOOo0InrircmNxDQv40VZgALIg YmWQ== X-Forwarded-Encrypted: i=1; AJvYcCXoCd9mPIEBkXrK+H7GykEelYjY3ZfBgBFRP5wFRoshiFBdcNg7MsHPPuwCsaDPnQeRKutjxGqjiS6+RYg=@vger.kernel.org X-Gm-Message-State: AOJu0Yycwzs4TD21sGKfdwyiFKguRAzXHY83MdNaHOFeuzmYD4EMSXB3 nPvSv/PtrHZwzv++ZQDhPHt2732XDsZ95NtBOnvbyhCrECVPTnwh8loFAZ4ysAjlQjdMNGlxYeH R3IroC+EMiA== X-Google-Smtp-Source: AGHT+IHfYe4oI4XOwek2vvEbiP89zehdPT5a0EmY7OUCuHhLrrjgpYB6bXn3UfQb9gmsOs6Ovv3aB3zUDwc2 X-Received: from ybbgy9.prod.google.com ([2002:a05:6902:4489:b0:e7d:c5dd:c1d5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6902:310f:b0:e7d:5f06:91ff with SMTP id 3f1490d57ef6-e7d9189aa34mr11597728276.8.1748328141648; Mon, 26 May 2025 23:42:21 -0700 (PDT) Date: Mon, 26 May 2025 23:41:50 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-9-irogers@google.com> Subject: [PATCH v1 08/11] perf bench synthesize: Avoid use of global perf_env From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The benchmark doesn't use a data file and so the header perf_env isn't used. Stack allocate a host perf_env for use to avoid the use of the global perf_env. Signed-off-by: Ian Rogers --- tools/perf/bench/synthesize.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/tools/perf/bench/synthesize.c b/tools/perf/bench/synthesize.c index 9b333276cbdb..79d99ba50284 100644 --- a/tools/perf/bench/synthesize.c +++ b/tools/perf/bench/synthesize.c @@ -114,10 +114,13 @@ static int run_single_threaded(void) .pid =3D "self", }; struct perf_thread_map *threads; + struct perf_env host_env; int err; =20 perf_set_singlethreaded(); - session =3D perf_session__new(NULL, NULL); + perf_env__init(&host_env); + session =3D __perf_session__new(/*data=3D*/NULL, /*tool=3D*/NULL, + /*trace_event_repipe=3D*/false, &host_env); if (IS_ERR(session)) { pr_err("Session creation failed.\n"); return PTR_ERR(session); @@ -144,6 +147,7 @@ static int run_single_threaded(void) perf_thread_map__put(threads); =20 perf_session__delete(session); + perf_env__exit(&host_env); return err; } =20 @@ -154,17 +158,21 @@ static int do_run_multi_threaded(struct target *targe= t, u64 runtime_us; unsigned int i; double time_average, time_stddev, event_average, event_stddev; - int err; + int err =3D 0; struct stats time_stats, event_stats; struct perf_session *session; + struct perf_env host_env; =20 + perf_env__init(&host_env); init_stats(&time_stats); init_stats(&event_stats); for (i =3D 0; i < multi_iterations; i++) { - session =3D perf_session__new(NULL, NULL); - if (IS_ERR(session)) - return PTR_ERR(session); - + session =3D __perf_session__new(/*data=3D*/NULL, /*tool=3D*/NULL, + /*trace_event_repipe=3D*/false, &host_env); + if (IS_ERR(session)) { + err =3D PTR_ERR(session); + goto err_out; + } atomic_set(&event_count, 0); gettimeofday(&start, NULL); err =3D __machine__synthesize_threads(&session->machines.host, @@ -173,10 +181,8 @@ static int do_run_multi_threaded(struct target *target, process_synthesized_event, true, false, nr_threads_synthesize); - if (err) { - perf_session__delete(session); - return err; - } + if (err) + goto err_out; =20 gettimeofday(&end, NULL); timersub(&end, &start, &diff); @@ -198,7 +204,9 @@ static int do_run_multi_threaded(struct target *target, =20 printf(" Average time per event %.3f usec\n", time_average / event_average); - return 0; +err_out: + perf_env__exit(&host_env); + return err; } =20 static int run_multi_threaded(void) --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F48C20AF98 for ; Tue, 27 May 2025 06:42:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328146; cv=none; b=tz2GFFOXzmelTOKzffsLVy8QO4UaoxbCuH5SfNm+wzlCr3r5b06+8TDQIY+h/2rZvmFaGzxdbvZl/iaAdqPGnucLdxIhO5GCkFj6XzDDf/3t3Hd7MzNzcad9kvJmSeBc8EZUx+ekiw6kvwBVrQqS699Gqhg3M1MQ3aB+bacW+Xw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328146; c=relaxed/simple; bh=GUqttBip2MH58Qqi5I27lGJ/I5uDGJKtTZskTXVNm9Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=J6qZZBLvOeAuJI93dk30pavoT/AeAjai2r4EY4e1p8rI+rp8mVqbikZ64r0TcR4vJMR7UNyq46c8FlqLQcFJp/+tyJW5nSZcLyglOaVQwCvJ0wx/AI6D5q/lFMgEcdBrURyys0QPuZmMzlOYaZV+xpJukAAC9wYZvIB/8tzbHgc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=zYXV3XTH; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="zYXV3XTH" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-234042bdcc5so19764135ad.0 for ; Mon, 26 May 2025 23:42:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328143; x=1748932943; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=RyO8Q/xetmC7cn1Wk2vJjt3dqyq5DK+2+UzdruLCuU0=; b=zYXV3XTHMynON/grnaD8xVO+P9ixnA3zYT1wXUi+sjnAsmoorAAQ0k0hSnyA+0soj7 BMoVaEIU0AI2bSV+lS9Y6ZWlbpKvjvbobokM5qMk2MonUzYLIuToQkN25H+QrkXlXMb8 ggbymAwTRNb4ODDRs1M6CaUaDXI0qrssqn2eLLC0/hhOASVIPWqrgXhDhm0bZjLgouje NjFs7BQEIElE1Ey7AGDtM1xdJ/SR7YEB2vECUdPozo42ZpoQQBK7CgCHjWMDlwxpUNKv 58C71+SGTIWBM1gkRruKNQ107lYDQJm0SCFL2/5ttI6Snd0j/s6coUP4YE+xvvHGvFNE 31Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328143; x=1748932943; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RyO8Q/xetmC7cn1Wk2vJjt3dqyq5DK+2+UzdruLCuU0=; b=O+AVxefJz8c1zq0a7GwMNT2HOSn+Kr0fgc3FEmvbRRqmyEIklqwK4RlpeCK/13D7bQ /kUjf5SIL+lmhf1rDEQvJJ5fa7jVnHtDz0I/ZuacjXBlq6nnAsZqn7WrwLzimnukMDIx lHXk0QUZI361a/gFllnqKKeI6fCJ8mCJs2r5xk981N2TZNRYoOE5TX7KABIzW2a2hDow a8pAjcDzhIunaRtvr8fbtiMohar1aKvsdyzHIXVuIsMmyWXsebNu+f09VIdQsbeq48/S drmXVhUGE7HRBAobRkVZnpyqMW1aoNRwagcq12hwpJlt25TBqlc/fSGv48iSy9UgnZkq 7Gbw== X-Forwarded-Encrypted: i=1; AJvYcCXvnI0zxmhf0ly4Qtz4yEDVgJeMSeYkZiTT0IblR3GNgLuR7JQM65PqUFYFImNFFeBRYXKcx6syxN++l2M=@vger.kernel.org X-Gm-Message-State: AOJu0Ywo/CPprXPIHWuPHcXCvQGL77Kl/mG1DeiT8lsFpV9Jp901Dw98 Qxu3kgq+P+5uWaLR4Q6D6MqLdu4uCW5YxLsGt1/NmeVa0kkcIgSVgcpwtg36gs3zMDbnAjlT3hW xOJnTkoGcKg== X-Google-Smtp-Source: AGHT+IHGLqmBiymsCoMM9rLTa0bO/73yow6mNgqgzSHzpRDkNHjfD2c4XyYflzxZFsyII009DFB2IEWtmiWE X-Received: from plhd6.prod.google.com ([2002:a17:903:2306:b0:234:649c:c7db]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:eccb:b0:21f:bd66:cafa with SMTP id d9443c01a7336-23414f62677mr186583115ad.17.1748328143471; Mon, 26 May 2025 23:42:23 -0700 (PDT) Date: Mon, 26 May 2025 23:41:51 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-10-irogers@google.com> Subject: [PATCH v1 09/11] perf machine: Explicitly pass in host perf_env From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When creating a machine for the host explicitly pass in a scoped perf_env. This removes a use of the global perf_env. Signed-off-by: Ian Rogers --- tools/perf/builtin-buildid-list.c | 5 ++++- tools/perf/builtin-kallsyms.c | 21 ++++++++++++++++----- tools/perf/builtin-trace.c | 24 +++++++++++++++++------- tools/perf/tests/code-reading.c | 3 +-- tools/perf/tests/dlfilter-test.c | 3 +-- tools/perf/tests/dwarf-unwind.c | 10 +++++++--- tools/perf/tests/mmap-thread-lookup.c | 6 +++++- tools/perf/tests/symbols.c | 8 +++++++- tools/perf/util/machine.c | 8 ++++---- tools/perf/util/machine.h | 4 ++-- tools/perf/util/probe-event.c | 5 ++++- 11 files changed, 68 insertions(+), 29 deletions(-) diff --git a/tools/perf/builtin-buildid-list.c b/tools/perf/builtin-buildid= -list.c index 52dfacaff8e3..4307a1afa279 100644 --- a/tools/perf/builtin-buildid-list.c +++ b/tools/perf/builtin-buildid-list.c @@ -45,11 +45,14 @@ static int buildid__map_cb(struct map *map, void *arg _= _maybe_unused) =20 static void buildid__show_kernel_maps(void) { + struct perf_env host_env; struct machine *machine; =20 - machine =3D machine__new_host(); + perf_env__init(&host_env); + machine =3D machine__new_host(&host_env); machine__for_each_kernel_map(machine, buildid__map_cb, NULL); machine__delete(machine); + perf_env__exit(&host_env); } =20 static int sysfs__fprintf_build_id(FILE *fp) diff --git a/tools/perf/builtin-kallsyms.c b/tools/perf/builtin-kallsyms.c index a3c2ffdc1af8..3c4339982b16 100644 --- a/tools/perf/builtin-kallsyms.c +++ b/tools/perf/builtin-kallsyms.c @@ -12,18 +12,28 @@ #include #include "debug.h" #include "dso.h" +#include "env.h" #include "machine.h" #include "map.h" #include "symbol.h" =20 static int __cmd_kallsyms(int argc, const char **argv) { - int i; - struct machine *machine =3D machine__new_kallsyms(); + int i, err; + struct perf_env host_env; + struct machine *machine =3D NULL; =20 + + perf_env__init(&host_env); + err =3D perf_env__set_cmdline(&host_env, argc, argv); + if (err) + goto out; + + machine =3D machine__new_kallsyms(&host_env); if (machine =3D=3D NULL) { pr_err("Couldn't read /proc/kallsyms\n"); - return -1; + err =3D -1; + goto out; } =20 for (i =3D 0; i < argc; ++i) { @@ -42,9 +52,10 @@ static int __cmd_kallsyms(int argc, const char **argv) map__unmap_ip(map, symbol->start), map__unmap_ip(map, symbol->end), symbol->start, symbol->end); } - +out: machine__delete(machine); - return 0; + perf_env__exit(&host_env); + return err; } =20 int cmd_kallsyms(int argc, const char **argv) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index dc3a016f302d..af1cb6a5ba1c 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -143,6 +143,7 @@ struct syscall_fmt { }; =20 struct trace { + struct perf_env host_env; struct perf_tool tool; struct { /** Sorted sycall numbers used by the trace. */ @@ -1980,17 +1981,24 @@ static char *trace__machine__resolve_kernel_addr(vo= id *vmachine, unsigned long l return machine__resolve_kernel_addr(vmachine, addrp, modp); } =20 -static int trace__symbols_init(struct trace *trace, struct evlist *evlist) +static int trace__symbols_init(struct trace *trace, int argc, const char *= *argv, + struct evlist *evlist) { int err =3D symbol__init(NULL); =20 if (err) return err; =20 - trace->host =3D machine__new_host(); - if (trace->host =3D=3D NULL) - return -ENOMEM; + perf_env__init(&trace->host_env); + err =3D perf_env__set_cmdline(&trace->host_env, argc, argv); + if (err) + goto out; =20 + trace->host =3D machine__new_host(&trace->host_env); + if (trace->host =3D=3D NULL) { + err =3D -ENOMEM; + goto out; + } thread__set_priv_destructor(thread_trace__delete); =20 err =3D trace_event__register_resolver(trace->host, trace__machine__resol= ve_kernel_addr); @@ -2001,9 +2009,10 @@ static int trace__symbols_init(struct trace *trace, = struct evlist *evlist) evlist->core.threads, trace__tool_process, true, false, 1); out: - if (err) + if (err) { + perf_env__exit(&trace->host_env); symbol__exit(); - + } return err; } =20 @@ -2012,6 +2021,7 @@ static void trace__symbols__exit(struct trace *trace) machine__exit(trace->host); trace->host =3D NULL; =20 + perf_env__exit(&trace->host_env); symbol__exit(); } =20 @@ -4453,7 +4463,7 @@ static int trace__run(struct trace *trace, int argc, = const char **argv) goto out_delete_evlist; } =20 - err =3D trace__symbols_init(trace, evlist); + err =3D trace__symbols_init(trace, argc, argv, evlist); if (err < 0) { fprintf(trace->output, "Problems initializing symbol libraries!\n"); goto out_delete_evlist; diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-readin= g.c index 4b2461e93b2b..e327d892c725 100644 --- a/tools/perf/tests/code-reading.c +++ b/tools/perf/tests/code-reading.c @@ -655,9 +655,8 @@ static int do_test_code_reading(bool try_kcore) =20 pid =3D getpid(); =20 - machine =3D machine__new_host(); perf_env__init(&host_env); - machine->env =3D &host_env; + machine =3D machine__new_host(&host_env); =20 ret =3D machine__create_kernel_maps(machine); if (ret < 0) { diff --git a/tools/perf/tests/dlfilter-test.c b/tools/perf/tests/dlfilter-t= est.c index 6427e3382711..80a1c941138d 100644 --- a/tools/perf/tests/dlfilter-test.c +++ b/tools/perf/tests/dlfilter-test.c @@ -353,9 +353,8 @@ static int test__dlfilter_test(struct test_data *td) return test_result("Failed to find program symbols", TEST_FAIL); =20 pr_debug("Creating new host machine structure\n"); - td->machine =3D machine__new_host(); perf_env__init(&host_env); - td->machine->env =3D &host_env; + td->machine =3D machine__new_host(&host_env); =20 td->fd =3D creat(td->perf_data_file_name, 0644); if (td->fd < 0) diff --git a/tools/perf/tests/dwarf-unwind.c b/tools/perf/tests/dwarf-unwin= d.c index 4803ab2d97ba..5f98e29e21fd 100644 --- a/tools/perf/tests/dwarf-unwind.c +++ b/tools/perf/tests/dwarf-unwind.c @@ -7,6 +7,7 @@ #include #include "tests.h" #include "debug.h" +#include "env.h" #include "machine.h" #include "event.h" #include "../util/unwind.h" @@ -199,19 +200,21 @@ NO_TAIL_CALL_ATTRIBUTE noinline int test_dwarf_unwind= __krava_1(struct thread *th noinline int test__dwarf_unwind(struct test_suite *test __maybe_unused, int subtest __maybe_unused) { + struct perf_env host_env; struct machine *machine; struct thread *thread; int err =3D -1; =20 - machine =3D machine__new_host(); + perf_env__init(&host_env); + machine =3D machine__new_host(&host_env); if (!machine) { pr_err("Could not get machine\n"); - return -1; + goto out; } =20 if (machine__create_kernel_maps(machine)) { pr_err("Failed to create kernel maps\n"); - return -1; + goto out; } =20 callchain_param.record_mode =3D CALLCHAIN_DWARF; @@ -236,6 +239,7 @@ noinline int test__dwarf_unwind(struct test_suite *test= __maybe_unused, =20 out: machine__delete(machine); + perf_env__exit(&host_env); return err; } =20 diff --git a/tools/perf/tests/mmap-thread-lookup.c b/tools/perf/tests/mmap-= thread-lookup.c index 446a3615d720..0c5619c6e6e9 100644 --- a/tools/perf/tests/mmap-thread-lookup.c +++ b/tools/perf/tests/mmap-thread-lookup.c @@ -8,6 +8,7 @@ #include #include #include "debug.h" +#include "env.h" #include "event.h" #include "tests.h" #include "machine.h" @@ -155,6 +156,7 @@ static int synth_process(struct machine *machine) =20 static int mmap_events(synth_cb synth) { + struct perf_env host_env; struct machine *machine; int err, i; =20 @@ -167,7 +169,8 @@ static int mmap_events(synth_cb synth) */ TEST_ASSERT_VAL("failed to create threads", !threads_create()); =20 - machine =3D machine__new_host(); + perf_env__init(&host_env); + machine =3D machine__new_host(&host_env); =20 dump_trace =3D verbose > 1 ? 1 : 0; =20 @@ -209,6 +212,7 @@ static int mmap_events(synth_cb synth) } =20 machine__delete(machine); + perf_env__exit(&host_env); return err; } =20 diff --git a/tools/perf/tests/symbols.c b/tools/perf/tests/symbols.c index ee20a366f32f..c947a83699cc 100644 --- a/tools/perf/tests/symbols.c +++ b/tools/perf/tests/symbols.c @@ -5,6 +5,7 @@ #include #include "debug.h" #include "dso.h" +#include "env.h" #include "machine.h" #include "thread.h" #include "symbol.h" @@ -13,15 +14,18 @@ #include "tests.h" =20 struct test_info { + struct perf_env host_env; struct machine *machine; struct thread *thread; }; =20 static int init_test_info(struct test_info *ti) { - ti->machine =3D machine__new_host(); + perf_env__init(&ti->host_env); + ti->machine =3D machine__new_host(&ti->host_env); if (!ti->machine) { pr_debug("machine__new_host() failed!\n"); + perf_env__exit(&ti->host_env); return TEST_FAIL; } =20 @@ -29,6 +33,7 @@ static int init_test_info(struct test_info *ti) ti->thread =3D machine__findnew_thread(ti->machine, 100, 100); if (!ti->thread) { pr_debug("machine__findnew_thread() failed!\n"); + perf_env__exit(&ti->host_env); return TEST_FAIL; } =20 @@ -39,6 +44,7 @@ static void exit_test_info(struct test_info *ti) { thread__put(ti->thread); machine__delete(ti->machine); + perf_env__exit(&ti->host_env); } =20 struct dso_map { diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 2531b373f2cf..02f6da0a3f3d 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -128,7 +128,7 @@ int machine__init(struct machine *machine, const char *= root_dir, pid_t pid) return 0; } =20 -struct machine *machine__new_host(void) +struct machine *machine__new_host(struct perf_env *host_env) { struct machine *machine =3D malloc(sizeof(*machine)); =20 @@ -138,7 +138,7 @@ struct machine *machine__new_host(void) if (machine__create_kernel_maps(machine) < 0) goto out_delete; =20 - machine->env =3D &perf_env; + machine->env =3D host_env; } =20 return machine; @@ -147,9 +147,9 @@ struct machine *machine__new_host(void) return NULL; } =20 -struct machine *machine__new_kallsyms(void) +struct machine *machine__new_kallsyms(struct perf_env *host_env) { - struct machine *machine =3D machine__new_host(); + struct machine *machine =3D machine__new_host(host_env); /* * FIXME: * 1) We should switch to machine__load_kallsyms(), i.e. not explicitly diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index b56abec84fed..02641c1074db 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -169,8 +169,8 @@ struct thread *machine__findnew_guest_code(struct machi= ne *machine, pid_t pid); void machines__set_id_hdr_size(struct machines *machines, u16 id_hdr_size); void machines__set_comm_exec(struct machines *machines, bool comm_exec); =20 -struct machine *machine__new_host(void); -struct machine *machine__new_kallsyms(void); +struct machine *machine__new_host(struct perf_env *host_env); +struct machine *machine__new_kallsyms(struct perf_env *host_env); int machine__init(struct machine *machine, const char *root_dir, pid_t pid= ); void machine__exit(struct machine *machine); void machine__delete_threads(struct machine *machine); diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 307ad6242a4e..4269ee98aac3 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -75,12 +75,14 @@ int e_snprintf(char *str, size_t size, const char *form= at, ...) } =20 static struct machine *host_machine; +static struct perf_env host_env; =20 /* Initialize symbol maps and path of vmlinux/modules */ int init_probe_symbol_maps(bool user_only) { int ret; =20 + perf_env__init(&host_env); symbol_conf.allow_aliases =3D true; ret =3D symbol__init(NULL); if (ret < 0) { @@ -94,7 +96,7 @@ int init_probe_symbol_maps(bool user_only) if (symbol_conf.vmlinux_name) pr_debug("Use vmlinux: %s\n", symbol_conf.vmlinux_name); =20 - host_machine =3D machine__new_host(); + host_machine =3D machine__new_host(&host_env); if (!host_machine) { pr_debug("machine__new_host() failed.\n"); symbol__exit(); @@ -111,6 +113,7 @@ void exit_probe_symbol_maps(void) machine__delete(host_machine); host_machine =3D NULL; symbol__exit(); + perf_env__exit(&host_env); } =20 static struct ref_reloc_sym *kernel_get_ref_reloc_sym(struct map **pmap) --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82B5120C038 for ; Tue, 27 May 2025 06:42:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328148; cv=none; b=b2AEZRqk3oQwFXLfGTkNQFaUG5DQuntdqEFlMPTU9wW9FE38gUx6SbHWYI07m2TA95bB7FiA7TULDD4350PWlLT18QiIFF9vVqf+l706342PBVXKWGsOD42G93I7OdlAVzYRlbiDk19aK3dotch1Bw0G4i+0e3gudI3jqlGFVWI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328148; c=relaxed/simple; bh=yzNjmX59kG3whaHqOQeIyuVjWBTgpcE+Yqv8MqV6DW4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=OxwRuUaZ/cLSKn0SE9YKCQHvV8TViOaUYKHLpr2fzBIw1s/jrEbdS3fxSI6pjvyXk2PPFaWkFV5Tu51IR2NrZOe43UYk5trLBpSE/SQhoPF75vzk85DBQZKTBMV2hJy3cit8BuABjzRJCMUK3VJYSlnit8Q/RdDo+pkIQDh+WlM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=QHjOhigz; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="QHjOhigz" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-742c620e236so2112193b3a.1 for ; Mon, 26 May 2025 23:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328146; x=1748932946; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=9243hlKBPdeZ1Gi9lTPRhe1+dSif74gAofzJyXdpiIE=; b=QHjOhigzIpkUOsnfBD84ZkeOtMWjFns4xmzlp+oUmNVxEj9HeFSgZo/yV5CjnzP6JT bp3aUPWbcGpSODOfo8fnnSUKf8M0zboTcBBu6VNIQeaAX/cfcPX/jeImBn4eyTU9Kj1e YrkCHmE8Nm67Z1058NSz7rdKZtXUL9wspi7ZqiFKQH3d9TmW0m1UjehsGfNaDPJzgxab lp0iHOg33VSZVObtnbHKVbdwRrREl8fK3LUjxt2uLXg7VzJ8R9UE1DDDEJWQofm9WQ0H y45pHpLEiE8eIduywGg+t8TXxW8iixfEXe/J49gTAubB/lfwUZZyaMuZYS2byk45KpdR ymXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328146; x=1748932946; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9243hlKBPdeZ1Gi9lTPRhe1+dSif74gAofzJyXdpiIE=; b=g0jOcslFK/yqS/RWwD8paeKyqA2ZTio1HjPys1mCV/r6uPUKpYLDw7rpJE8GZLifNB fXF0LnoFvOiGhtVXkjaibuY6KeGZQEXJMQ2SROROWjBSzelM3dR7wNr9QjAdXH3odeyK 5D6Q/A6XsdYsUW++Z6vuIXw1iPOj/JrP1FKE8KcLRFPSYfb2K1CWAeQstzJ8/oALEjsu cuEX/BaTlAPgtWzkP7DjnS+Xzc+hlD7dpTdb3hrpadHYLxTnfqewUICBRY/QFrKTOXyh BWcuHmhNzGks/JwnB4WeJMo+wHwmjnADaiU2ejYe8+jpmZy5cm4lbDEfYgUpdky8NR5U +Y5A== X-Forwarded-Encrypted: i=1; AJvYcCUtxFxLAu7F/CLhjV9Vpin1QlXiugbjmfcZDZEq4WWA5oupg59Yk4KL1GD5riQBh1p+n1rjF1U53q2NkgM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6EEGMV9grR05hbCftqWjYigDWYuMTYNLe1snSQ9x/XDo+OoV7 Sfmj+AfLsmUMNKYhRvJeIKfFj12LDo6lKLMxmXbPf8QQ2Ca7UnGmlRkfgvYz2ZHFYrEFeqKMQ35 f4u3njlPryA== X-Google-Smtp-Source: AGHT+IFSaCGMgzGcQR5sH0WwCDihQ6b4O7L/EdB23UzxzbsOhbA+EnKf4bgJh66renmbJCUXk6BdAwgRNDxo X-Received: from pfbjc32.prod.google.com ([2002:a05:6a00:6ca0:b0:736:b315:f15e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4646:b0:742:ae7e:7da8 with SMTP id d2e1a72fcca58-745fdfcc5e9mr17415149b3a.8.1748328145586; Mon, 26 May 2025 23:42:25 -0700 (PDT) Date: Mon, 26 May 2025 23:41:52 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-11-irogers@google.com> Subject: [PATCH v1 10/11] perf auxtrace: Pass perf_env from session through to mmap read From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" auxtrace_mmap__read and auxtrace_mmap__read_snapshot end up calling `evsel__env(NULL)` which returns the global perf_env variable for the host. Their only call is in perf record. Rather than use the global variable pass through the perf_env for `perf record`. Signed-off-by: Ian Rogers --- tools/perf/builtin-record.c | 8 ++++++-- tools/perf/util/auxtrace.c | 13 +++++++------ tools/perf/util/auxtrace.h | 6 ++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 406b2166a3e9..3f5b9add43d5 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -773,7 +773,9 @@ static int record__auxtrace_mmap_read(struct record *re= c, { int ret; =20 - ret =3D auxtrace_mmap__read(map, rec->itr, &rec->tool, + ret =3D auxtrace_mmap__read(map, rec->itr, + perf_session__env(rec->session), + &rec->tool, record__process_auxtrace); if (ret < 0) return ret; @@ -789,7 +791,9 @@ static int record__auxtrace_mmap_read_snapshot(struct r= ecord *rec, { int ret; =20 - ret =3D auxtrace_mmap__read_snapshot(map, rec->itr, &rec->tool, + ret =3D auxtrace_mmap__read_snapshot(map, rec->itr, + perf_session__env(rec->session), + &rec->tool, record__process_auxtrace, rec->opts.auxtrace_snapshot_size); if (ret < 0) diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c index 03211c2623de..ebd32f1b8f12 100644 --- a/tools/perf/util/auxtrace.c +++ b/tools/perf/util/auxtrace.c @@ -1890,7 +1890,7 @@ int __weak compat_auxtrace_mmap__write_tail(struct au= xtrace_mmap *mm, u64 tail) } =20 static int __auxtrace_mmap__read(struct mmap *map, - struct auxtrace_record *itr, + struct auxtrace_record *itr, struct perf_env *env, const struct perf_tool *tool, process_auxtrace_t fn, bool snapshot, size_t snapshot_size) { @@ -1900,7 +1900,7 @@ static int __auxtrace_mmap__read(struct mmap *map, size_t size, head_off, old_off, len1, len2, padding; union perf_event ev; void *data1, *data2; - int kernel_is_64_bit =3D perf_env__kernel_is_64_bit(evsel__env(NULL)); + int kernel_is_64_bit =3D perf_env__kernel_is_64_bit(env); =20 head =3D auxtrace_mmap__read_head(mm, kernel_is_64_bit); =20 @@ -2002,17 +2002,18 @@ static int __auxtrace_mmap__read(struct mmap *map, } =20 int auxtrace_mmap__read(struct mmap *map, struct auxtrace_record *itr, - const struct perf_tool *tool, process_auxtrace_t fn) + struct perf_env *env, const struct perf_tool *tool, + process_auxtrace_t fn) { - return __auxtrace_mmap__read(map, itr, tool, fn, false, 0); + return __auxtrace_mmap__read(map, itr, env, tool, fn, false, 0); } =20 int auxtrace_mmap__read_snapshot(struct mmap *map, - struct auxtrace_record *itr, + struct auxtrace_record *itr, struct perf_env *env, const struct perf_tool *tool, process_auxtrace_t fn, size_t snapshot_size) { - return __auxtrace_mmap__read(map, itr, tool, fn, true, snapshot_size); + return __auxtrace_mmap__read(map, itr, env, tool, fn, true, snapshot_size= ); } =20 /** diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h index b0db84d27b25..f001cbb68f8e 100644 --- a/tools/perf/util/auxtrace.h +++ b/tools/perf/util/auxtrace.h @@ -23,6 +23,7 @@ union perf_event; struct perf_session; struct evlist; struct evsel; +struct perf_env; struct perf_tool; struct mmap; struct perf_sample; @@ -512,10 +513,11 @@ typedef int (*process_auxtrace_t)(const struct perf_t= ool *tool, size_t len1, void *data2, size_t len2); =20 int auxtrace_mmap__read(struct mmap *map, struct auxtrace_record *itr, - const struct perf_tool *tool, process_auxtrace_t fn); + struct perf_env *env, const struct perf_tool *tool, + process_auxtrace_t fn); =20 int auxtrace_mmap__read_snapshot(struct mmap *map, - struct auxtrace_record *itr, + struct auxtrace_record *itr, struct perf_env *env, const struct perf_tool *tool, process_auxtrace_t fn, size_t snapshot_size); =20 --=20 2.49.0.1151.ga128411c76-goog From nobody Tue Dec 16 07:08:45 2025 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A54FA20E00A for ; Tue, 27 May 2025 06:42:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328150; cv=none; b=sGdSircuApwYiUQIXiLSQUDNQKi95Wuv+Ex4I0FXNWDLWJC4U4gVCpLr+C9JXyepOKm8wGX2hmZJKvIW2EvQ51gJAewTI6KzmOuSd4LNAKEvdjPhad2hgv7LenaoR+lXXXaw1+7ClOZ18+BiLJkwX1UHakQugsYwvdfu8FFA1wk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748328150; c=relaxed/simple; bh=g1pTIiVCfL0YGf+X/ae4Tzq0BX6X5BVc25oBmqj1Uck=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=aQafj7uDPQmRGRrWw+b2nNFVtoPGEDVIbtYVDMZFyr10fIudhtiuKCwyIvHzbncdujXmqjgGlZrgAylT5e4z5v7AjPwiy34kk3avWZnOmx5BNZik9Dv7YQbreQ2g3/uoIgVyUEwxJSTAa9kPTuapC8mK+EuTTB71I/rPugoz14U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=VeBmrI++; arc=none smtp.client-ip=209.85.210.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VeBmrI++" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-740774348f6so2585467b3a.1 for ; Mon, 26 May 2025 23:42:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1748328148; x=1748932948; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=qa+bZ6NfDiwN6emHRNVhAg+nUxfKRoBgxQCLCaEZspk=; b=VeBmrI++xktFGYullQdyBFyxZwOhDU+YoUGEDAJoA28CLjhG47p8oG2CNg+jtCyYb+ AGBHFVKxgnT5VYACCE2mKqokpkiHreqCgSz61B2iiacd9eGIqtYBoGc+r6yrIFWrRjXH EslH6T2nUnbpG84TWcdOuNkNMx358PuDtwHI1Fw2BCAPALdfjXOWnf6T8Cgb4SSFT9sk 7ejmgYMry8n3aQtla3tHnfvNsf410zfwjcR0Lz3hsDY+hzcV2ZxOSwom5sX4PYp3wcDH fpNJlSIxbI/M7q+yLXiI7jTy5nC/URCdGghwBTiKkw8yVimzEvyYuJGGnTUMfX8uvz9G WZ2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748328148; x=1748932948; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qa+bZ6NfDiwN6emHRNVhAg+nUxfKRoBgxQCLCaEZspk=; b=IYCqLcLHg6Q4lzD52hRZI/DbZZa/pA5XY+1GNi4hGPtr+kg93aOlzIVSOdHGy440up IEftHrEvJlxQMwBaLb/eQv+na1C7M5gaCCVkEyEKnHybxOEC+wfAszWSQ30x5asvFILG zKVvXzVIuxHTVCDlmD10qHW0ai2cbxJ6ZcqoCTgwUCIhiJDaKQUedOL+XS0arTNeBC4L J2ogTpFeWkoEjcPNb4kgy9L3D7L3s8ET5MMRiDOs4kZGMAitcnCFAI511wwAHWs3a6Ac NNRk12WW2oN9On6PiHFNgME8z7zYOdfIN3J/iLcSSBSp9s1iF0UchZJmntXrzNTAQrUv F3bQ== X-Forwarded-Encrypted: i=1; AJvYcCWOtNVnWNPaQX58p4vlLYq4jJ+pqX8VJJkLaRFzvKOonaLls8OkeaU/YPZpKhsf4ABckNXRzeAR3gi/hCQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwrLfQwh70Ys3/MMRzgxxKmgGkbJT2MCTZGYYC6or8TylhKmIN7 zgDc6e+1aw6uv80wd+XV8PZJZ7OKS9q4cWvGysLIxzNjCnGU3nrm037dPqwUPLPrtjUQESypDVj O70h64tZ9KQ== X-Google-Smtp-Source: AGHT+IFaY7Epe7TFUjEZoxVGrbJT8LG2DopMwMAi0GAGc08duoLIMdGL5EAMIRWUbJCsETCGf/3a/aibp3BX X-Received: from pfjd1.prod.google.com ([2002:a05:6a00:2441:b0:730:743a:f2b0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:ace:b0:740:6f69:8d94 with SMTP id d2e1a72fcca58-745fdac936dmr18806567b3a.0.1748328147867; Mon, 26 May 2025 23:42:27 -0700 (PDT) Date: Mon, 26 May 2025 23:41:53 -0700 In-Reply-To: <20250527064153.149939-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250527064153.149939-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250527064153.149939-12-irogers@google.com> Subject: [PATCH v1 11/11] perf env: Remove global perf_env From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Charlie Jenkins , Colin Ian King , Andi Kleen , Dmitry Vyukov , Ravi Bangoria , Graham Woodward , Ilkka Koskinen , Zhongqiu Han , Yicong Yang , Howard Chu , "Dr. David Alan Gilbert" , Levi Yun , Weilin Wang , Michael Petlan , "=?UTF-8?q?Krzysztof=20=C5=81opatowski?=" , Christophe Leroy , "Masami Hiramatsu (Google)" , Chun-Tse Shao , Ben Gainey , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The global perf_env was used for the host, but if a perf_env wasn't easy to come by it was used in a lot of places where potentially recorded and host data could be confused. Remove the global variable as now the majority of accesses retrieve the perf_env for the host from the session. Signed-off-by: Ian Rogers --- tools/perf/perf.c | 3 --- tools/perf/util/bpf-event.c | 2 +- tools/perf/util/env.c | 2 -- tools/perf/util/env.h | 2 -- tools/perf/util/evsel.c | 2 +- tools/perf/util/session.c | 2 +- 6 files changed, 3 insertions(+), 10 deletions(-) diff --git a/tools/perf/perf.c b/tools/perf/perf.c index f0617cc41f5f..88c60ecf3395 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c @@ -346,12 +346,9 @@ static int run_builtin(struct cmd_struct *p, int argc,= const char **argv) use_pager =3D 1; commit_pager_choice(); =20 - perf_env__init(&perf_env); - perf_env__set_cmdline(&perf_env, argc, argv); status =3D p->fn(argc, argv); perf_config__exit(); exit_browser(status); - perf_env__exit(&perf_env); =20 if (status) return status & 0xff; diff --git a/tools/perf/util/bpf-event.c b/tools/perf/util/bpf-event.c index c67e3ec938d0..f27890d5cfbb 100644 --- a/tools/perf/util/bpf-event.c +++ b/tools/perf/util/bpf-event.c @@ -184,7 +184,7 @@ static int perf_event__synthesize_one_bpf_prog(struct p= erf_session *session, * for perf-record and perf-report use header.env; * otherwise, use global perf_env. */ - env =3D session->data ? perf_session__env(session) : &perf_env; + env =3D perf_session__env(session); =20 arrays =3D 1UL << PERF_BPIL_JITED_KSYMS; arrays |=3D 1UL << PERF_BPIL_JITED_FUNC_LENS; diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index b363c933e782..02cf7670a52b 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -17,8 +17,6 @@ #include "strbuf.h" #include "trace/beauty/beauty.h" =20 -struct perf_env perf_env; - #ifdef HAVE_LIBBPF_SUPPORT #include "bpf-event.h" #include "bpf-utils.h" diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index d90e343cf1fa..9c6eaaf68c3e 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -150,8 +150,6 @@ enum perf_compress_type { struct bpf_prog_info_node; struct btf_node; =20 -extern struct perf_env perf_env; - void perf_env__exit(struct perf_env *env); =20 int perf_env__kernel_is_64_bit(struct perf_env *env); diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 24c93ea5ba0a..988fe5c4137a 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -3849,7 +3849,7 @@ struct perf_env *evsel__env(struct evsel *evsel) { struct perf_session *session =3D evsel__session(evsel); =20 - return session ? perf_session__env(session) : &perf_env; + return session ? perf_session__env(session) : NULL; } =20 static int store_evsel_ids(struct evsel *evsel, struct evlist *evlist) diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 9b477cc73c85..94564b0f2b49 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -192,7 +192,7 @@ struct perf_session *__perf_session__new(struct perf_da= ta *data, symbol_conf.kallsyms_name =3D perf_data__kallsyms_name(data); } } else { - session->machines.host.env =3D host_env ?: &perf_env; + session->machines.host.env =3D host_env; } if (session->evlist) session->evlist->session =3D session; --=20 2.49.0.1151.ga128411c76-goog