From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 22A5437F012 for ; Mon, 13 Apr 2026 04:12:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053524; cv=none; b=BBRad14Xwwq7HqEeBlphCXGVjlfY6FVTVPLO4AGFBEyQf0OJGmuG9c6AfH6HKSYW/1g+4o8I+wYa8OIPYbNQgGYG/7grePfe2z1uowi8FBPnybjfZYBeNRD7gIBrnk2/pQrGLxTAbg+B8n7piwvM3HR25LrBKZqed9Aw7BkdgJ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053524; c=relaxed/simple; bh=n2JtyMg3dnFRI+CN9oMKk3aLsRiKCNqRLI02Htuc8WQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=havRI/HiIY3zMcfYE07LoZlFD2yO33raNGiji9YAk921D7RDkvj31rnRz53TPPswQJdHC/of3/NSpm8UpWXbNCnLdkfjDS1eIhFZZK1uC/gejMaY76VGL2H4mec01FNVRPlPvuFEDbMSz+3jAv3CL2C02A11WDRxShXjyMjlh9Y= 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=v1egiANn; arc=none smtp.client-ip=74.125.82.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="v1egiANn" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2d9da2559aeso567161eec.0 for ; Sun, 12 Apr 2026 21:12:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053519; x=1776658319; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=6s1x6GuiQBbflIgwRlrovSdwQa1IJTr9Kbd8z5gwHns=; b=v1egiANnu5TjJtRUAQ2b7gbtVrQ3VdA4LJkDugUyUxekXeXo0z3KUtWWh8ME6SYG4K JEh9w6FzHtCfDGeAxKdsg6howt/chOPNZbP4mvmqXBAecA8zFBLWPfbZAYZksO5PpMMc JsjFGiix7vOfYytYoTt1GgXHjYhcm2B4fBBhFbeHl/YPLnnqthEP2xV2PRZISCz1pc+U IArLsIWWRtVLqKN+sBB4/cQlxIghNgu4O0AqnhUzhuW9G0WZ2n9OtI7y1vnzzWaeaZtY kqT9ggKBI5ePKzBDFW6lI0hCx+hjuR552NHti/rZBQVhrGz9meAxjYOyVfCyNbUOaouq fygA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053519; x=1776658319; h=cc: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=6s1x6GuiQBbflIgwRlrovSdwQa1IJTr9Kbd8z5gwHns=; b=AeyPD4H98s7hYX6CbP+lNUGftfYZl4ZUEsmj/UB80lyVUCkxRRQMJ/cXM+PeWvKMrk A9dz1IvIx3fAL4zQqxcmS0Tp5gR2A3W1bjjSWrsFJwL6toXZRfGAMxw555ca55Pjg8Oi XXgxFegTAhe+Oc1hI/MM/rDczXCZ6Xg/dSFDoB/QOIAYr6BAZgDFZCtJZT/Gkh1SMDak Iy72EUkINAxQV7xry3hFhp5pIOH369SPekVuHnsCjGh9wY4h+Ct3ZtleJjL+5SVHgMEf JMowXr3A5jf9DebGyizd7B5GCdYm6Jw4NEUB13K9+1oUf9NDpDhkOVTn+Ia4/+bUjCqN 3rxQ== X-Forwarded-Encrypted: i=1; AFNElJ/pjsGM3dRgfVfuHb3jB8JtmN3OI9oAGwqOx5TCYw2HSLQsAl3hO4WkDzR6JOALq38F+GooNGB9kAMWbVI=@vger.kernel.org X-Gm-Message-State: AOJu0YyAAGvvxu+KoJe6Sp1mrxUxJTfFIGgSOidCnqQZPQExw9mNYZvX Vi0FoVW3dhHkbH7o21CE1ROYU4C62Nay2Or8iTIROb80afhizW/pmVzxO32shyN/k3TowchDPM+ hYH2x8xSZjg== X-Received: from dycnl10.prod.google.com ([2002:a05:7300:d10a:b0:2d9:6d60:48e5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:e614:b0:2be:142f:d499 with SMTP id 5a478bee46e88-2d589463d7bmr6511387eec.16.1776053518582; Sun, 12 Apr 2026 21:11:58 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:11 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-2-irogers@google.com> Subject: [PATCH v12 01/33] perf sample: Fix documentation typo From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" s/PEF/PERF/ Signed-off-by: Ian Rogers --- tools/perf/util/sample.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/sample.h b/tools/perf/util/sample.h index ca0c407c4423..e556c9b656ea 100644 --- a/tools/perf/util/sample.h +++ b/tools/perf/util/sample.h @@ -126,7 +126,7 @@ struct perf_sample { u64 time; /** @addr: The sample event PERF_SAMPLE_ADDR value. */ u64 addr; - /** @id: The sample event PERF_SAMPLE_ID or PEF_SAMPLE_IDENTIFIER value. = */ + /** @id: The sample event PERF_SAMPLE_ID or PERF_SAMPLE_IDENTIFIER value.= */ u64 id; /** @stream_id: The sample event PERF_SAMPLE_STREAM_ID value. */ u64 stream_id; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 F196A37E310 for ; Mon, 13 Apr 2026 04:12:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053530; cv=none; b=FBnGTZdYO9vH5uZTqpEi2xlbFiQL/tEdcs3qLF9XAkeOQPd7A0NFDiKfunUuINVdAm0lRpH0lWbeNLvwyDwMklbl9QWXwALHqOMIog7GkiA1W8Nt05HvecMEHH5JGZU9oI9lzQv5eQ5nH8gv2/0oHamtGdALyxfsp4d2qCW/f+c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053530; c=relaxed/simple; bh=Vb2j/URb3QO7BAssSKxkK5mAjrJs/pLZhsGaxkgHYgM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=X+YqYWLre8MTEE08C2YxJXkFxXZk/yFCIi+xkiKWBTpQd1Ey4pK9fcAvRKpLyaIVXNPQxOpEknSQLCjhV4YQLMjsvECiZzViNO0iWjsO58BY2aLbrhGbddPa7gBWoT8Aj/h0mZlUHo8rR/m8CLSvkhlGKiyOJ3cG09N8mGUn8Zs= 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=I7reYe16; arc=none smtp.client-ip=74.125.82.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="I7reYe16" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2ba9a744f7dso5025784eec.0 for ; Sun, 12 Apr 2026 21:12:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053521; x=1776658321; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=oAQ3kf9+7lnpDXcb3kNRnHyobYDSr9TH1cF4PamcK4M=; b=I7reYe16VzroMD/nXrKwjSQgpVyuc3+1h8s4uBCzXy/pDVdm4hw6755fM70IBkQc6Y en0h7McmuDAnwnrUqZQIPiVGpO4XrB8yttSNlvcRsD6Oml2C8nNaI0r9yqSiDQT3pkNL Zk9gpKQ3UBLNXsExZxOg1C6FcvLA7uEOnSkoAc+lJ8v8PuDw3CylPMY2U9u320DLpQXv 7Uu1jYOQOtbH5Bl/VOO/9b3wfdg2QJ23bpteKEfFdQTOvP92d9DTLW3153po0YLGlvXg Z9xSu5TzjFTIYvQDzqZZ4fweCkVW95okXwFbj5wfEfUTnHi4oubeQPSd0eaqMNnfIdXI KMDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053521; x=1776658321; h=cc: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=oAQ3kf9+7lnpDXcb3kNRnHyobYDSr9TH1cF4PamcK4M=; b=GyKUxqzVGNkAoZItrkm4Zbcm89GP8krIB8R/L23Slqxy6J7SVaLJpeRA+47MjefTBX 2lXoFWzetioA+KORBwLy1gygUETn2EXKUxxk/pBU0VYaAnrwDRdWRiFqdwzRrov4R8i5 SJ+YhaZEXFX7pgoqCSkZCY4MygMpHFdLLYjC019ef9V3OvVE6KXfhLw0cIbjVR6B/GSL ye7p4akNi0cQkYZeAap6RqrA+Ht2QbSawO41AqOe8pxFK64KSRffSIBvdKN1rwEVHilk xmeg6j6wnbQZCgbraqbTXm2bH2TdS3o1/uV2X5qvfpdRKu/CV5H7yo262SpChaNjbjQA P33A== X-Forwarded-Encrypted: i=1; AFNElJ97by8TtG0fmINjyXg5FYpiAsKd/AaU4ewoA/rymdlWyZj5g6e7F948lpSCfjO8dM1N/VarpX1z5W+0i/8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx40S7IK7nvqcAVic7xhOnNSeK27gDE83mtyvKGoRb88Cydrmmn hLEhqUB/qFC7vBdvNvIDdUhC7QAeI30VEVRdKOqsPg8Nb8paeKYG3zIdZCh7gVeiKwc4/foFIsx I2DHMz7QMXQ== X-Received: from dyckx2.prod.google.com ([2002:a05:7300:c7c2:b0:2d3:51a9:d76c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:a89a:b0:2c1:6cfd:73d4 with SMTP id 5a478bee46e88-2d589768f81mr6664667eec.23.1776053520881; Sun, 12 Apr 2026 21:12:00 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:12 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-3-irogers@google.com> Subject: [PATCH v12 02/33] perf tool: Remove evsel from tool APIs that pass the sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now struct perf_sample has the evsel within it there is no need to pass the evsel along with the sample. In the called functions read the sample's evsel in to a variable if there are multiple uses, or use directly if there is just one use - the goal being to leave the code with as little change as possible. Some functions only use the evsel to pass to another function which they also pass the sample, in those cases just pass the sample and get the evsel in the called function. Signed-off-by: Ian Rogers --- tools/perf/builtin-annotate.c | 3 +-- tools/perf/builtin-c2c.c | 2 +- tools/perf/builtin-diff.c | 2 +- tools/perf/builtin-inject.c | 19 ++++++--------- tools/perf/builtin-kmem.c | 2 +- tools/perf/builtin-kvm.c | 5 ++-- tools/perf/builtin-kwork.c | 2 +- tools/perf/builtin-lock.c | 2 +- tools/perf/builtin-mem.c | 1 - tools/perf/builtin-record.c | 3 +-- tools/perf/builtin-report.c | 10 +++----- tools/perf/builtin-sched.c | 4 +-- tools/perf/builtin-script.c | 4 +-- tools/perf/builtin-timechart.c | 2 +- tools/perf/builtin-trace.c | 2 +- tools/perf/util/build-id.c | 3 +-- tools/perf/util/build-id.h | 7 +----- tools/perf/util/data-convert-bt.c | 2 +- tools/perf/util/data-convert-json.c | 5 ++-- tools/perf/util/intel-tpebs.c | 3 +-- tools/perf/util/jitdump.c | 2 +- tools/perf/util/session.c | 38 ++++++++++++++--------------- tools/perf/util/tool.c | 4 +-- tools/perf/util/tool.h | 4 +-- 24 files changed, 55 insertions(+), 76 deletions(-) diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 5e57b78548f4..58e56f826367 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -283,7 +283,6 @@ static int evsel__add_sample(struct evsel *evsel, struc= t perf_sample *sample, static int process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct perf_annotate *ann =3D container_of(tool, struct perf_annotate, to= ol); @@ -302,7 +301,7 @@ static int process_sample_event(const struct perf_tool = *tool, goto out_put; =20 if (!al.filtered && - evsel__add_sample(evsel, sample, &al, ann, machine)) { + evsel__add_sample(sample->evsel, sample, &al, ann, machine)) { pr_warning("problem incrementing symbol count, " "skipping event\n"); ret =3D -1; diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index 72a7802775ee..7593e5908fcc 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -314,9 +314,9 @@ static void perf_c2c__evsel_hists_inc_stats(struct evse= l *evsel, static int process_sample_event(const struct perf_tool *tool __maybe_unuse= d, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { + struct evsel *evsel =3D sample->evsel; struct c2c_hists *c2c_hists =3D &c2c.hists; struct c2c_hist_entry *c2c_he; struct c2c_stats stats =3D { .nr_entries =3D 0, }; diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index 1b3df868849a..82e9e514922b 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c @@ -390,11 +390,11 @@ static struct hist_entry_ops block_hist_ops =3D { static int diff__process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct perf_diff *pdiff =3D container_of(tool, struct perf_diff, tool); struct addr_location al; + struct evsel *evsel =3D sample->evsel; struct hists *hists =3D evsel__hists(evsel); struct hist_entry_iter iter =3D { .evsel =3D evsel, diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index f174bc69cec4..6ba489452777 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -362,18 +362,17 @@ typedef int (*inject_handler)(const struct perf_tool = *tool, static int perf_event__repipe_sample(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { - struct perf_inject *inject =3D container_of(tool, struct perf_inject, - tool); + struct perf_inject *inject =3D container_of(tool, struct perf_inject, too= l); + struct evsel *evsel =3D sample->evsel; =20 if (evsel && evsel->handler) { inject_handler f =3D evsel->handler; return f(tool, event, sample, evsel, machine); } =20 - build_id__mark_dso_hit(tool, event, sample, evsel, machine); + build_id__mark_dso_hit(tool, event, sample, machine); =20 if (inject->itrace_synth_opts.set && sample->aux_sample.size) { event =3D perf_inject__cut_auxtrace_sample(inject, event, sample); @@ -387,10 +386,10 @@ static int perf_event__repipe_sample(const struct per= f_tool *tool, static int perf_event__convert_sample_callchain(const struct perf_tool *to= ol, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct perf_inject *inject =3D container_of(tool, struct perf_inject, too= l); + struct evsel *evsel =3D sample->evsel; struct callchain_cursor *cursor =3D get_tls_callchain_cursor(); union perf_event *event_copy =3D (void *)inject->event_copy; struct callchain_cursor_node *node; @@ -987,10 +986,8 @@ static int mark_dso_hit_callback(struct callchain_curs= or_node *node, void *data) args->mmap_evsel, map, /*sample_in_dso=3D*/false); } =20 -int perf_event__inject_buildid(const struct perf_tool *tool, union perf_ev= ent *event, - struct perf_sample *sample, - struct evsel *evsel __maybe_unused, - struct machine *machine) +static int perf_event__inject_buildid(const struct perf_tool *tool, union = perf_event *event, + struct perf_sample *sample, struct machine *machine) { struct addr_location al; struct thread *thread; @@ -1020,7 +1017,7 @@ int perf_event__inject_buildid(const struct perf_tool= *tool, union perf_event *e /*sample_in_dso=3D*/true); } =20 - sample__for_each_callchain_node(thread, evsel, sample, PERF_MAX_STACK_DEP= TH, + sample__for_each_callchain_node(thread, sample->evsel, sample, PERF_MAX_S= TACK_DEPTH, /*symbols=3D*/false, mark_dso_hit_callback, &args); thread__put(thread); repipe: @@ -1101,7 +1098,7 @@ static int perf_inject__sched_stat(const struct perf_= tool *tool, sample_sw.time =3D sample->time; perf_event__synthesize_sample(event_sw, evsel->core.attr.sample_type, evsel->core.attr.read_format, &sample_sw); - build_id__mark_dso_hit(tool, event_sw, &sample_sw, evsel, machine); + build_id__mark_dso_hit(tool, event_sw, &sample_sw, machine); ret =3D perf_event__repipe(tool, event_sw, &sample_sw, machine); perf_sample__exit(&sample_sw); return ret; diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 9c64a0d74823..45b383fa9ce9 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -960,9 +960,9 @@ typedef int (*tracepoint_handler)(struct evsel *evsel, static int process_sample_event(const struct perf_tool *tool __maybe_unuse= d, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { + struct evsel *evsel =3D sample->evsel; int err =3D 0; struct thread *thread =3D machine__findnew_thread(machine, sample->pid, sample->tid); diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 0c5e6b3aac74..5e8e6fde097a 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -941,9 +941,9 @@ struct vcpu_event_record *per_vcpu_record(struct thread= *thread, =20 static bool handle_kvm_event(struct perf_kvm_stat *kvm, struct thread *thread, - struct evsel *evsel, struct perf_sample *sample) { + struct evsel *evsel =3D sample->evsel; struct vcpu_event_record *vcpu_record; struct event_key key =3D { .key =3D INVALID_KEY, .exit_reasons =3D kvm->exit_reasons }; @@ -1133,7 +1133,6 @@ static bool skip_sample(struct perf_kvm_stat *kvm, static int process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { int err =3D 0; @@ -1156,7 +1155,7 @@ static int process_sample_event(const struct perf_too= l *tool, return -1; } =20 - if (!handle_kvm_event(kvm, thread, evsel, sample)) + if (!handle_kvm_event(kvm, thread, sample)) err =3D -1; =20 thread__put(thread); diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index 9d3a4c779a41..d4bb19ed91b5 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -1955,9 +1955,9 @@ typedef int (*tracepoint_handler)(const struct perf_t= ool *tool, static int perf_kwork__process_tracepoint_sample(const struct perf_tool *t= ool, union perf_event *event __maybe_unused, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { + struct evsel *evsel =3D sample->evsel; int err =3D 0; =20 if (evsel->handler !=3D NULL) { diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index 5585aeb97684..4d8ddf6391e8 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -1430,9 +1430,9 @@ typedef int (*tracepoint_handler)(struct evsel *evsel, static int process_sample_event(const struct perf_tool *tool __maybe_unuse= d, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { + struct evsel *evsel =3D sample->evsel; int err =3D 0; struct thread *thread =3D machine__findnew_thread(machine, sample->pid, sample->tid); diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c index d43500b92a7b..6101a26b3a78 100644 --- a/tools/perf/builtin-mem.c +++ b/tools/perf/builtin-mem.c @@ -255,7 +255,6 @@ dump_raw_samples(const struct perf_tool *tool, static int process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel __maybe_unused, struct machine *machine) { return dump_raw_samples(tool, event, sample, machine); diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 4a5eba498c02..9ba787406919 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -1489,7 +1489,6 @@ static void set_timestamp_boundary(struct record *rec= , u64 sample_time) static int process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct record *rec =3D container_of(tool, struct record, tool); @@ -1500,7 +1499,7 @@ static int process_sample_event(const struct perf_too= l *tool, return 0; =20 rec->samples++; - return build_id__mark_dso_hit(tool, event, sample, evsel, machine); + return build_id__mark_dso_hit(tool, event, sample, machine); } =20 static int process_buildids(struct record *rec) diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 95c0bdba6b11..848e2ccb1420 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -264,10 +264,10 @@ static int process_feature_event(const struct perf_to= ol *tool, static int process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct report *rep =3D container_of(tool, struct report, tool); + struct evsel *evsel =3D sample->evsel; struct addr_location al; struct hist_entry_iter iter =3D { .evsel =3D evsel, @@ -344,7 +344,6 @@ static int process_sample_event(const struct perf_tool = *tool, static int process_read_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample __maybe_unused, - struct evsel *evsel, struct machine *machine __maybe_unused) { struct report *rep =3D container_of(tool, struct report, tool); @@ -352,7 +351,7 @@ static int process_read_event(const struct perf_tool *t= ool, if (rep->show_threads) { int err =3D perf_read_values_add_value(&rep->show_threads_values, event->read.pid, event->read.tid, - evsel, + sample->evsel, event->read.value); =20 if (err) @@ -778,11 +777,10 @@ static void report__output_resort(struct report *rep) =20 static int count_sample_event(const struct perf_tool *tool __maybe_unused, union perf_event *event __maybe_unused, - struct perf_sample *sample __maybe_unused, - struct evsel *evsel, + struct perf_sample *sample, struct machine *machine __maybe_unused) { - struct hists *hists =3D evsel__hists(evsel); + struct hists *hists =3D evsel__hists(sample->evsel); =20 hists__inc_nr_events(hists); return 0; diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 555247568e7a..0713e6b28f92 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c @@ -1867,9 +1867,9 @@ typedef int (*tracepoint_handler)(const struct perf_t= ool *tool, static int perf_sched__process_tracepoint_sample(const struct perf_tool *t= ool __maybe_unused, union perf_event *event __maybe_unused, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { + struct evsel *evsel =3D sample->evsel; int err =3D 0; =20 if (evsel->handler !=3D NULL) { @@ -3184,10 +3184,10 @@ typedef int (*sched_handler)(const struct perf_tool= *tool, static int perf_timehist__process_sample(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct perf_sched *sched =3D container_of(tool, struct perf_sched, tool); + struct evsel *evsel =3D sample->evsel; int err =3D 0; struct perf_cpu this_cpu =3D { .cpu =3D sample->cpu, diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index c8ac9f01a36b..3ffb8baf40f6 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -2645,10 +2645,10 @@ static bool filter_cpu(struct perf_sample *sample) static int process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct perf_script *scr =3D container_of(tool, struct perf_script, tool); + struct evsel *evsel =3D sample->evsel; struct addr_location al; struct addr_location addr_al; int ret =3D 0; @@ -2729,10 +2729,10 @@ static int process_sample_event(const struct perf_t= ool *tool, static int process_deferred_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct perf_script *scr =3D container_of(tool, struct perf_script, tool); + struct evsel *evsel =3D sample->evsel; struct perf_event_attr *attr =3D &evsel->core.attr; struct evsel_script *es =3D evsel->priv; unsigned int type =3D output_type(attr->type); diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 28f33e39895d..8692d11ccd29 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -574,10 +574,10 @@ typedef int (*tracepoint_handler)(struct timechart *t= chart, static int process_sample_event(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct timechart *tchart =3D container_of(tool, struct timechart, tool); + struct evsel *evsel =3D sample->evsel; =20 if (evsel->core.attr.sample_type & PERF_SAMPLE_TIME) { if (!tchart->first_time || tchart->first_time > sample->time) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index e58c49d047a2..d9e80740e9ac 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -3464,10 +3464,10 @@ static void trace__set_base_time(struct trace *trac= e, static int trace__process_sample(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine __maybe_unused) { struct trace *trace =3D container_of(tool, struct trace, tool); + struct evsel *evsel =3D sample->evsel; struct thread *thread; int err =3D 0; =20 diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c index fdb35133fde4..55b72235f891 100644 --- a/tools/perf/util/build-id.c +++ b/tools/perf/util/build-id.c @@ -55,7 +55,6 @@ static int mark_dso_hit_callback(struct callchain_cursor_= node *node, void *data int build_id__mark_dso_hit(const struct perf_tool *tool __maybe_unused, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct addr_location al; @@ -74,7 +73,7 @@ int build_id__mark_dso_hit(const struct perf_tool *tool _= _maybe_unused, =20 addr_location__exit(&al); =20 - sample__for_each_callchain_node(thread, evsel, sample, PERF_MAX_STACK_DEP= TH, + sample__for_each_callchain_node(thread, sample->evsel, sample, PERF_MAX_S= TACK_DEPTH, /*symbols=3D*/false, mark_dso_hit_callback, /*data=3D*/NULL); =20 =20 diff --git a/tools/perf/util/build-id.h b/tools/perf/util/build-id.h index 47e621cebe1b..73bad90b06f9 100644 --- a/tools/perf/util/build-id.h +++ b/tools/perf/util/build-id.h @@ -34,12 +34,7 @@ char *__dso__build_id_filename(const struct dso *dso, ch= ar *bf, size_t size, bool is_debug, bool is_kallsyms); =20 int build_id__mark_dso_hit(const struct perf_tool *tool, union perf_event = *event, - struct perf_sample *sample, struct evsel *evsel, - struct machine *machine); - -int perf_event__inject_buildid(const struct perf_tool *tool, union perf_ev= ent *event, - struct perf_sample *sample, struct evsel *evsel, - struct machine *machine); + struct perf_sample *sample, struct machine *machine); =20 bool perf_session__read_build_ids(struct perf_session *session, bool with_= hits); int perf_session__write_buildid_table(struct perf_session *session, diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-conve= rt-bt.c index 3b8f2df823a9..b3f745cff2a7 100644 --- a/tools/perf/util/data-convert-bt.c +++ b/tools/perf/util/data-convert-bt.c @@ -803,10 +803,10 @@ static bool is_flush_needed(struct ctf_stream *cs) static int process_sample_event(const struct perf_tool *tool, union perf_event *_event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine __maybe_unused) { struct convert *c =3D container_of(tool, struct convert, tool); + struct evsel *evsel =3D sample->evsel; struct evsel_priv *priv =3D evsel->priv; struct ctf_writer *cw =3D &c->writer; struct ctf_stream *cs; diff --git a/tools/perf/util/data-convert-json.c b/tools/perf/util/data-con= vert-json.c index d526c91312ed..a7da93a7ff0e 100644 --- a/tools/perf/util/data-convert-json.c +++ b/tools/perf/util/data-convert-json.c @@ -159,13 +159,12 @@ static void output_sample_callchain_entry(const struc= t perf_tool *tool, static int process_sample_event(const struct perf_tool *tool, union perf_event *event __maybe_unused, struct perf_sample *sample, - struct evsel *evsel __maybe_unused, struct machine *machine) { struct convert_json *c =3D container_of(tool, struct convert_json, tool); FILE *out =3D c->out; struct addr_location al; - u64 sample_type =3D __evlist__combined_sample_type(evsel->evlist); + u64 sample_type =3D __evlist__combined_sample_type(sample->evsel->evlist); u8 cpumode =3D PERF_RECORD_MISC_USER; =20 addr_location__init(&al); @@ -245,7 +244,7 @@ static int process_sample_event(const struct perf_tool = *tool, =20 #ifdef HAVE_LIBTRACEEVENT if (sample->raw_data) { - struct tep_event *tp_format =3D evsel__tp_format(evsel); + struct tep_event *tp_format =3D evsel__tp_format(sample->evsel); struct tep_format_field **fields =3D tp_format ? tep_event_fields(tp_for= mat) : NULL; =20 if (fields) { diff --git a/tools/perf/util/intel-tpebs.c b/tools/perf/util/intel-tpebs.c index 8b615dc94e9e..ed8cfe2ba2fa 100644 --- a/tools/perf/util/intel-tpebs.c +++ b/tools/perf/util/intel-tpebs.c @@ -185,7 +185,6 @@ static bool should_ignore_sample(const struct perf_samp= le *sample, const struct static int process_sample_event(const struct perf_tool *tool __maybe_unuse= d, union perf_event *event __maybe_unused, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine __maybe_unused) { struct tpebs_retire_lat *t; @@ -196,7 +195,7 @@ static int process_sample_event(const struct perf_tool = *tool __maybe_unused, mutex_unlock(tpebs_mtx_get()); return 0; } - t =3D tpebs_retire_lat__find(evsel); + t =3D tpebs_retire_lat__find(sample->evsel); if (!t) { mutex_unlock(tpebs_mtx_get()); return -EINVAL; diff --git a/tools/perf/util/jitdump.c b/tools/perf/util/jitdump.c index e0ce8b904729..52e6ffac2b3e 100644 --- a/tools/perf/util/jitdump.c +++ b/tools/perf/util/jitdump.c @@ -642,7 +642,7 @@ static int jit_repipe_code_move(struct jit_buf_desc *jd= , union jr_entry *jr) =20 ret =3D jit_inject_event(jd, event); if (!ret) - build_id__mark_dso_hit(tool, event, &sample, NULL, jd->machine); + build_id__mark_dso_hit(tool, event, &sample, jd->machine); out: perf_sample__exit(&sample); return ret; diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index fe0de2a0277f..1e25892963b7 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -1117,9 +1117,10 @@ char *get_page_size_name(u64 size, char *str) return str; } =20 -static void dump_sample(struct machine *machine, struct evsel *evsel, unio= n perf_event *event, +static void dump_sample(struct machine *machine, union perf_event *event, struct perf_sample *sample) { + struct evsel *evsel =3D sample->evsel; u64 sample_type; char str[PAGE_SIZE_NAME_LEN]; uint16_t e_machine =3D EM_NONE; @@ -1183,9 +1184,10 @@ static void dump_sample(struct machine *machine, str= uct evsel *evsel, union perf sample_read__printf(sample, evsel->core.attr.read_format); } =20 -static void dump_deferred_callchain(struct evsel *evsel, union perf_event = *event, - struct perf_sample *sample) +static void dump_deferred_callchain(union perf_event *event, struct perf_s= ample *sample) { + struct evsel *evsel =3D sample->evsel; + if (!dump_trace) return; =20 @@ -1291,7 +1293,7 @@ static int deliver_sample_value(struct evlist *evlist, return 0; =20 sample->evsel =3D container_of(sid->evsel, struct evsel, core); - ret =3D tool->sample(tool, event, sample, sample->evsel, machine); + ret =3D tool->sample(tool, event, sample, machine); sample->evsel =3D saved_evsel; return ret; } @@ -1323,8 +1325,9 @@ static int deliver_sample_group(struct evlist *evlist, =20 static int evlist__deliver_sample(struct evlist *evlist, const struct perf= _tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) + struct machine *machine) { + struct evsel *evsel =3D sample->evsel; /* We know evsel !=3D NULL. */ u64 sample_type =3D evsel->core.attr.sample_type; u64 read_format =3D evsel->core.attr.read_format; @@ -1332,7 +1335,7 @@ static int evlist__deliver_sample(struct evlist *evli= st, const struct perf_tool =20 /* Standard sample delivery. */ if (!(sample_type & PERF_SAMPLE_READ)) - return tool->sample(tool, event, sample, evsel, machine); + return tool->sample(tool, event, sample, machine); =20 /* For PERF_SAMPLE_READ we have either single or group mode. */ if (read_format & PERF_FORMAT_GROUP) @@ -1371,8 +1374,7 @@ static int evlist__deliver_deferred_callchain(struct = evlist *evlist, struct evsel *saved_evsel =3D sample->evsel; =20 sample->evsel =3D evlist__id2evsel(evlist, sample->id); - ret =3D tool->callchain_deferred(tool, event, sample, - sample->evsel, machine); + ret =3D tool->callchain_deferred(tool, event, sample, machine); sample->evsel =3D saved_evsel; return ret; } @@ -1400,7 +1402,7 @@ static int evlist__deliver_deferred_callchain(struct = evlist *evlist, =20 orig_sample.evsel =3D evlist__id2evsel(evlist, orig_sample.id); ret =3D evlist__deliver_sample(evlist, tool, de->event, - &orig_sample, orig_sample.evsel, machine); + &orig_sample, machine); =20 perf_sample__exit(&orig_sample); list_del(&de->list); @@ -1438,7 +1440,7 @@ static int session__flush_deferred_samples(struct per= f_session *session, =20 sample.evsel =3D evlist__id2evsel(evlist, sample.id); ret =3D evlist__deliver_sample(evlist, tool, de->event, - &sample, sample.evsel, machine); + &sample, machine); =20 perf_sample__exit(&sample); list_del(&de->list); @@ -1458,7 +1460,6 @@ static int machines__deliver_event(struct machines *m= achines, const struct perf_tool *tool, u64 file_offset, const char *file_path) { - struct evsel *evsel; struct machine *machine; =20 dump_event(evlist, event, file_offset, sample, file_path); @@ -1468,21 +1469,20 @@ static int machines__deliver_event(struct machines = *machines, else assert(sample->evsel =3D=3D evlist__id2evsel(evlist, sample->id)); =20 - evsel =3D sample->evsel; machine =3D machines__find_for_cpumode(machines, event, sample); =20 switch (event->header.type) { case PERF_RECORD_SAMPLE: - if (evsel =3D=3D NULL) { + if (sample->evsel =3D=3D NULL) { ++evlist->stats.nr_unknown_id; return 0; } if (machine =3D=3D NULL) { ++evlist->stats.nr_unprocessable_samples; - dump_sample(machine, evsel, event, sample); + dump_sample(machine, event, sample); return 0; } - dump_sample(machine, evsel, event, sample); + dump_sample(machine, event, sample); if (sample->deferred_callchain && tool->merge_deferred_callchains) { struct deferred_event *de =3D malloc(sizeof(*de)); size_t sz =3D event->header.size; @@ -1499,7 +1499,7 @@ static int machines__deliver_event(struct machines *m= achines, list_add_tail(&de->list, &evlist->deferred_samples); return 0; } - return evlist__deliver_sample(evlist, tool, event, sample, evsel, machin= e); + return evlist__deliver_sample(evlist, tool, event, sample, machine); case PERF_RECORD_MMAP: return tool->mmap(tool, event, sample, machine); case PERF_RECORD_MMAP2: @@ -1527,8 +1527,8 @@ static int machines__deliver_event(struct machines *m= achines, evlist->stats.total_lost_samples +=3D event->lost_samples.lost; return tool->lost_samples(tool, event, sample, machine); case PERF_RECORD_READ: - dump_read(evsel, event); - return tool->read(tool, event, sample, evsel, machine); + dump_read(sample->evsel, event); + return tool->read(tool, event, sample, machine); case PERF_RECORD_THROTTLE: return tool->throttle(tool, event, sample, machine); case PERF_RECORD_UNTHROTTLE: @@ -1557,7 +1557,7 @@ static int machines__deliver_event(struct machines *m= achines, case PERF_RECORD_AUX_OUTPUT_HW_ID: return tool->aux_output_hw_id(tool, event, sample, machine); case PERF_RECORD_CALLCHAIN_DEFERRED: - dump_deferred_callchain(evsel, event, sample); + dump_deferred_callchain(event, sample); return evlist__deliver_deferred_callchain(evlist, tool, event, sample, machine); default: diff --git a/tools/perf/util/tool.c b/tools/perf/util/tool.c index 013c7839e2cf..0f285a2574c8 100644 --- a/tools/perf/util/tool.c +++ b/tools/perf/util/tool.c @@ -110,7 +110,6 @@ static int process_event_synth_event_update_stub(const = struct perf_tool *tool __ int process_event_sample_stub(const struct perf_tool *tool __maybe_unused, union perf_event *event __maybe_unused, struct perf_sample *sample __maybe_unused, - struct evsel *evsel __maybe_unused, struct machine *machine __maybe_unused) { dump_printf(": unhandled!\n"); @@ -348,12 +347,11 @@ bool perf_tool__compressed_is_stub(const struct perf_= tool *tool) static int delegate_ ## name(const struct perf_tool *tool, \ union perf_event *event, \ struct perf_sample *sample, \ - struct evsel *evsel, \ struct machine *machine) \ { \ struct delegate_tool *del_tool =3D container_of(tool, struct delegate_to= ol, tool); \ struct perf_tool *delegate =3D del_tool->delegate; \ - return delegate->name(delegate, event, sample, evsel, machine); \ + return delegate->name(delegate, event, sample, machine); \ } CREATE_DELEGATE_SAMPLE(read); CREATE_DELEGATE_SAMPLE(sample); diff --git a/tools/perf/util/tool.h b/tools/perf/util/tool.h index 2d9a4b1ca9d0..2a4f124ffd8d 100644 --- a/tools/perf/util/tool.h +++ b/tools/perf/util/tool.h @@ -9,7 +9,6 @@ struct perf_session; union perf_event; struct evlist; -struct evsel; struct perf_sample; struct perf_tool; struct machine; @@ -17,7 +16,7 @@ struct ordered_events; =20 typedef int (*event_sample)(const struct perf_tool *tool, union perf_event= *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine); + struct machine *machine); =20 typedef int (*event_op)(const struct perf_tool *tool, union perf_event *ev= ent, struct perf_sample *sample, struct machine *machine); @@ -103,7 +102,6 @@ bool perf_tool__compressed_is_stub(const struct perf_to= ol *tool); int process_event_sample_stub(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine); =20 struct delegate_tool { --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.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 489BB37DE93 for ; Mon, 13 Apr 2026 04:12:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053534; cv=none; b=pLq4n9uYT2oxsw8IYmxoxuq4/H7PFsRDt8QGwi2XbF6kQPBeNiEzhnnjYaQ9EcnKWKZHSMxlHPsas2ZmuRS2EmlSUVGljkM50/H1eOg1osXpRcz3F1JQ2TEck6a1AN44mHtFoOy+7OebQK+CniAtYtmyzHb+ETPdTrpwVn1TE/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053534; c=relaxed/simple; bh=o+Xes5abuH+yASF/5nAM10kbXFW/dLHGpz6yw+ZAltA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=NIWgtfhGhQQOnci/6dqn91rmgqC5R0FxU46eDErXlYddM7N0SWNZbn8ZHh3U16o6RE+Lrf2P1dAwS7CB5jvtkRoUzhPc4iuf4MOrJHr7ZP02xBiRoBslKrxVpjUuMPxcdczT+e9JlqSNZID13ig7ze12fVjmax/aCWOV9P1FJMY= 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=qP38JabL; arc=none smtp.client-ip=74.125.82.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="qP38JabL" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c21dbc9c1so12912155c88.0 for ; Sun, 12 Apr 2026 21:12:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053524; x=1776658324; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=oannBQ3qlAZji2iUnnBApQPMVduJ0gSlFJ8k8/hJ3qM=; b=qP38JabLlLpsvUZhMKHSu+/wTJP65Q38+hMN6EHVEd9WTX/lTH4wNIw65EXMkh0jLW /449cNAsoKL129tpIJzR7/bFAl/irRhi/XHj77HRUdh9KbqLp0lqwJbikjcp/AhCwoZa i7puo3GTjAwL5QPW7ADtNnD7QzSfhL0B7+8VOD+CbOg7aX9i3Ua/A17Zk9Ox6PJX05Vw 8U5FJZMHotWAexqQ3UsxTAwI8ACUwSPS6ug03t4PYOHE26n9FO/5QrNhM6jp08xYblQ/ uAdZ6FKwUAU7ZTX3mh2jNuOkxQ1skjxibg2CiV7EJVl+bV0UsVQ8zvMZrkhHz6OuU12g 07XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053524; x=1776658324; h=cc: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=oannBQ3qlAZji2iUnnBApQPMVduJ0gSlFJ8k8/hJ3qM=; b=sMcqeXM7RJuZ8nnlAxKvHJ0+5P+rJd3u9Zq1Zl4XGVa+c5TVJV5bbzTw6DueJsejIz 04Az3yZiEyeoWdbRTVMYIsCWktTn8p2duC4cgCSvuE4ntQ//vHnr1I2lt2+c+x19lsDZ s63K3aCeZPtI9BERAETiICJHaUM783Ip2Cpd7AEY/C/C5m01PDGZOE4yOcs6OeL9gvDX 2L602e/3r8nbY+0P+nUzsruY+5lUWYZxkIXT7Gs/yE55PG4eFT/+wXa8I3ule8BVGtm6 XcBTx8osWDFZUv5EuF70NEgTLviVbBj4dZWlr5ZWi6ppHf5ZPaV28thYkuIP5/zg5J/H Tlcw== X-Forwarded-Encrypted: i=1; AJvYcCVberoUKkSskLb6NeZBIN37mQQzH7paFZie7UrlkCvtZ4Itze94NeNShvr2dyviJlfBC+czbpevS+dHWR4=@vger.kernel.org X-Gm-Message-State: AOJu0YyZzCPfj4EjuI9shgzUC2dCUeaJ3WlZ15FZBcwmRJajX4lBMCs4 NeB484AbGLpR28BUm8UVeiFtx6rQFpSyGkc+4c57AXwuS5KZ3Pnj+FeqB3nTFdUAww3KZxO/AhX qbCTdvvoudw== X-Received: from dlbvv26.prod.google.com ([2002:a05:7022:5f1a:b0:12c:1fa5:ab7c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:701b:2513:b0:12c:4928:e58e with SMTP id a92af1059eb24-12c4928e800mr1206278c88.3.1776053524284; Sun, 12 Apr 2026 21:12:04 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:13 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-4-irogers@google.com> Subject: [PATCH v12 03/33] perf kvm: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As the sample now contains the evsel, read the evsel from the sample rather than passing them as a pair. Signed-off-by: Ian Rogers --- tools/perf/builtin-kvm.c | 19 +++-- .../perf/util/kvm-stat-arch/kvm-stat-arm64.c | 17 +++-- .../util/kvm-stat-arch/kvm-stat-loongarch.c | 17 ++--- .../util/kvm-stat-arch/kvm-stat-powerpc.c | 17 ++--- .../perf/util/kvm-stat-arch/kvm-stat-riscv.c | 18 +++-- tools/perf/util/kvm-stat-arch/kvm-stat-s390.c | 20 +++--- tools/perf/util/kvm-stat-arch/kvm-stat-x86.c | 70 ++++++++----------- tools/perf/util/kvm-stat.c | 19 +++-- tools/perf/util/kvm-stat.h | 18 ++--- 9 files changed, 89 insertions(+), 126 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 5e8e6fde097a..d9b9792894a8 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -806,7 +806,6 @@ static bool update_kvm_event(struct perf_kvm_stat *kvm, } =20 static bool is_child_event(struct perf_kvm_stat *kvm, - struct evsel *evsel, struct perf_sample *sample, struct event_key *key) { @@ -818,8 +817,8 @@ static bool is_child_event(struct perf_kvm_stat *kvm, return false; =20 for (; child_ops->name; child_ops++) { - if (evsel__name_is(evsel, child_ops->name)) { - child_ops->get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, child_ops->name)) { + child_ops->get_key(sample, key); return true; } } @@ -917,11 +916,10 @@ static bool handle_end_event(struct perf_kvm_stat *kv= m, =20 static struct vcpu_event_record *per_vcpu_record(struct thread *thread, - struct evsel *evsel, struct perf_sample *sample) { /* Only kvm_entry records vcpu id. */ - if (!thread__priv(thread) && kvm_entry_event(evsel)) { + if (!thread__priv(thread) && kvm_entry_event(sample->evsel)) { struct vcpu_event_record *vcpu_record; struct machine *machine =3D maps__machine(thread__maps(thread)); uint16_t e_machine =3D thread__e_machine(thread, machine, /*e_flags=3D*/= NULL); @@ -932,7 +930,7 @@ struct vcpu_event_record *per_vcpu_record(struct thread= *thread, return NULL; } =20 - vcpu_record->vcpu_id =3D evsel__intval(evsel, sample, vcpu_id_str(e_mach= ine)); + vcpu_record->vcpu_id =3D evsel__intval(sample->evsel, sample, vcpu_id_st= r(e_machine)); thread__set_priv(thread, vcpu_record); } =20 @@ -943,12 +941,11 @@ static bool handle_kvm_event(struct perf_kvm_stat *kv= m, struct thread *thread, struct perf_sample *sample) { - struct evsel *evsel =3D sample->evsel; struct vcpu_event_record *vcpu_record; struct event_key key =3D { .key =3D INVALID_KEY, .exit_reasons =3D kvm->exit_reasons }; =20 - vcpu_record =3D per_vcpu_record(thread, evsel, sample); + vcpu_record =3D per_vcpu_record(thread, sample); if (!vcpu_record) return true; =20 @@ -957,13 +954,13 @@ static bool handle_kvm_event(struct perf_kvm_stat *kv= m, (kvm->trace_vcpu !=3D vcpu_record->vcpu_id)) return true; =20 - if (kvm->events_ops->is_begin_event(evsel, sample, &key)) + if (kvm->events_ops->is_begin_event(sample, &key)) return handle_begin_event(kvm, vcpu_record, &key, sample); =20 - if (is_child_event(kvm, evsel, sample, &key)) + if (is_child_event(kvm, sample, &key)) return handle_child_event(kvm, vcpu_record, &key, sample); =20 - if (kvm->events_ops->is_end_event(evsel, sample, &key)) + if (kvm->events_ops->is_end_event(sample, &key)) return handle_end_event(kvm, vcpu_record, &key, sample); =20 return true; diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-arm64.c b/tools/perf/ut= il/kvm-stat-arch/kvm-stat-arm64.c index c640dcd8af7c..1e76906f719c 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-arm64.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-arm64.c @@ -17,10 +17,11 @@ static const char * const __kvm_events_tp[] =3D { NULL, }; =20 -static void event_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void event_get_key(struct perf_sample *sample, struct event_key *key) { + struct evsel *evsel =3D sample->evsel; + key->info =3D 0; key->key =3D evsel__intval(evsel, sample, kvm_exit_reason(EM_AARCH64)); key->exit_reasons =3D arm64_exit_reasons; @@ -36,19 +37,17 @@ static void event_get_key(struct evsel *evsel, } } =20 -static bool event_begin(struct evsel *evsel, - struct perf_sample *sample __maybe_unused, +static bool event_begin(struct perf_sample *sample, struct event_key *key __maybe_unused) { - return evsel__name_is(evsel, kvm_entry_trace(EM_AARCH64)); + return evsel__name_is(sample->evsel, kvm_entry_trace(EM_AARCH64)); } =20 -static bool event_end(struct evsel *evsel, - struct perf_sample *sample, +static bool event_end(struct perf_sample *sample, struct event_key *key) { - if (evsel__name_is(evsel, kvm_exit_trace(EM_AARCH64))) { - event_get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, kvm_exit_trace(EM_AARCH64))) { + event_get_key(sample, key); return true; } return false; diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-loongarch.c b/tools/per= f/util/kvm-stat-arch/kvm-stat-loongarch.c index b802e516b138..9d6265290f6d 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-loongarch.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-loongarch.c @@ -53,14 +53,12 @@ static const char * const __kvm_events_tp[] =3D { NULL, }; =20 -static bool event_begin(struct evsel *evsel, - struct perf_sample *sample, struct event_key *key) +static bool event_begin(struct perf_sample *sample, struct event_key *key) { - return exit_event_begin(evsel, sample, key); + return exit_event_begin(sample, key); } =20 -static bool event_end(struct evsel *evsel, - struct perf_sample *sample __maybe_unused, +static bool event_end(struct perf_sample *sample, struct event_key *key __maybe_unused) { /* @@ -71,17 +69,16 @@ static bool event_end(struct evsel *evsel, * kvm:kvm_enter means returning to vmm and then to guest * kvm:kvm_reenter means returning to guest immediately */ - return evsel__name_is(evsel, kvm_entry_trace(EM_LOONGARCH)) || - evsel__name_is(evsel, kvm_reenter_trace); + return evsel__name_is(sample->evsel, kvm_entry_trace(EM_LOONGARCH)) || + evsel__name_is(sample->evsel, kvm_reenter_trace); } =20 -static void event_gspr_get_key(struct evsel *evsel, - struct perf_sample *sample, struct event_key *key) +static void event_gspr_get_key(struct perf_sample *sample, struct event_ke= y *key) { unsigned int insn; =20 key->key =3D LOONGARCH_EXCEPTION_OTHERS; - insn =3D evsel__intval(evsel, sample, "inst_word"); + insn =3D evsel__intval(sample->evsel, sample, "inst_word"); =20 switch (insn >> 24) { case 0: diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c b/tools/perf/= util/kvm-stat-arch/kvm-stat-powerpc.c index 42182d70beb6..5158d7e88ee6 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c @@ -28,12 +28,11 @@ static const char * const ppc_book3s_hv_kvm_tp[] =3D { /* 1 extra placeholder for NULL */ static const char *__kvm_events_tp[NR_TPS + 1]; =20 -static void hcall_event_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void hcall_event_get_key(struct perf_sample *sample, struct event_key *key) { key->info =3D 0; - key->key =3D evsel__intval(evsel, sample, "req"); + key->key =3D evsel__intval(sample->evsel, sample, "req"); } =20 static const char *get_hcall_exit_reason(u64 exit_code) @@ -51,18 +50,16 @@ static const char *get_hcall_exit_reason(u64 exit_code) return "UNKNOWN"; } =20 -static bool hcall_event_end(struct evsel *evsel, - struct perf_sample *sample __maybe_unused, +static bool hcall_event_end(struct perf_sample *sample, struct event_key *key __maybe_unused) { - return evsel__name_is(evsel, __kvm_events_tp[3]); + return evsel__name_is(sample->evsel, __kvm_events_tp[3]); } =20 -static bool hcall_event_begin(struct evsel *evsel, - struct perf_sample *sample, struct event_key *key) +static bool hcall_event_begin(struct perf_sample *sample, struct event_key= *key) { - if (evsel__name_is(evsel, __kvm_events_tp[2])) { - hcall_event_get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, __kvm_events_tp[2])) { + hcall_event_get_key(sample, key); return true; } =20 diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-riscv.c b/tools/perf/ut= il/kvm-stat-arch/kvm-stat-riscv.c index 8d4d5d6ce720..e8db8b4f8e2e 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-riscv.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-riscv.c @@ -20,30 +20,28 @@ static const char * const __kvm_events_tp[] =3D { NULL, }; =20 -static void event_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void event_get_key(struct perf_sample *sample, struct event_key *key) { int xlen =3D 64; // TODO: 32-bit support. =20 key->info =3D 0; - key->key =3D evsel__intval(evsel, sample, kvm_exit_reason(EM_RISCV)) & ~C= AUSE_IRQ_FLAG(xlen); + key->key =3D evsel__intval(sample->evsel, sample, + kvm_exit_reason(EM_RISCV)) & ~CAUSE_IRQ_FLAG(xlen); key->exit_reasons =3D riscv_exit_reasons; } =20 -static bool event_begin(struct evsel *evsel, - struct perf_sample *sample __maybe_unused, +static bool event_begin(struct perf_sample *sample, struct event_key *key __maybe_unused) { - return evsel__name_is(evsel, kvm_entry_trace(EM_RISCV)); + return evsel__name_is(sample->evsel, kvm_entry_trace(EM_RISCV)); } =20 -static bool event_end(struct evsel *evsel, - struct perf_sample *sample, +static bool event_end(struct perf_sample *sample, struct event_key *key) { - if (evsel__name_is(evsel, kvm_exit_trace(EM_RISCV))) { - event_get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, kvm_exit_trace(EM_RISCV))) { + event_get_key(sample, key); return true; } return false; diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-s390.c b/tools/perf/uti= l/kvm-stat-arch/kvm-stat-s390.c index 7e29169f5bb0..158372ba0205 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-s390.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-s390.c @@ -18,38 +18,34 @@ define_exit_reasons_table(sie_sigp_order_codes, sigp_or= der_codes); define_exit_reasons_table(sie_diagnose_codes, diagnose_codes); define_exit_reasons_table(sie_icpt_prog_codes, icpt_prog_codes); =20 -static void event_icpt_insn_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void event_icpt_insn_get_key(struct perf_sample *sample, struct event_key *key) { u64 insn; =20 - insn =3D evsel__intval(evsel, sample, "instruction"); + insn =3D evsel__intval(sample->evsel, sample, "instruction"); key->key =3D icpt_insn_decoder(insn); key->exit_reasons =3D sie_icpt_insn_codes; } =20 -static void event_sigp_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void event_sigp_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(evsel, sample, "order_code"); + key->key =3D evsel__intval(sample->evsel, sample, "order_code"); key->exit_reasons =3D sie_sigp_order_codes; } =20 -static void event_diag_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void event_diag_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(evsel, sample, "code"); + key->key =3D evsel__intval(sample->evsel, sample, "code"); key->exit_reasons =3D sie_diagnose_codes; } =20 -static void event_icpt_prog_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void event_icpt_prog_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(evsel, sample, "code"); + key->key =3D evsel__intval(sample->evsel, sample, "code"); key->exit_reasons =3D sie_icpt_prog_codes; } =20 diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c b/tools/perf/util= /kvm-stat-arch/kvm-stat-x86.c index 0f626db3a439..0ce543d82850 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c @@ -24,45 +24,43 @@ static const struct kvm_events_ops exit_events =3D { * the time of MMIO write: kvm_mmio(KVM_TRACE_MMIO_WRITE...) -> kvm_entry * the time of MMIO read: kvm_exit -> kvm_mmio(KVM_TRACE_MMIO_READ...). */ -static void mmio_event_get_key(struct evsel *evsel, struct perf_sample *sa= mple, +static void mmio_event_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(evsel, sample, "gpa"); - key->info =3D evsel__intval(evsel, sample, "type"); + key->key =3D evsel__intval(sample->evsel, sample, "gpa"); + key->info =3D evsel__intval(sample->evsel, sample, "type"); } =20 #define KVM_TRACE_MMIO_READ_UNSATISFIED 0 #define KVM_TRACE_MMIO_READ 1 #define KVM_TRACE_MMIO_WRITE 2 =20 -static bool mmio_event_begin(struct evsel *evsel, - struct perf_sample *sample, struct event_key *key) +static bool mmio_event_begin(struct perf_sample *sample, struct event_key = *key) { /* MMIO read begin event in kernel. */ - if (kvm_exit_event(evsel)) + if (kvm_exit_event(sample->evsel)) return true; =20 /* MMIO write begin event in kernel. */ - if (evsel__name_is(evsel, "kvm:kvm_mmio") && - evsel__intval(evsel, sample, "type") =3D=3D KVM_TRACE_MMIO_WRITE) { - mmio_event_get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, "kvm:kvm_mmio") && + evsel__intval(sample->evsel, sample, "type") =3D=3D KVM_TRACE_MMIO_WR= ITE) { + mmio_event_get_key(sample, key); return true; } =20 return false; } =20 -static bool mmio_event_end(struct evsel *evsel, struct perf_sample *sample, - struct event_key *key) +static bool mmio_event_end(struct perf_sample *sample, struct event_key *k= ey) { /* MMIO write end event in kernel. */ - if (kvm_entry_event(evsel)) + if (kvm_entry_event(sample->evsel)) return true; =20 /* MMIO read end event in kernel.*/ - if (evsel__name_is(evsel, "kvm:kvm_mmio") && - evsel__intval(evsel, sample, "type") =3D=3D KVM_TRACE_MMIO_READ) { - mmio_event_get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, "kvm:kvm_mmio") && + evsel__intval(sample->evsel, sample, "type") =3D=3D KVM_TRACE_MMIO_RE= AD) { + mmio_event_get_key(sample, key); return true; } =20 @@ -86,31 +84,27 @@ static const struct kvm_events_ops mmio_events =3D { }; =20 /* The time of emulation pio access is from kvm_pio to kvm_entry. */ -static void ioport_event_get_key(struct evsel *evsel, - struct perf_sample *sample, +static void ioport_event_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(evsel, sample, "port"); - key->info =3D evsel__intval(evsel, sample, "rw"); + key->key =3D evsel__intval(sample->evsel, sample, "port"); + key->info =3D evsel__intval(sample->evsel, sample, "rw"); } =20 -static bool ioport_event_begin(struct evsel *evsel, - struct perf_sample *sample, +static bool ioport_event_begin(struct perf_sample *sample, struct event_key *key) { - if (evsel__name_is(evsel, "kvm:kvm_pio")) { - ioport_event_get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, "kvm:kvm_pio")) { + ioport_event_get_key(sample, key); return true; } =20 return false; } =20 -static bool ioport_event_end(struct evsel *evsel, - struct perf_sample *sample __maybe_unused, - struct event_key *key __maybe_unused) +static bool ioport_event_end(struct perf_sample *sample, struct event_key = *key __maybe_unused) { - return kvm_entry_event(evsel); + return kvm_entry_event(sample->evsel); } =20 static void ioport_event_decode_key(struct perf_kvm_stat *kvm __maybe_unus= ed, @@ -130,31 +124,25 @@ static const struct kvm_events_ops ioport_events =3D { }; =20 /* The time of emulation msr is from kvm_msr to kvm_entry. */ -static void msr_event_get_key(struct evsel *evsel, - struct perf_sample *sample, - struct event_key *key) +static void msr_event_get_key(struct perf_sample *sample, struct event_key= *key) { - key->key =3D evsel__intval(evsel, sample, "ecx"); - key->info =3D evsel__intval(evsel, sample, "write"); + key->key =3D evsel__intval(sample->evsel, sample, "ecx"); + key->info =3D evsel__intval(sample->evsel, sample, "write"); } =20 -static bool msr_event_begin(struct evsel *evsel, - struct perf_sample *sample, - struct event_key *key) +static bool msr_event_begin(struct perf_sample *sample, struct event_key *= key) { - if (evsel__name_is(evsel, "kvm:kvm_msr")) { - msr_event_get_key(evsel, sample, key); + if (evsel__name_is(sample->evsel, "kvm:kvm_msr")) { + msr_event_get_key(sample, key); return true; } =20 return false; } =20 -static bool msr_event_end(struct evsel *evsel, - struct perf_sample *sample __maybe_unused, - struct event_key *key __maybe_unused) +static bool msr_event_end(struct perf_sample *sample, struct event_key *ke= y __maybe_unused) { - return kvm_entry_event(evsel); + return kvm_entry_event(sample->evsel); } =20 static void msr_event_decode_key(struct perf_kvm_stat *kvm __maybe_unused, diff --git a/tools/perf/util/kvm-stat.c b/tools/perf/util/kvm-stat.c index 27f16810498c..f17a6132958d 100644 --- a/tools/perf/util/kvm-stat.c +++ b/tools/perf/util/kvm-stat.c @@ -11,22 +11,20 @@ bool kvm_exit_event(struct evsel *evsel) return evsel__name_is(evsel, kvm_exit_trace(e_machine)); } =20 -void exit_event_get_key(struct evsel *evsel, - struct perf_sample *sample, +void exit_event_get_key(struct perf_sample *sample, struct event_key *key) { - uint16_t e_machine =3D evsel__e_machine(evsel, /*e_flags=3D*/NULL); + uint16_t e_machine =3D evsel__e_machine(sample->evsel, /*e_flags=3D*/NULL= ); =20 key->info =3D 0; - key->key =3D evsel__intval(evsel, sample, kvm_exit_reason(e_machine)); + key->key =3D evsel__intval(sample->evsel, sample, kvm_exit_reason(e_mach= ine)); } =20 =20 -bool exit_event_begin(struct evsel *evsel, - struct perf_sample *sample, struct event_key *key) +bool exit_event_begin(struct perf_sample *sample, struct event_key *key) { - if (kvm_exit_event(evsel)) { - exit_event_get_key(evsel, sample, key); + if (kvm_exit_event(sample->evsel)) { + exit_event_get_key(sample, key); return true; } =20 @@ -40,11 +38,10 @@ bool kvm_entry_event(struct evsel *evsel) return evsel__name_is(evsel, kvm_entry_trace(e_machine)); } =20 -bool exit_event_end(struct evsel *evsel, - struct perf_sample *sample __maybe_unused, +bool exit_event_end(struct perf_sample *sample, struct event_key *key __maybe_unused) { - return kvm_entry_event(evsel); + return kvm_entry_event(sample->evsel); } =20 static const char *get_exit_reason(struct perf_kvm_stat *kvm, diff --git a/tools/perf/util/kvm-stat.h b/tools/perf/util/kvm-stat.h index 4a998aaece5d..cdbd921a555f 100644 --- a/tools/perf/util/kvm-stat.h +++ b/tools/perf/util/kvm-stat.h @@ -53,18 +53,15 @@ struct kvm_event { }; =20 struct child_event_ops { - void (*get_key)(struct evsel *evsel, - struct perf_sample *sample, + void (*get_key)(struct perf_sample *sample, struct event_key *key); const char *name; }; =20 struct kvm_events_ops { - bool (*is_begin_event)(struct evsel *evsel, - struct perf_sample *sample, + bool (*is_begin_event)(struct perf_sample *sample, struct event_key *key); - bool (*is_end_event)(struct evsel *evsel, - struct perf_sample *sample, struct event_key *key); + bool (*is_end_event)(struct perf_sample *sample, struct event_key *key); const struct child_event_ops *child_ops; void (*decode_key)(struct perf_kvm_stat *kvm, struct event_key *key, char *decode); @@ -116,14 +113,11 @@ struct kvm_reg_events_ops { =20 #ifdef HAVE_LIBTRACEEVENT =20 -void exit_event_get_key(struct evsel *evsel, - struct perf_sample *sample, +void exit_event_get_key(struct perf_sample *sample, struct event_key *key); -bool exit_event_begin(struct evsel *evsel, - struct perf_sample *sample, +bool exit_event_begin(struct perf_sample *sample, struct event_key *key); -bool exit_event_end(struct evsel *evsel, - struct perf_sample *sample, +bool exit_event_end(struct perf_sample *sample, struct event_key *key); void exit_event_decode_key(struct perf_kvm_stat *kvm, struct event_key *key, --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 B3DEB37E300 for ; Mon, 13 Apr 2026 04:12:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053538; cv=none; b=F519VYWgVsG0F8chQLNa86eNnNNghUfV+z7KHBLrwhAFWz24PJoVguVYR9w4nEMtYZSB6uZWHGspZtDX5MMRtyYTxM91SqrwNoFnZvHATGm+0pQ0Co/2Tx4BPhD4CtW47i5mCnlmTUni+NW+QchOnzemm8re8pyRgMy1iQnIzXg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053538; c=relaxed/simple; bh=xlvDgKu5oQ3XMYIc7ynAse8vT3c42v9R50LgmHzKztk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=X7sMmnS9ay7Isej6WsqUMOjTbnxmRZyDCKNxmhdH+xr+ujAH60/19PhhTSPOnSEOMPMpRn18+ZrBmaYtvWEJVo6EBDnKbBQCJqgNaIGy2hYM26YoQKY2MJifIlXw3xQLLd7n98Fop1yTE4iHzBdD2gboav7L0TuDZfGi/D5az/E= 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=jnHcE7BV; arc=none smtp.client-ip=74.125.82.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="jnHcE7BV" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2cc75e79b97so14278119eec.1 for ; Sun, 12 Apr 2026 21:12:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053527; x=1776658327; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Tn94NKCDiQpzYhFgSogEtvNyA41dEuw7vaQIN1UluNg=; b=jnHcE7BVoDrDJkeIKNzMY8E0ZRn12oR+ZFh3HDjD7TeD5iNfSq0NPiDl1SMBvQYF4n c15XwFB2WSjlepUw+B3+zzdJztsnIFfy8M803isK5xVJU3ZCBZIZSrI2mfvjDdQ5injW qpoLNfxB+7Rgm7cgCzp+tDwDq8V6axHf3403ZOgK+ogsZZCs92Z677lKbU8lnfcsyEoM DxyV/PGu4uOyohRMXO/p/ObYxNjHKlMSFtDZlSYTpEBoGiu6wrzRUR2c7IJ1axCYwcTS dbrZclXkte0ebntRo9d1cRFvVTx7at2LJn2eKqLSvdOVr+sv4FRrgovhglGSVR0kIjGo zhRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053527; x=1776658327; h=cc: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=Tn94NKCDiQpzYhFgSogEtvNyA41dEuw7vaQIN1UluNg=; b=fSFQLoTG3zJ1FsPT8UCiflQsVAVRhFJuebhVGlknFkELSClD3G1wtBbZDh0OnuJLBC LpKUOwJRYU1eZrSHMfY75I3hHJVJQd9HqcoNX/gU9rVNMd9M0m9jGskaSOpeuQ0YhHHe qLGbCtSX4XlaIxXH0I16sdtXf0iao7pwtP/mDkzEQip4mia3PhrV/bH/1pX/HrebTXNx AiB3/UM7qdSOJcVONHmabs042bDPwTRmj7di5+AKXAnN3hVbpMEuoC8PgskQsglAj6gB eDTZTlSgYF4gGGPB5inXqyvHrMsLBj6qS0BOExnmt5AOhZuQS0hRpqgW1DdloLGEOSND AOqQ== X-Forwarded-Encrypted: i=1; AFNElJ/xlBCUQqyRDaVKG2+Zki19HaYiXZE5yFZCWa61wAhvHpr+Eay3XO639VlX6aWl5f0lUmY9jL7fzPg7zgs=@vger.kernel.org X-Gm-Message-State: AOJu0YwNOfk9bFxWRiHWJ51HFSFhovTYLzlz5bpp6t6sdzpV3RfX7LwY mrmQymOspT8bQK3M2oKSVUejnokhb+y1YeHS+zL450lb2h4I9KYFZ3PS6gZbuLjjJNX/Yf2hOQt C9jwAUWugUA== X-Received: from dyhd16.prod.google.com ([2002:a05:7300:8290:b0:2d7:87e:5f58]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:1017:b0:2c9:1943:e7ff with SMTP id 5a478bee46e88-2d587d80ee9mr7434378eec.10.1776053526368; Sun, 12 Apr 2026 21:12:06 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:14 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-5-irogers@google.com> Subject: [PATCH v12 04/33] perf evsel: Refactor evsel tracepoint sample accessors perf_sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The evsel argument to evsel__intval, evsel__rawptr, and similar functions, is unnecessary as it can be read from the sample. Remove the evsel and rename the function to match that the data is coming from the sample. Signed-off-by: Ian Rogers --- tools/perf/builtin-inject.c | 2 +- tools/perf/builtin-kmem.c | 34 +++---- tools/perf/builtin-kvm.c | 2 +- tools/perf/builtin-kwork.c | 29 +++--- tools/perf/builtin-lock.c | 32 +++---- tools/perf/builtin-sched.c | 92 +++++++++---------- tools/perf/builtin-timechart.c | 88 +++++++++--------- tools/perf/builtin-trace.c | 12 +-- tools/perf/tests/openat-syscall-tp-fields.c | 2 +- tools/perf/tests/switch-tracking.c | 4 +- tools/perf/util/evsel.c | 22 ++--- tools/perf/util/evsel.h | 12 +-- tools/perf/util/intel-pt.c | 2 +- .../perf/util/kvm-stat-arch/kvm-stat-arm64.c | 6 +- .../util/kvm-stat-arch/kvm-stat-loongarch.c | 2 +- .../util/kvm-stat-arch/kvm-stat-powerpc.c | 2 +- .../perf/util/kvm-stat-arch/kvm-stat-riscv.c | 3 +- tools/perf/util/kvm-stat-arch/kvm-stat-s390.c | 8 +- tools/perf/util/kvm-stat-arch/kvm-stat-x86.c | 16 ++-- tools/perf/util/kvm-stat.c | 2 +- 20 files changed, 183 insertions(+), 189 deletions(-) diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 6ba489452777..3d3f3272918c 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -1081,7 +1081,7 @@ static int perf_inject__sched_stat(const struct perf_= tool *tool, union perf_event *event_sw; struct perf_sample sample_sw; struct perf_inject *inject =3D container_of(tool, struct perf_inject, too= l); - u32 pid =3D evsel__intval(evsel, sample, "pid"); + u32 pid =3D perf_sample__intval(sample, "pid"); int ret; =20 list_for_each_entry(ent, &inject->samples, node) { diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 45b383fa9ce9..d7233a8b43be 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -173,10 +173,10 @@ static int insert_caller_stat(unsigned long call_site, =20 static int evsel__process_alloc_event(struct evsel *evsel, struct perf_sam= ple *sample) { - unsigned long ptr =3D evsel__intval(evsel, sample, "ptr"), - call_site =3D evsel__intval(evsel, sample, "call_site"); - int bytes_req =3D evsel__intval(evsel, sample, "bytes_req"), - bytes_alloc =3D evsel__intval(evsel, sample, "bytes_alloc"); + unsigned long ptr =3D perf_sample__intval(sample, "ptr"), + call_site =3D perf_sample__intval(sample, "call_site"); + int bytes_req =3D perf_sample__intval(sample, "bytes_req"), + bytes_alloc =3D perf_sample__intval(sample, "bytes_alloc"); =20 if (insert_alloc_stat(call_site, ptr, bytes_req, bytes_alloc, sample->cpu= ) || insert_caller_stat(call_site, bytes_req, bytes_alloc)) @@ -202,7 +202,7 @@ static int evsel__process_alloc_event(struct evsel *evs= el, struct perf_sample *s int node1, node2; =20 node1 =3D cpu__get_node((struct perf_cpu){.cpu =3D sample->cpu}); - node2 =3D evsel__intval(evsel, sample, "node"); + node2 =3D perf_sample__intval(sample, "node"); =20 /* * If the field "node" is NUMA_NO_NODE (-1), we don't take it @@ -243,9 +243,9 @@ static struct alloc_stat *search_alloc_stat(unsigned lo= ng ptr, return NULL; } =20 -static int evsel__process_free_event(struct evsel *evsel, struct perf_samp= le *sample) +static int evsel__process_free_event(struct evsel *evsel __maybe_unused, s= truct perf_sample *sample) { - unsigned long ptr =3D evsel__intval(evsel, sample, "ptr"); + unsigned long ptr =3D perf_sample__intval(sample, "ptr"); struct alloc_stat *s_alloc, *s_caller; =20 s_alloc =3D search_alloc_stat(ptr, 0, &root_alloc_stat, ptr_cmp); @@ -808,10 +808,9 @@ static int parse_gfp_flags(struct evsel *evsel, struct= perf_sample *sample, static int evsel__process_page_alloc_event(struct evsel *evsel, struct per= f_sample *sample) { u64 page; - unsigned int order =3D evsel__intval(evsel, sample, "order"); - unsigned int gfp_flags =3D evsel__intval(evsel, sample, "gfp_flags"); - unsigned int migrate_type =3D evsel__intval(evsel, sample, - "migratetype"); + unsigned int order =3D perf_sample__intval(sample, "order"); + unsigned int gfp_flags =3D perf_sample__intval(sample, "gfp_flags"); + unsigned int migrate_type =3D perf_sample__intval(sample, "migratetype"); u64 bytes =3D kmem_page_size << order; u64 callsite; struct page_stat *pstat; @@ -822,9 +821,9 @@ static int evsel__process_page_alloc_event(struct evsel= *evsel, struct perf_samp }; =20 if (use_pfn) - page =3D evsel__intval(evsel, sample, "pfn"); + page =3D perf_sample__intval(sample, "pfn"); else - page =3D evsel__intval(evsel, sample, "page"); + page =3D perf_sample__intval(sample, "page"); =20 nr_page_allocs++; total_page_alloc_bytes +=3D bytes; @@ -877,10 +876,11 @@ static int evsel__process_page_alloc_event(struct evs= el *evsel, struct perf_samp return 0; } =20 -static int evsel__process_page_free_event(struct evsel *evsel, struct perf= _sample *sample) +static int evsel__process_page_free_event(struct evsel *evsel __maybe_unus= ed, + struct perf_sample *sample) { u64 page; - unsigned int order =3D evsel__intval(evsel, sample, "order"); + unsigned int order =3D perf_sample__intval(sample, "order"); u64 bytes =3D kmem_page_size << order; struct page_stat *pstat; struct page_stat this =3D { @@ -888,9 +888,9 @@ static int evsel__process_page_free_event(struct evsel = *evsel, struct perf_sampl }; =20 if (use_pfn) - page =3D evsel__intval(evsel, sample, "pfn"); + page =3D perf_sample__intval(sample, "pfn"); else - page =3D evsel__intval(evsel, sample, "page"); + page =3D perf_sample__intval(sample, "page"); =20 nr_page_frees++; total_page_free_bytes +=3D bytes; diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index d9b9792894a8..dd2ed21596aa 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -930,7 +930,7 @@ struct vcpu_event_record *per_vcpu_record(struct thread= *thread, return NULL; } =20 - vcpu_record->vcpu_id =3D evsel__intval(sample->evsel, sample, vcpu_id_st= r(e_machine)); + vcpu_record->vcpu_id =3D perf_sample__intval(sample, vcpu_id_str(e_machi= ne)); thread__set_priv(thread, vcpu_record); } =20 diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index d4bb19ed91b5..ab4519287f47 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -1006,7 +1006,7 @@ static void irq_work_init(struct perf_kwork *kwork, struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type __maybe_unused, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine __maybe_unused) { @@ -1014,11 +1014,11 @@ static void irq_work_init(struct perf_kwork *kwork, work->cpu =3D sample->cpu; =20 if (kwork->report =3D=3D KWORK_REPORT_TOP) { - work->id =3D evsel__intval_common(evsel, sample, "common_pid"); + work->id =3D perf_sample__intval_common(sample, "common_pid"); work->name =3D NULL; } else { - work->id =3D evsel__intval(evsel, sample, "irq"); - work->name =3D evsel__strval(evsel, sample, "name"); + work->id =3D perf_sample__intval(sample, "irq"); + work->name =3D perf_sample__strval(sample, "name"); } } =20 @@ -1144,10 +1144,10 @@ static void softirq_work_init(struct perf_kwork *kw= ork, work->cpu =3D sample->cpu; =20 if (kwork->report =3D=3D KWORK_REPORT_TOP) { - work->id =3D evsel__intval_common(evsel, sample, "common_pid"); + work->id =3D perf_sample__intval_common(sample, "common_pid"); work->name =3D NULL; } else { - num =3D evsel__intval(evsel, sample, "vec"); + num =3D perf_sample__intval(sample, "vec"); work->id =3D num; work->name =3D evsel__softirq_name(evsel, num); } @@ -1234,17 +1234,16 @@ static void workqueue_work_init(struct perf_kwork *= kwork __maybe_unused, struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type __maybe_unused, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { char *modp =3D NULL; - unsigned long long function_addr =3D evsel__intval(evsel, - sample, "function"); + unsigned long long function_addr =3D perf_sample__intval(sample, "functio= n"); =20 work->class =3D class; work->cpu =3D sample->cpu; - work->id =3D evsel__intval(evsel, sample, "work"); + work->id =3D perf_sample__intval(sample, "work"); work->name =3D function_addr =3D=3D 0 ? NULL : machine__resolve_kernel_addr(machine, &function_addr, &modp); } @@ -1302,7 +1301,7 @@ static void sched_work_init(struct perf_kwork *kwork = __maybe_unused, struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine __maybe_unused) { @@ -1310,11 +1309,11 @@ static void sched_work_init(struct perf_kwork *kwor= k __maybe_unused, work->cpu =3D sample->cpu; =20 if (src_type =3D=3D KWORK_TRACE_EXIT) { - work->id =3D evsel__intval(evsel, sample, "prev_pid"); - work->name =3D strdup(evsel__strval(evsel, sample, "prev_comm")); + work->id =3D perf_sample__intval(sample, "prev_pid"); + work->name =3D strdup(perf_sample__strval(sample, "prev_comm")); } else if (src_type =3D=3D KWORK_TRACE_ENTRY) { - work->id =3D evsel__intval(evsel, sample, "next_pid"); - work->name =3D strdup(evsel__strval(evsel, sample, "next_comm")); + work->id =3D perf_sample__intval(sample, "next_pid"); + work->name =3D strdup(perf_sample__strval(sample, "next_comm")); } } =20 diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index 4d8ddf6391e8..cbf3a39c7837 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -563,15 +563,15 @@ static int get_key_by_aggr_mode(u64 *key, u64 addr, s= truct evsel *evsel, return get_key_by_aggr_mode_simple(key, addr, sample->tid); } =20 -static int report_lock_acquire_event(struct evsel *evsel, +static int report_lock_acquire_event(struct evsel *evsel __maybe_unused, struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; struct lock_seq_stat *seq; - const char *name =3D evsel__strval(evsel, sample, "name"); - u64 addr =3D evsel__intval(evsel, sample, "lockdep_addr"); - int flag =3D evsel__intval(evsel, sample, "flags"); + const char *name =3D perf_sample__strval(sample, "name"); + u64 addr =3D perf_sample__intval(sample, "lockdep_addr"); + int flag =3D perf_sample__intval(sample, "flags"); u64 key; int ret; =20 @@ -638,15 +638,15 @@ static int report_lock_acquire_event(struct evsel *ev= sel, return 0; } =20 -static int report_lock_acquired_event(struct evsel *evsel, +static int report_lock_acquired_event(struct evsel *evsel __maybe_unused, struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; struct lock_seq_stat *seq; u64 contended_term; - const char *name =3D evsel__strval(evsel, sample, "name"); - u64 addr =3D evsel__intval(evsel, sample, "lockdep_addr"); + const char *name =3D perf_sample__strval(sample, "name"); + u64 addr =3D perf_sample__intval(sample, "lockdep_addr"); u64 key; int ret; =20 @@ -704,14 +704,14 @@ static int report_lock_acquired_event(struct evsel *e= vsel, return 0; } =20 -static int report_lock_contended_event(struct evsel *evsel, +static int report_lock_contended_event(struct evsel *evsel __maybe_unused, struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; struct lock_seq_stat *seq; - const char *name =3D evsel__strval(evsel, sample, "name"); - u64 addr =3D evsel__intval(evsel, sample, "lockdep_addr"); + const char *name =3D perf_sample__strval(sample, "name"); + u64 addr =3D perf_sample__intval(sample, "lockdep_addr"); u64 key; int ret; =20 @@ -762,14 +762,14 @@ static int report_lock_contended_event(struct evsel *= evsel, return 0; } =20 -static int report_lock_release_event(struct evsel *evsel, +static int report_lock_release_event(struct evsel *evsel __maybe_unused, struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; struct lock_seq_stat *seq; - const char *name =3D evsel__strval(evsel, sample, "name"); - u64 addr =3D evsel__intval(evsel, sample, "lockdep_addr"); + const char *name =3D perf_sample__strval(sample, "name"); + u64 addr =3D perf_sample__intval(sample, "lockdep_addr"); u64 key; int ret; =20 @@ -969,8 +969,8 @@ static int report_lock_contention_begin_event(struct ev= sel *evsel, struct lock_stat *ls; struct thread_stat *ts; struct lock_seq_stat *seq; - u64 addr =3D evsel__intval(evsel, sample, "lock_addr"); - unsigned int flags =3D evsel__intval(evsel, sample, "flags"); + u64 addr =3D perf_sample__intval(sample, "lock_addr"); + unsigned int flags =3D perf_sample__intval(sample, "flags"); u64 key; int i, ret; static bool kmap_loaded; @@ -1134,7 +1134,7 @@ static int report_lock_contention_end_event(struct ev= sel *evsel, struct thread_stat *ts; struct lock_seq_stat *seq; u64 contended_term; - u64 addr =3D evsel__intval(evsel, sample, "lock_addr"); + u64 addr =3D perf_sample__intval(sample, "lock_addr"); u64 key; int ret; =20 diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 0713e6b28f92..f15b64157589 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c @@ -829,8 +829,8 @@ replay_wakeup_event(struct perf_sched *sched, struct evsel *evsel, struct perf_sample *sample, struct machine *machine __maybe_unused) { - const char *comm =3D evsel__strval(evsel, sample, "comm"); - const u32 pid =3D evsel__intval(evsel, sample, "pid"); + const char *comm =3D perf_sample__strval(sample, "comm"); + const u32 pid =3D perf_sample__intval(sample, "pid"); struct task_desc *waker, *wakee; =20 if (verbose > 0) { @@ -851,10 +851,10 @@ static int replay_switch_event(struct perf_sched *sch= ed, struct perf_sample *sample, struct machine *machine __maybe_unused) { - const char *prev_comm =3D evsel__strval(evsel, sample, "prev_comm"), - *next_comm =3D evsel__strval(evsel, sample, "next_comm"); - const u32 prev_pid =3D evsel__intval(evsel, sample, "prev_pid"), - next_pid =3D evsel__intval(evsel, sample, "next_pid"); + const char *prev_comm =3D perf_sample__strval(sample, "prev_comm"), + *next_comm =3D perf_sample__strval(sample, "next_comm"); + const u32 prev_pid =3D perf_sample__intval(sample, "prev_pid"), + next_pid =3D perf_sample__intval(sample, "next_pid"); struct task_desc *prev, __maybe_unused *next; u64 timestamp0, timestamp =3D sample->time; int cpu =3D sample->cpu; @@ -1134,13 +1134,13 @@ static void free_work_atoms(struct work_atoms *atom= s) } =20 static int latency_switch_event(struct perf_sched *sched, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { - const u32 prev_pid =3D evsel__intval(evsel, sample, "prev_pid"), - next_pid =3D evsel__intval(evsel, sample, "next_pid"); - const char prev_state =3D evsel__taskstate(evsel, sample, "prev_state"); + const u32 prev_pid =3D perf_sample__intval(sample, "prev_pid"), + next_pid =3D perf_sample__intval(sample, "next_pid"); + const char prev_state =3D perf_sample__taskstate(sample, "prev_state"); struct work_atoms *out_events, *in_events; struct thread *sched_out, *sched_in; u64 timestamp0, timestamp =3D sample->time; @@ -1204,12 +1204,12 @@ static int latency_switch_event(struct perf_sched *= sched, } =20 static int latency_runtime_event(struct perf_sched *sched, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { - const u32 pid =3D evsel__intval(evsel, sample, "pid"); - const u64 runtime =3D evsel__intval(evsel, sample, "runtime"); + const u32 pid =3D perf_sample__intval(sample, "pid"); + const u64 runtime =3D perf_sample__intval(sample, "runtime"); struct thread *thread =3D machine__findnew_thread(machine, -1, pid); struct work_atoms *atoms =3D thread_atoms_search(&sched->atom_root, threa= d, &sched->cmp_pid); u64 timestamp =3D sample->time; @@ -1239,11 +1239,11 @@ static int latency_runtime_event(struct perf_sched = *sched, } =20 static int latency_wakeup_event(struct perf_sched *sched, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { - const u32 pid =3D evsel__intval(evsel, sample, "pid"); + const u32 pid =3D perf_sample__intval(sample, "pid"); struct work_atoms *atoms; struct work_atom *atom; struct thread *wakee; @@ -1300,11 +1300,11 @@ static int latency_wakeup_event(struct perf_sched *= sched, } =20 static int latency_migrate_task_event(struct perf_sched *sched, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { - const u32 pid =3D evsel__intval(evsel, sample, "pid"); + const u32 pid =3D perf_sample__intval(sample, "pid"); u64 timestamp =3D sample->time; struct work_atoms *atoms; struct work_atom *atom; @@ -1626,11 +1626,11 @@ static void print_sched_map(struct perf_sched *sche= d, struct perf_cpu this_cpu, } } =20 -static int map_switch_event(struct perf_sched *sched, struct evsel *evsel, +static int map_switch_event(struct perf_sched *sched, struct evsel *evsel = __maybe_unused, struct perf_sample *sample, struct machine *machine) { - const u32 next_pid =3D evsel__intval(evsel, sample, "next_pid"); - const u32 prev_pid =3D evsel__intval(evsel, sample, "prev_pid"); + const u32 next_pid =3D perf_sample__intval(sample, "next_pid"); + const u32 prev_pid =3D perf_sample__intval(sample, "prev_pid"); struct thread *sched_in, *sched_out; struct thread_runtime *tr; int new_shortname; @@ -1797,8 +1797,8 @@ static int process_sched_switch_event(const struct pe= rf_tool *tool, { struct perf_sched *sched =3D container_of(tool, struct perf_sched, tool); int this_cpu =3D sample->cpu, err =3D 0; - u32 prev_pid =3D evsel__intval(evsel, sample, "prev_pid"), - next_pid =3D evsel__intval(evsel, sample, "next_pid"); + u32 prev_pid =3D perf_sample__intval(sample, "prev_pid"), + next_pid =3D perf_sample__intval(sample, "next_pid"); =20 if (sched->curr_pid[this_cpu] !=3D (u32)-1) { /* @@ -2068,12 +2068,11 @@ static char *timehist_get_commstr(struct thread *th= read) =20 /* prio field format: xxx or xxx->yyy */ #define MAX_PRIO_STR_LEN 8 -static char *timehist_get_priostr(struct evsel *evsel, - struct thread *thread, +static char *timehist_get_priostr(struct thread *thread, struct perf_sample *sample) { static char prio_str[16]; - int prev_prio =3D (int)evsel__intval(evsel, sample, "prev_prio"); + int prev_prio =3D (int)perf_sample__intval(sample, "prev_prio"); struct thread_runtime *tr =3D thread__priv(thread); =20 if (tr->prio !=3D prev_prio && tr->prio !=3D -1) @@ -2161,15 +2160,14 @@ static void timehist_header(struct perf_sched *sche= d) } =20 static void timehist_print_sample(struct perf_sched *sched, - struct evsel *evsel, struct perf_sample *sample, struct addr_location *al, struct thread *thread, u64 t, const char state) { struct thread_runtime *tr =3D thread__priv(thread); - const char *next_comm =3D evsel__strval(evsel, sample, "next_comm"); - const u32 next_pid =3D evsel__intval(evsel, sample, "next_pid"); + const char *next_comm =3D perf_sample__strval(sample, "next_comm"); + const u32 next_pid =3D perf_sample__intval(sample, "next_pid"); u32 max_cpus =3D sched->max_cpu.cpu + 1; char tstr[64]; char nstr[30]; @@ -2198,14 +2196,15 @@ static void timehist_print_sample(struct perf_sched= *sched, } =20 if (!thread__comm_set(thread)) { - const char *prev_comm =3D evsel__strval(evsel, sample, "pr= ev_comm"); - thread__set_comm(thread, prev_comm, sample->time); + const char *prev_comm =3D perf_sample__strval(sample, "prev_comm"); + + thread__set_comm(thread, prev_comm, sample->time); } =20 printf(" %-*s ", comm_width, timehist_get_commstr(thread)); =20 if (sched->show_prio) - printf(" %-*s ", MAX_PRIO_STR_LEN, timehist_get_priostr(evsel, thread, s= ample)); + printf(" %-*s ", MAX_PRIO_STR_LEN, timehist_get_priostr(thread, sample)); =20 wait_time =3D tr->dt_sleep + tr->dt_iowait + tr->dt_preempt; print_sched_time(wait_time, 6); @@ -2319,7 +2318,7 @@ static bool is_idle_sample(struct perf_sample *sample, { /* pid 0 =3D=3D swapper =3D=3D idle task */ if (evsel__name_is(evsel, "sched:sched_switch")) - return evsel__intval(evsel, sample, "prev_pid") =3D=3D 0; + return perf_sample__intval(sample, "prev_pid") =3D=3D 0; =20 return sample->pid =3D=3D 0; } @@ -2539,7 +2538,7 @@ static struct thread *timehist_get_thread(struct perf= _sched *sched, itr->last_thread =3D thread__get(thread); =20 /* copy task callchain when entering to idle */ - if (evsel__intval(evsel, sample, "next_pid") =3D=3D 0) + if (perf_sample__intval(sample, "next_pid") =3D=3D 0) save_idle_callchain(sched, itr, sample); } } @@ -2572,7 +2571,7 @@ static bool timehist_skip_sample(struct perf_sched *s= ched, if (tr && tr->prio !=3D -1) prio =3D tr->prio; else if (evsel__name_is(evsel, "sched:sched_switch")) - prio =3D evsel__intval(evsel, sample, "prev_prio"); + prio =3D perf_sample__intval(sample, "prev_prio"); =20 if (prio !=3D -1 && !test_bit(prio, sched->prio_bitmap)) { rc =3D true; @@ -2583,8 +2582,8 @@ static bool timehist_skip_sample(struct perf_sched *s= ched, if (sched->idle_hist) { if (!evsel__name_is(evsel, "sched:sched_switch")) rc =3D true; - else if (evsel__intval(evsel, sample, "prev_pid") !=3D 0 && - evsel__intval(evsel, sample, "next_pid") !=3D 0) + else if (perf_sample__intval(sample, "prev_pid") !=3D 0 && + perf_sample__intval(sample, "next_pid") !=3D 0) rc =3D true; } =20 @@ -2647,7 +2646,7 @@ static int timehist_sched_wakeup_event(const struct p= erf_tool *tool, struct thread *thread; struct thread_runtime *tr =3D NULL; /* want pid of awakened task not pid in sample */ - const u32 pid =3D evsel__intval(evsel, sample, "pid"); + const u32 pid =3D perf_sample__intval(sample, "pid"); =20 thread =3D machine__findnew_thread(machine, 0, pid); if (thread =3D=3D NULL) @@ -2686,8 +2685,8 @@ static void timehist_print_migration_event(struct per= f_sched *sched, return; =20 max_cpus =3D sched->max_cpu.cpu + 1; - ocpu =3D evsel__intval(evsel, sample, "orig_cpu"); - dcpu =3D evsel__intval(evsel, sample, "dest_cpu"); + ocpu =3D perf_sample__intval(sample, "orig_cpu"); + dcpu =3D perf_sample__intval(sample, "dest_cpu"); =20 thread =3D machine__findnew_thread(machine, sample->pid, sample->tid); if (thread =3D=3D NULL) @@ -2736,7 +2735,7 @@ static int timehist_migrate_task_event(const struct p= erf_tool *tool, struct thread *thread; struct thread_runtime *tr =3D NULL; /* want pid of migrated task not pid in sample */ - const u32 pid =3D evsel__intval(evsel, sample, "pid"); + const u32 pid =3D perf_sample__intval(sample, "pid"); =20 thread =3D machine__findnew_thread(machine, 0, pid); if (thread =3D=3D NULL) @@ -2761,14 +2760,13 @@ static int timehist_migrate_task_event(const struct= perf_tool *tool, return 0; } =20 -static void timehist_update_task_prio(struct evsel *evsel, - struct perf_sample *sample, +static void timehist_update_task_prio(struct perf_sample *sample, struct machine *machine) { struct thread *thread; struct thread_runtime *tr =3D NULL; - const u32 next_pid =3D evsel__intval(evsel, sample, "next_pid"); - const u32 next_prio =3D evsel__intval(evsel, sample, "next_prio"); + const u32 next_pid =3D perf_sample__intval(sample, "next_pid"); + const u32 next_prio =3D perf_sample__intval(sample, "next_prio"); =20 if (next_pid =3D=3D 0) thread =3D get_idle_thread(sample->cpu); @@ -2798,7 +2796,7 @@ static int timehist_sched_change_event(const struct p= erf_tool *tool, struct thread_runtime *tr =3D NULL; u64 tprev, t =3D sample->time; int rc =3D 0; - const char state =3D evsel__taskstate(evsel, sample, "prev_state"); + const char state =3D perf_sample__taskstate(sample, "prev_state"); =20 addr_location__init(&al); if (machine__resolve(machine, &al, sample) < 0) { @@ -2809,7 +2807,7 @@ static int timehist_sched_change_event(const struct p= erf_tool *tool, } =20 if (sched->show_prio || sched->prio_str) - timehist_update_task_prio(evsel, sample, machine); + timehist_update_task_prio(sample, machine); =20 thread =3D timehist_get_thread(sched, sample, machine, evsel); if (thread =3D=3D NULL) { @@ -2891,7 +2889,7 @@ static int timehist_sched_change_event(const struct p= erf_tool *tool, } =20 if (!sched->summary_only) - timehist_print_sample(sched, evsel, sample, &al, thread, t, state); + timehist_print_sample(sched, sample, &al, thread, t, state); } =20 out: diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 8692d11ccd29..034e0ba3f9cb 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -597,12 +597,12 @@ static int process_sample_event(const struct perf_too= l *tool, =20 static int process_sample_cpu_idle(struct timechart *tchart __maybe_unused, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { - u32 state =3D evsel__intval(evsel, sample, "state"); - u32 cpu_id =3D evsel__intval(evsel, sample, "cpu_id"); + u32 state =3D perf_sample__intval(sample, "state"); + u32 cpu_id =3D perf_sample__intval(sample, "cpu_id"); =20 if (state =3D=3D (u32)PWR_EVENT_EXIT) c_state_end(tchart, cpu_id, sample->time); @@ -613,12 +613,12 @@ process_sample_cpu_idle(struct timechart *tchart __ma= ybe_unused, =20 static int process_sample_cpu_frequency(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { - u32 state =3D evsel__intval(evsel, sample, "state"); - u32 cpu_id =3D evsel__intval(evsel, sample, "cpu_id"); + u32 state =3D perf_sample__intval(sample, "state"); + u32 cpu_id =3D perf_sample__intval(sample, "cpu_id"); =20 p_state_change(tchart, cpu_id, sample->time, state); return 0; @@ -626,13 +626,13 @@ process_sample_cpu_frequency(struct timechart *tchart, =20 static int process_sample_sched_wakeup(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace) { - u8 flags =3D evsel__intval(evsel, sample, "common_flags"); - int waker =3D evsel__intval(evsel, sample, "common_pid"); - int wakee =3D evsel__intval(evsel, sample, "pid"); + u8 flags =3D perf_sample__intval(sample, "common_flags"); + int waker =3D perf_sample__intval(sample, "common_pid"); + int wakee =3D perf_sample__intval(sample, "pid"); =20 sched_wakeup(tchart, sample->cpu, sample->time, waker, wakee, flags, back= trace); return 0; @@ -640,13 +640,13 @@ process_sample_sched_wakeup(struct timechart *tchart, =20 static int process_sample_sched_switch(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace) { - int prev_pid =3D evsel__intval(evsel, sample, "prev_pid"); - int next_pid =3D evsel__intval(evsel, sample, "next_pid"); - u64 prev_state =3D evsel__intval(evsel, sample, "prev_state"); + int prev_pid =3D perf_sample__intval(sample, "prev_pid"); + int next_pid =3D perf_sample__intval(sample, "next_pid"); + u64 prev_state =3D perf_sample__intval(sample, "prev_state"); =20 sched_switch(tchart, sample->cpu, sample->time, prev_pid, next_pid, prev_state, backtrace); @@ -656,12 +656,12 @@ process_sample_sched_switch(struct timechart *tchart, #ifdef SUPPORT_OLD_POWER_EVENTS static int process_sample_power_start(struct timechart *tchart __maybe_unused, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { - u64 cpu_id =3D evsel__intval(evsel, sample, "cpu_id"); - u64 value =3D evsel__intval(evsel, sample, "value"); + u64 cpu_id =3D perf_sample__intval(sample, "cpu_id"); + u64 value =3D perf_sample__intval(sample, "value"); =20 c_state_start(cpu_id, sample->time, value); return 0; @@ -679,12 +679,12 @@ process_sample_power_end(struct timechart *tchart, =20 static int process_sample_power_frequency(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { - u64 cpu_id =3D evsel__intval(evsel, sample, "cpu_id"); - u64 value =3D evsel__intval(evsel, sample, "value"); + u64 cpu_id =3D perf_sample__intval(sample, "cpu_id"); + u64 value =3D perf_sample__intval(sample, "value"); =20 p_state_change(tchart, cpu_id, sample->time, value); return 0; @@ -849,120 +849,120 @@ static int pid_end_io_sample(struct timechart *tcha= rt, int pid, int type, =20 static int process_enter_read(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long fd =3D evsel__intval(evsel, sample, "fd"); + long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_READ, sample->time, fd); } =20 static int process_exit_read(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long ret =3D evsel__intval(evsel, sample, "ret"); + long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_READ, sample->time, ret); } =20 static int process_enter_write(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long fd =3D evsel__intval(evsel, sample, "fd"); + long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_WRITE, sample->time, fd); } =20 static int process_exit_write(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long ret =3D evsel__intval(evsel, sample, "ret"); + long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_WRITE, sample->time, ret); } =20 static int process_enter_sync(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long fd =3D evsel__intval(evsel, sample, "fd"); + long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_SYNC, sample->time, fd); } =20 static int process_exit_sync(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long ret =3D evsel__intval(evsel, sample, "ret"); + long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_SYNC, sample->time, ret); } =20 static int process_enter_tx(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long fd =3D evsel__intval(evsel, sample, "fd"); + long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_TX, sample->time, fd); } =20 static int process_exit_tx(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long ret =3D evsel__intval(evsel, sample, "ret"); + long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_TX, sample->time, ret); } =20 static int process_enter_rx(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long fd =3D evsel__intval(evsel, sample, "fd"); + long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_RX, sample->time, fd); } =20 static int process_exit_rx(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long ret =3D evsel__intval(evsel, sample, "ret"); + long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_RX, sample->time, ret); } =20 static int process_enter_poll(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long fd =3D evsel__intval(evsel, sample, "fd"); + long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_POLL, sample->time, fd); } =20 static int process_exit_poll(struct timechart *tchart, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct perf_sample *sample) { - long ret =3D evsel__intval(evsel, sample, "ret"); + long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_POLL, sample->time, ret); } diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index d9e80740e9ac..f05782f03d6c 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -3061,7 +3061,7 @@ errno_print: { return err; } =20 -static int trace__vfs_getname(struct trace *trace, struct evsel *evsel, +static int trace__vfs_getname(struct trace *trace, struct evsel *evsel __m= aybe_unused, union perf_event *event __maybe_unused, struct perf_sample *sample) { @@ -3070,7 +3070,7 @@ static int trace__vfs_getname(struct trace *trace, st= ruct evsel *evsel, size_t filename_len, entry_str_len, to_move; ssize_t remaining_space; char *pos; - const char *filename =3D evsel__rawptr(evsel, sample, "pathname"); + const char *filename =3D perf_sample__strval(sample, "pathname"); =20 if (!thread) goto out; @@ -3126,7 +3126,7 @@ static int trace__sched_stat_runtime(struct trace *tr= ace, struct evsel *evsel, union perf_event *event __maybe_unused, struct perf_sample *sample) { - u64 runtime =3D evsel__intval(evsel, sample, "runtime"); + u64 runtime =3D perf_sample__intval(sample, "runtime"); double runtime_ms =3D (double)runtime / NSEC_PER_MSEC; struct thread *thread =3D machine__findnew_thread(trace->host, sample->pid, @@ -3145,10 +3145,10 @@ static int trace__sched_stat_runtime(struct trace *= trace, struct evsel *evsel, out_dump: fprintf(trace->output, "%s: comm=3D%s,pid=3D%u,runtime=3D%" PRIu64 ",vrun= time=3D%" PRIu64 ")\n", evsel->name, - evsel__strval(evsel, sample, "comm"), - (pid_t)evsel__intval(evsel, sample, "pid"), + perf_sample__strval(sample, "comm"), + (pid_t)perf_sample__intval(sample, "pid"), runtime, - evsel__intval(evsel, sample, "vruntime")); + perf_sample__intval(sample, "vruntime")); goto out_put; } =20 diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests= /openat-syscall-tp-fields.c index 2a139d2781a8..97550b349418 100644 --- a/tools/perf/tests/openat-syscall-tp-fields.c +++ b/tools/perf/tests/openat-syscall-tp-fields.c @@ -118,7 +118,7 @@ static int test__syscall_openat_tp_fields(struct test_s= uite *test __maybe_unused goto out_delete_evlist; } =20 - tp_flags =3D evsel__intval(evsel, &sample, "flags"); + tp_flags =3D perf_sample__intval(&sample, "flags"); perf_sample__exit(&sample); if (flags !=3D tp_flags) { pr_debug("%s: Expected flags=3D%#x, got %#x\n", diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-t= racking.c index 72a8289e846d..22b0302252db 100644 --- a/tools/perf/tests/switch-tracking.c +++ b/tools/perf/tests/switch-tracking.c @@ -140,8 +140,8 @@ static int process_sample_event(struct evlist *evlist, =20 evsel =3D evlist__id2evsel(evlist, sample.id); if (evsel =3D=3D switch_tracking->switch_evsel) { - next_tid =3D evsel__intval(evsel, &sample, "next_pid"); - prev_tid =3D evsel__intval(evsel, &sample, "prev_pid"); + next_tid =3D perf_sample__intval(&sample, "next_pid"); + prev_tid =3D perf_sample__intval(&sample, "prev_pid"); cpu =3D sample.cpu; pr_debug3("sched_switch: cpu: %d prev_tid %d next_tid %d\n", cpu, prev_tid, next_tid); diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 2ee87fd84d3e..ee30e15af054 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -3687,9 +3687,9 @@ struct tep_format_field *evsel__common_field(struct e= vsel *evsel, const char *na return tp_format ? tep_find_common_field(tp_format, name) : NULL; } =20 -void *evsel__rawptr(struct evsel *evsel, struct perf_sample *sample, const= char *name) +void *perf_sample__rawptr(struct perf_sample *sample, const char *name) { - struct tep_format_field *field =3D evsel__field(evsel, name); + struct tep_format_field *field =3D evsel__field(sample->evsel, name); int offset; =20 if (!field) @@ -3746,21 +3746,21 @@ u64 format_field__intval(struct tep_format_field *f= ield, struct perf_sample *sam return 0; } =20 -u64 evsel__intval(struct evsel *evsel, struct perf_sample *sample, const c= har *name) +u64 perf_sample__intval(struct perf_sample *sample, const char *name) { - struct tep_format_field *field =3D evsel__field(evsel, name); + struct tep_format_field *field =3D evsel__field(sample->evsel, name); =20 - return field ? format_field__intval(field, sample, evsel->needs_swap) : 0; + return field ? format_field__intval(field, sample, sample->evsel->needs_s= wap) : 0; } =20 -u64 evsel__intval_common(struct evsel *evsel, struct perf_sample *sample, = const char *name) +u64 perf_sample__intval_common(struct perf_sample *sample, const char *nam= e) { - struct tep_format_field *field =3D evsel__common_field(evsel, name); + struct tep_format_field *field =3D evsel__common_field(sample->evsel, nam= e); =20 - return field ? format_field__intval(field, sample, evsel->needs_swap) : 0; + return field ? format_field__intval(field, sample, sample->evsel->needs_s= wap) : 0; } =20 -char evsel__taskstate(struct evsel *evsel, struct perf_sample *sample, con= st char *name) +char perf_sample__taskstate(struct perf_sample *sample, const char *name) { static struct tep_format_field *prev_state_field; static const char *states; @@ -3769,7 +3769,7 @@ char evsel__taskstate(struct evsel *evsel, struct per= f_sample *sample, const cha unsigned int bit; char state =3D '?'; /* '?' denotes unknown task state */ =20 - field =3D evsel__field(evsel, name); + field =3D evsel__field(sample->evsel, name); =20 if (!field) return state; @@ -3788,7 +3788,7 @@ char evsel__taskstate(struct evsel *evsel, struct per= f_sample *sample, const cha * * We can change this if we have a good reason in the future. */ - val =3D evsel__intval(evsel, sample, name); + val =3D perf_sample__intval(sample, name); bit =3D val ? ffs(val) : 0; state =3D (!bit || bit > strlen(states)) ? 'R' : states[bit-1]; return state; diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 339b5c08a33d..927e5b4756cc 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -371,14 +371,14 @@ bool evsel__precise_ip_fallback(struct evsel *evsel); struct perf_sample; =20 #ifdef HAVE_LIBTRACEEVENT -void *evsel__rawptr(struct evsel *evsel, struct perf_sample *sample, const= char *name); -u64 evsel__intval(struct evsel *evsel, struct perf_sample *sample, const c= har *name); -u64 evsel__intval_common(struct evsel *evsel, struct perf_sample *sample, = const char *name); -char evsel__taskstate(struct evsel *evsel, struct perf_sample *sample, con= st char *name); +void *perf_sample__rawptr(struct perf_sample *sample, const char *name); +u64 perf_sample__intval(struct perf_sample *sample, const char *name); +u64 perf_sample__intval_common(struct perf_sample *sample, const char *nam= e); +char perf_sample__taskstate(struct perf_sample *sample, const char *name); =20 -static inline char *evsel__strval(struct evsel *evsel, struct perf_sample = *sample, const char *name) +static inline char *perf_sample__strval(struct perf_sample *sample, const = char *name) { - return evsel__rawptr(evsel, sample, name); + return perf_sample__rawptr(sample, name); } #endif =20 diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index fc9eec8b54b8..dab23a96b1d8 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -3426,7 +3426,7 @@ static int intel_pt_process_switch(struct intel_pt *p= t, if (evsel !=3D pt->switch_evsel) return 0; =20 - tid =3D evsel__intval(evsel, sample, "next_pid"); + tid =3D perf_sample__intval(sample, "next_pid"); cpu =3D sample->cpu; =20 intel_pt_log("sched_switch: cpu %d tid %d time %"PRIu64" tsc %#"PRIx64"\n= ", diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-arm64.c b/tools/perf/ut= il/kvm-stat-arch/kvm-stat-arm64.c index 1e76906f719c..018b0db0e6e7 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-arm64.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-arm64.c @@ -20,10 +20,8 @@ static const char * const __kvm_events_tp[] =3D { static void event_get_key(struct perf_sample *sample, struct event_key *key) { - struct evsel *evsel =3D sample->evsel; - key->info =3D 0; - key->key =3D evsel__intval(evsel, sample, kvm_exit_reason(EM_AARCH64)); + key->key =3D perf_sample__intval(sample, kvm_exit_reason(EM_AARCH64)); key->exit_reasons =3D arm64_exit_reasons; =20 /* @@ -32,7 +30,7 @@ static void event_get_key(struct perf_sample *sample, * properly decode event's est_ec. */ if (key->key =3D=3D ARM_EXCEPTION_TRAP) { - key->key =3D evsel__intval(evsel, sample, kvm_trap_exit_reason); + key->key =3D perf_sample__intval(sample, kvm_trap_exit_reason); key->exit_reasons =3D arm64_trap_exit_reasons; } } diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-loongarch.c b/tools/per= f/util/kvm-stat-arch/kvm-stat-loongarch.c index 9d6265290f6d..a04cd09e3361 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-loongarch.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-loongarch.c @@ -78,7 +78,7 @@ static void event_gspr_get_key(struct perf_sample *sample= , struct event_key *key unsigned int insn; =20 key->key =3D LOONGARCH_EXCEPTION_OTHERS; - insn =3D evsel__intval(sample->evsel, sample, "inst_word"); + insn =3D perf_sample__intval(sample, "inst_word"); =20 switch (insn >> 24) { case 0: diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c b/tools/perf/= util/kvm-stat-arch/kvm-stat-powerpc.c index 5158d7e88ee6..96d9c4ae0209 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c @@ -32,7 +32,7 @@ static void hcall_event_get_key(struct perf_sample *sampl= e, struct event_key *key) { key->info =3D 0; - key->key =3D evsel__intval(sample->evsel, sample, "req"); + key->key =3D perf_sample__intval(sample, "req"); } =20 static const char *get_hcall_exit_reason(u64 exit_code) diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-riscv.c b/tools/perf/ut= il/kvm-stat-arch/kvm-stat-riscv.c index e8db8b4f8e2e..967bba261a47 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-riscv.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-riscv.c @@ -26,8 +26,7 @@ static void event_get_key(struct perf_sample *sample, int xlen =3D 64; // TODO: 32-bit support. =20 key->info =3D 0; - key->key =3D evsel__intval(sample->evsel, sample, - kvm_exit_reason(EM_RISCV)) & ~CAUSE_IRQ_FLAG(xlen); + key->key =3D perf_sample__intval(sample, kvm_exit_reason(EM_RISCV)) & ~CA= USE_IRQ_FLAG(xlen); key->exit_reasons =3D riscv_exit_reasons; } =20 diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-s390.c b/tools/perf/uti= l/kvm-stat-arch/kvm-stat-s390.c index 158372ba0205..4771fc69fa39 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-s390.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-s390.c @@ -23,7 +23,7 @@ static void event_icpt_insn_get_key(struct perf_sample *s= ample, { u64 insn; =20 - insn =3D evsel__intval(sample->evsel, sample, "instruction"); + insn =3D perf_sample__intval(sample, "instruction"); key->key =3D icpt_insn_decoder(insn); key->exit_reasons =3D sie_icpt_insn_codes; } @@ -31,21 +31,21 @@ static void event_icpt_insn_get_key(struct perf_sample = *sample, static void event_sigp_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(sample->evsel, sample, "order_code"); + key->key =3D perf_sample__intval(sample, "order_code"); key->exit_reasons =3D sie_sigp_order_codes; } =20 static void event_diag_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(sample->evsel, sample, "code"); + key->key =3D perf_sample__intval(sample, "code"); key->exit_reasons =3D sie_diagnose_codes; } =20 static void event_icpt_prog_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(sample->evsel, sample, "code"); + key->key =3D perf_sample__intval(sample, "code"); key->exit_reasons =3D sie_icpt_prog_codes; } =20 diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c b/tools/perf/util= /kvm-stat-arch/kvm-stat-x86.c index 0ce543d82850..788d216f0852 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c @@ -27,8 +27,8 @@ static const struct kvm_events_ops exit_events =3D { static void mmio_event_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(sample->evsel, sample, "gpa"); - key->info =3D evsel__intval(sample->evsel, sample, "type"); + key->key =3D perf_sample__intval(sample, "gpa"); + key->info =3D perf_sample__intval(sample, "type"); } =20 #define KVM_TRACE_MMIO_READ_UNSATISFIED 0 @@ -43,7 +43,7 @@ static bool mmio_event_begin(struct perf_sample *sample, = struct event_key *key) =20 /* MMIO write begin event in kernel. */ if (evsel__name_is(sample->evsel, "kvm:kvm_mmio") && - evsel__intval(sample->evsel, sample, "type") =3D=3D KVM_TRACE_MMIO_WR= ITE) { + perf_sample__intval(sample, "type") =3D=3D KVM_TRACE_MMIO_WRITE) { mmio_event_get_key(sample, key); return true; } @@ -59,7 +59,7 @@ static bool mmio_event_end(struct perf_sample *sample, st= ruct event_key *key) =20 /* MMIO read end event in kernel.*/ if (evsel__name_is(sample->evsel, "kvm:kvm_mmio") && - evsel__intval(sample->evsel, sample, "type") =3D=3D KVM_TRACE_MMIO_RE= AD) { + perf_sample__intval(sample, "type") =3D=3D KVM_TRACE_MMIO_READ) { mmio_event_get_key(sample, key); return true; } @@ -87,8 +87,8 @@ static const struct kvm_events_ops mmio_events =3D { static void ioport_event_get_key(struct perf_sample *sample, struct event_key *key) { - key->key =3D evsel__intval(sample->evsel, sample, "port"); - key->info =3D evsel__intval(sample->evsel, sample, "rw"); + key->key =3D perf_sample__intval(sample, "port"); + key->info =3D perf_sample__intval(sample, "rw"); } =20 static bool ioport_event_begin(struct perf_sample *sample, @@ -126,8 +126,8 @@ static const struct kvm_events_ops ioport_events =3D { /* The time of emulation msr is from kvm_msr to kvm_entry. */ static void msr_event_get_key(struct perf_sample *sample, struct event_key= *key) { - key->key =3D evsel__intval(sample->evsel, sample, "ecx"); - key->info =3D evsel__intval(sample->evsel, sample, "write"); + key->key =3D perf_sample__intval(sample, "ecx"); + key->info =3D perf_sample__intval(sample, "write"); } =20 static bool msr_event_begin(struct perf_sample *sample, struct event_key *= key) diff --git a/tools/perf/util/kvm-stat.c b/tools/perf/util/kvm-stat.c index f17a6132958d..755ab659a05c 100644 --- a/tools/perf/util/kvm-stat.c +++ b/tools/perf/util/kvm-stat.c @@ -17,7 +17,7 @@ void exit_event_get_key(struct perf_sample *sample, uint16_t e_machine =3D evsel__e_machine(sample->evsel, /*e_flags=3D*/NULL= ); =20 key->info =3D 0; - key->key =3D evsel__intval(sample->evsel, sample, kvm_exit_reason(e_mach= ine)); + key->key =3D perf_sample__intval(sample, kvm_exit_reason(e_machine)); } =20 =20 --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 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 F1D8C37F746 for ; Mon, 13 Apr 2026 04:12:11 +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=1776053536; cv=none; b=avdo0VEv663XrAJKYMqa170pKu5D+vRUhMicWn9dit1p5TWAX6tH+Mdqo3olc2AWLmji5W+p1JUnZVl16r54pjm+5UIM/Rl/BqgMSZzUL35YmNnBjOzwxxsZtErwMO87H8BkZMveMxEdrYgoEllNp9muD1gYdpHTj4KCekAMqNc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053536; c=relaxed/simple; bh=+6/TgirLyVcX/Kq6q4L3ThQN7uhgHB3Eulb+wJXLUO4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TSmYDaK/5t7vserMKAnaT/519o7rfXxaFL8zXx46kkoE/dhCcVE7AQ5XnUEmsXakmvZNaxGwWqhp5FBUCUUi6FijllAfcoYIznVHwJP/bTEfu7nRj3vyFRIoBbuEvcl/7jv9fVkK33Yz88dXoLa4BzPzd5Wj/P8anyKUX/T+2dE= 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=Xq1V5102; 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="Xq1V5102" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2b2ec17dc21so9668855ad.2 for ; Sun, 12 Apr 2026 21:12:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053529; x=1776658329; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=23XNRjKq0mKMLzG+gfCPZj6vfaGkX3d4v88eP/QjFIg=; b=Xq1V5102gX3S13EqbpJ+4cXWZCV2f4fs2K9M7WSg9N1a2Ap/d365yg+Xhy21iPfPMk MmENQ0vOAYVBqgkfWQ7/zqq2c0sC3EC2RUVdi3rw9mOcLw11D70Hz9yQFCH4V18zaxzK W0UnAPfyxJqxduYgGwiinLHmBG0zWI/8d9CMqHXYu2rXhXVDWoMB69+jafLn/UykPied z607Ta/c0NtpDxNW2TvOqDUJCWyfu5YdUDrAW3LBl5nxzrsDySG3oU3lfSEdtD7qPS1B uszHrW3Y1bPHJ5V+9GBvFi5apUPGKcyHnYy6r7hOKqKadAkXTJVXI9lFgHebGg78HPS/ Yu9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053529; x=1776658329; h=cc: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=23XNRjKq0mKMLzG+gfCPZj6vfaGkX3d4v88eP/QjFIg=; b=LbWeBJhqM6fsJyynHmDIGn5gXUrQxLrGR6Mang7BQ6x4fZKTuqKtQqo7pZrHfkEZ7F hxwlAGoe0D2jeu0rONYSc+qUB68kTteupliMQGcoMDyrv9WuakbRpBDFxpZtDiyI8zlx RdNS6BW1vKMerbglwQ9tfnLk1+FyResUz8jG9GOZaJ24v0FlSvasHV99itHe74Py28mV djlG5vrGkTJhqWfz8yOz0+/KHg8OzwEPCHxHI/YOzd+MGGNMXH1pokgod8MoO2Qzh/WA 1kVttG7DeB9asFmNH2FHtNQUwxL26qcdffpEKrKzVt8wiFLIQoUiygm1puf2oxkHbYPs 7Tug== X-Forwarded-Encrypted: i=1; AFNElJ9dd2VyTFhRQvfIU6sU6Lk5yz9rlvo86j9mWhm4ZijADZRCJ0u392/UvqkOweBGb8hn56cFzM5hMTuzzSA=@vger.kernel.org X-Gm-Message-State: AOJu0YzlVjuVxX0QXoRPPrkIc8PHIq6QTicu70y3MUnvhzoStVnRmh3N jPC+cvYSzlW/Xt+reFpEiF62qTh2jlTp1zEkND4w8lF+3rpECu+CVBXawhUA5hHbdoVHHtYbKOd 8yaoTDtLu0Q== X-Received: from plav3.prod.google.com ([2002:a17:902:f0c3:b0:2b4:58d4:7852]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d50f:b0:2b0:b290:f2f4 with SMTP id d9443c01a7336-2b2d5a557d5mr117701255ad.32.1776053528473; Sun, 12 Apr 2026 21:12:08 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:15 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-6-irogers@google.com> Subject: [PATCH v12 05/33] perf trace: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample now contains the evsel and so don't unnecessarily pass the evsel. Signed-off-by: Ian Rogers --- tools/perf/builtin-trace.c | 55 +++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index f05782f03d6c..7f40cc81fd21 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -535,12 +535,12 @@ static struct evsel *perf_evsel__raw_syscall_newtp(co= nst char *direction, void * return NULL; } =20 -#define perf_evsel__sc_tp_uint(evsel, name, sample) \ - ({ struct syscall_tp *fields =3D __evsel__syscall_tp(evsel); \ +#define perf_evsel__sc_tp_uint(name, sample) \ + ({ struct syscall_tp *fields =3D __evsel__syscall_tp(sample->evsel); \ fields->name.integer(&fields->name, sample); }) =20 -#define perf_evsel__sc_tp_ptr(evsel, name, sample) \ - ({ struct syscall_tp *fields =3D __evsel__syscall_tp(evsel); \ +#define perf_evsel__sc_tp_ptr(name, sample) \ + ({ struct syscall_tp *fields =3D __evsel__syscall_tp(sample->evsel); \ fields->name.pointer(&fields->name, sample); }) =20 size_t strarray__scnprintf_suffix(struct strarray *sa, char *bf, size_t si= ze, const char *intfmt, bool show_suffix, int val) @@ -2721,8 +2721,8 @@ static int trace__printf_interrupted_entry(struct tra= ce *trace) return printed; } =20 -static int trace__fprintf_sample(struct trace *trace, struct evsel *evsel, - struct perf_sample *sample, struct thread *thread) +static int trace__fprintf_sample(struct trace *trace, struct perf_sample *= sample, + struct thread *thread) { int printed =3D 0; =20 @@ -2730,7 +2730,7 @@ static int trace__fprintf_sample(struct trace *trace,= struct evsel *evsel, double ts =3D (double)sample->time / NSEC_PER_MSEC; =20 printed +=3D fprintf(trace->output, "%22s %10.3f %s %d/%d [%d]\n", - evsel__name(evsel), ts, + evsel__name(sample->evsel), ts, thread__comm_str(thread), sample->pid, sample->tid, sample->cpu); } @@ -2785,7 +2785,7 @@ static int trace__sys_enter(struct trace *trace, stru= ct evsel *evsel, void *args; int printed =3D 0; struct thread *thread; - int id =3D perf_evsel__sc_tp_uint(evsel, id, sample), err =3D -1; + int id =3D perf_evsel__sc_tp_uint(id, sample), err =3D -1; int augmented_args_size =3D 0, e_machine; void *augmented_args =3D NULL; struct syscall *sc; @@ -2800,9 +2800,9 @@ static int trace__sys_enter(struct trace *trace, stru= ct evsel *evsel, if (ttrace =3D=3D NULL) goto out_put; =20 - trace__fprintf_sample(trace, evsel, sample, thread); + trace__fprintf_sample(trace, sample, thread); =20 - args =3D perf_evsel__sc_tp_ptr(evsel, args, sample); + args =3D perf_evsel__sc_tp_ptr(args, sample); =20 if (ttrace->entry_str =3D=3D NULL) { ttrace->entry_str =3D malloc(trace__entry_str_size); @@ -2857,12 +2857,11 @@ static int trace__sys_enter(struct trace *trace, st= ruct evsel *evsel, return err; } =20 -static int trace__fprintf_sys_enter(struct trace *trace, struct evsel *evs= el, - struct perf_sample *sample) +static int trace__fprintf_sys_enter(struct trace *trace, struct perf_sampl= e *sample) { struct thread_trace *ttrace; struct thread *thread; - int id =3D perf_evsel__sc_tp_uint(evsel, id, sample), err =3D -1; + int id =3D perf_evsel__sc_tp_uint(id, sample), err =3D -1; struct syscall *sc; char msg[1024]; void *args, *augmented_args =3D NULL; @@ -2872,7 +2871,7 @@ static int trace__fprintf_sys_enter(struct trace *tra= ce, struct evsel *evsel, =20 thread =3D machine__findnew_thread(trace->host, sample->pid, sample->tid); e_machine =3D thread__e_machine(thread, trace->host, /*e_flags=3D*/NULL); - sc =3D trace__syscall_info(trace, evsel, e_machine, id); + sc =3D trace__syscall_info(trace, sample->evsel, e_machine, id); if (sc =3D=3D NULL) goto out_put; ttrace =3D thread__trace(thread, trace); @@ -2883,7 +2882,7 @@ static int trace__fprintf_sys_enter(struct trace *tra= ce, struct evsel *evsel, if (ttrace =3D=3D NULL) goto out_put; =20 - args =3D perf_evsel__sc_tp_ptr(evsel, args, sample); + args =3D perf_evsel__sc_tp_ptr(args, sample); augmented_args =3D syscall__augmented_args(sc, sample, &augmented_args_si= ze, trace->raw_augmented_syscalls_args_size); printed +=3D syscall__scnprintf_args(sc, msg, sizeof(msg), args, augmente= d_args, augmented_args_size, trace, thread); fprintf(trace->output, "%.*s", (int)printed, msg); @@ -2893,10 +2892,11 @@ static int trace__fprintf_sys_enter(struct trace *t= race, struct evsel *evsel, return err; } =20 -static int trace__resolve_callchain(struct trace *trace, struct evsel *evs= el, +static int trace__resolve_callchain(struct trace *trace, struct perf_sample *sample, struct callchain_cursor *cursor) { + struct evsel *evsel =3D sample->evsel; struct addr_location al; int max_stack =3D evsel->core.attr.sample_max_stack ? evsel->core.attr.sample_max_stack : @@ -2931,7 +2931,7 @@ static int trace__sys_exit(struct trace *trace, struc= t evsel *evsel, u64 duration =3D 0; bool duration_calculated =3D false; struct thread *thread; - int id =3D perf_evsel__sc_tp_uint(evsel, id, sample), err =3D -1, callcha= in_ret =3D 0, printed =3D 0; + int id =3D perf_evsel__sc_tp_uint(id, sample), err =3D -1, callchain_ret = =3D 0, printed =3D 0; int alignment =3D trace->args_alignment, e_machine; struct syscall *sc; struct thread_trace *ttrace; @@ -2945,9 +2945,9 @@ static int trace__sys_exit(struct trace *trace, struc= t evsel *evsel, if (ttrace =3D=3D NULL) goto out_put; =20 - trace__fprintf_sample(trace, evsel, sample, thread); + trace__fprintf_sample(trace, sample, thread); =20 - ret =3D perf_evsel__sc_tp_uint(evsel, ret, sample); + ret =3D perf_evsel__sc_tp_uint(ret, sample); =20 if (trace->summary) thread__update_stats(thread, ttrace, id, sample, ret, trace); @@ -2969,7 +2969,7 @@ static int trace__sys_exit(struct trace *trace, struc= t evsel *evsel, if (sample->callchain) { struct callchain_cursor *cursor =3D get_tls_callchain_cursor(); =20 - callchain_ret =3D trace__resolve_callchain(trace, evsel, sample, cursor); + callchain_ret =3D trace__resolve_callchain(trace, sample, cursor); if (callchain_ret =3D=3D 0) { if (cursor->nr < trace->min_stack) goto out; @@ -3184,9 +3184,10 @@ static void bpf_output__fprintf(struct trace *trace, ++trace->nr_events_printed; } =20 -static size_t trace__fprintf_tp_fields(struct trace *trace, struct evsel *= evsel, struct perf_sample *sample, +static size_t trace__fprintf_tp_fields(struct trace *trace, struct perf_sa= mple *sample, struct thread *thread, void *augmented_args, int augmented_args= _size) { + struct evsel *evsel =3D sample->evsel; char bf[2048]; size_t size =3D sizeof(bf); const struct tep_event *tp_format =3D evsel__tp_format(evsel); @@ -3269,7 +3270,7 @@ static int trace__event_handler(struct trace *trace, = struct evsel *evsel, if (sample->callchain) { struct callchain_cursor *cursor =3D get_tls_callchain_cursor(); =20 - callchain_ret =3D trace__resolve_callchain(trace, evsel, sample, cursor); + callchain_ret =3D trace__resolve_callchain(trace, sample, cursor); if (callchain_ret =3D=3D 0) { if (cursor->nr < trace->min_stack) goto out; @@ -3287,7 +3288,7 @@ static int trace__event_handler(struct trace *trace, = struct evsel *evsel, trace__fprintf_comm_tid(trace, thread, trace->output); =20 if (evsel =3D=3D trace->syscalls.events.bpf_output) { - int id =3D perf_evsel__sc_tp_uint(evsel, id, sample); + int id =3D perf_evsel__sc_tp_uint(id, sample); int e_machine =3D thread ? thread__e_machine(thread, trace->host, /*e_flags=3D*/NULL) : EM_HOST; @@ -3295,7 +3296,7 @@ static int trace__event_handler(struct trace *trace, = struct evsel *evsel, =20 if (sc) { fprintf(trace->output, "%s(", sc->name); - trace__fprintf_sys_enter(trace, evsel, sample); + trace__fprintf_sys_enter(trace, sample); fputc(')', trace->output); goto newline; } @@ -3315,13 +3316,13 @@ static int trace__event_handler(struct trace *trace= , struct evsel *evsel, const struct tep_event *tp_format =3D evsel__tp_format(evsel); =20 if (tp_format && (strncmp(tp_format->name, "sys_enter_", 10) || - trace__fprintf_sys_enter(trace, evsel, sample))) { + trace__fprintf_sys_enter(trace, sample))) { if (trace->libtraceevent_print) { event_format__fprintf(tp_format, sample->cpu, sample->raw_data, sample->raw_size, trace->output); } else { - trace__fprintf_tp_fields(trace, evsel, sample, thread, NULL, 0); + trace__fprintf_tp_fields(trace, sample, thread, NULL, 0); } } } @@ -3380,7 +3381,7 @@ static int trace__pgfault(struct trace *trace, if (sample->callchain) { struct callchain_cursor *cursor =3D get_tls_callchain_cursor(); =20 - callchain_ret =3D trace__resolve_callchain(trace, evsel, sample, cursor); + callchain_ret =3D trace__resolve_callchain(trace, sample, cursor); if (callchain_ret =3D=3D 0) { if (cursor->nr < trace->min_stack) goto out_put; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 1D41137F011 for ; Mon, 13 Apr 2026 04:12:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053540; cv=none; b=ijaiyCCYE+7AEeX4EwIjCmdM75wnjXvvtJ4563yJTUs7Ev8fwLj0SLHw+zFW16VEfZuYToXatvFEdTKkTXw+KfjD/FtiQKicmhnidxxzzy4XFTG72Ea+n02/x1/KpZomRlmcw324OcgxQKRMFhBhVm/eZ6D0wE5lkGkBBcvw5EM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053540; c=relaxed/simple; bh=hc6l9CKB6FxzdTfTLq8PoMzdccFlHc3iYQeb2+Pdzw4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jVnuG6dHkxFQ8dVZJOp4fR7pKREcsPJZ5kvE9QZ4gkJYPEEZNwJlUrtifib0w07TfvfbuQZcmGv+Td95IC28HPDSdz2RyKzwcVO+Jb3bhPkg9Whcgb5nuqloZonZbenPM/Z/A8Tq8gbnNulTrPEiL3jc9V7aMrNMtBVEwTfllWk= 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=nrfXurNQ; arc=none smtp.client-ip=74.125.82.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="nrfXurNQ" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2d3a617ad90so12064617eec.0 for ; Sun, 12 Apr 2026 21:12:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053531; x=1776658331; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=mpOuB27ipijrSoEkyUUE9m9a4OaxXoIVP7E+tT4QvFs=; b=nrfXurNQ2qY1RaWR6t1Wr9T6Fo8A0NSAmR41mEK17CI74H5D3liHn0Gs7F7PVI8uaq 1rLIqZCbbpEHMhypUoN10EQX4PwytxNSKbW8Y5JuEpl9NN8vkds96PUi1qyoWigdgokd xMqORU2Exyn6pjtQHaXPVMUh3AtzzcHfuJnqTuPN/aSH1FzIEoTs+NPFfZV0Ml/dMloJ 9T1t7ZWOTraLduUod1iIb4KtYC3CAcn9GB/diVVJOAB/gBIctvHWy6LNvwHApaKvmqAN td8WRgFVSOkojNWNgZ/a4LUSLGAppfS1TLA7hIPVNmIHQ/InTPcAJgl1f53gas6D0a66 PW3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053531; x=1776658331; h=cc: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=mpOuB27ipijrSoEkyUUE9m9a4OaxXoIVP7E+tT4QvFs=; b=lwyUMAYa4Y8TxOIhn/tXaOuWo+BdCvRFwjVFSwFSYcR1e5Qf5bSngs2VrxZ/iP6Smk sh78qpQ8FPmgcBpXdVQCE1h3BCugjuHQR113FW3gbyYekfMqnvTUKzMQkM4aJuTzCxwW Xk/JyU+z3+vP7N7aIyCcowJ2srvSuRdOGSPFqiUamL7U6ABMPUUEUhNnKUDeNuGxnwR5 Fcuhsqc/jT9LZLNAOsaTvmvuj7L2WqTOpNBaXy+46TzLMMadrrLO6rTxadzEVXDEgO/O zkrzknKprgqQaXB615WpWTZgHopUl8C6E7GQB6PrihxdS6CgBuNN04wFB9aUL3Q7Dv6Y u8Pw== X-Forwarded-Encrypted: i=1; AFNElJ/TLcwN8QE0zjwnqi2YKnc/yYErjiDsZczdNyquGy8qaMZIe5vsi2Xbm/08JPyIZIf5A9Wzb+cX7gQO9Qk=@vger.kernel.org X-Gm-Message-State: AOJu0YybgackAXT8xgXVEAqpnbiS05bAFs4Fm0EoeSQuUgHOdToLz9X1 MhA7RVtzbht+zC8JOSbD4aP0VZRFmf9kFRoSTpt7ZuEF97/x8O4EiCbfcU5wo9i/mpW4CQTzFYy Lk6r8bY7oMg== X-Received: from dycrm24.prod.google.com ([2002:a05:693c:2a18:b0:2d9:8328:8324]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:1e83:b0:2c6:1557:9997 with SMTP id 5a478bee46e88-2d58965fa5cmr6518379eec.14.1776053530866; Sun, 12 Apr 2026 21:12:10 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:16 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-7-irogers@google.com> Subject: [PATCH v12 06/33] perf callchain: Don't pass evsel and sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Change callchain resolve code to not pass an evsel with the sample, instead just read the evsel from the sample. Signed-off-by: Ian Rogers --- tools/perf/builtin-c2c.c | 2 +- tools/perf/builtin-inject.c | 4 ++-- tools/perf/builtin-kmem.c | 6 ++--- tools/perf/builtin-kwork.c | 5 ++-- tools/perf/builtin-lock.c | 24 +++++++++---------- tools/perf/builtin-sched.c | 5 ++-- tools/perf/builtin-script.c | 6 ++--- tools/perf/builtin-trace.c | 2 +- tools/perf/util/build-id.c | 2 +- tools/perf/util/callchain.c | 8 +++---- tools/perf/util/callchain.h | 6 ++--- tools/perf/util/db-export.c | 8 +++---- tools/perf/util/hist.c | 2 +- tools/perf/util/machine.c | 14 +++++------ tools/perf/util/machine.h | 3 --- .../util/scripting-engines/trace-event-perl.c | 4 ++-- .../scripting-engines/trace-event-python.c | 4 ++-- 17 files changed, 48 insertions(+), 57 deletions(-) diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index 7593e5908fcc..2fa3d7ec8a09 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -339,7 +339,7 @@ static int process_sample_event(const struct perf_tool = *tool __maybe_unused, =20 cursor =3D get_tls_callchain_cursor(); ret =3D sample__resolve_callchain(sample, cursor, NULL, - evsel, &al, sysctl_perf_event_max_stack); + &al, sysctl_perf_event_max_stack); if (ret) goto out; =20 diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 3d3f3272918c..f43c165c3a13 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -417,7 +417,7 @@ static int perf_event__convert_sample_callchain(const s= truct perf_tool *tool, goto out; =20 /* this will parse DWARF using stack and register data */ - ret =3D thread__resolve_callchain(thread, cursor, evsel, sample, + ret =3D thread__resolve_callchain(thread, cursor, sample, /*parent=3D*/NULL, /*root_al=3D*/NULL, PERF_MAX_STACK_DEPTH); thread__put(thread); @@ -1017,7 +1017,7 @@ static int perf_event__inject_buildid(const struct pe= rf_tool *tool, union perf_e /*sample_in_dso=3D*/true); } =20 - sample__for_each_callchain_node(thread, sample->evsel, sample, PERF_MAX_S= TACK_DEPTH, + sample__for_each_callchain_node(thread, sample, PERF_MAX_STACK_DEPTH, /*symbols=3D*/false, mark_dso_hit_callback, &args); thread__put(thread); repipe: diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index d7233a8b43be..2cdc56bc2616 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -394,7 +394,7 @@ static int build_alloc_func_list(void) * Find first non-memory allocation function from callchain. * The allocation functions are in the 'alloc_func_list'. */ -static u64 find_callsite(struct evsel *evsel, struct perf_sample *sample) +static u64 find_callsite(struct perf_sample *sample) { struct addr_location al; struct machine *machine =3D &kmem_session->machines.host; @@ -414,7 +414,7 @@ static u64 find_callsite(struct evsel *evsel, struct pe= rf_sample *sample) if (cursor =3D=3D NULL) goto out; =20 - sample__resolve_callchain(sample, cursor, NULL, evsel, &al, 16); + sample__resolve_callchain(sample, cursor, /*parent=3D*/NULL, &al, 16); =20 callchain_cursor_commit(cursor); while (true) { @@ -838,7 +838,7 @@ static int evsel__process_page_alloc_event(struct evsel= *evsel, struct perf_samp if (parse_gfp_flags(evsel, sample, gfp_flags) < 0) return -1; =20 - callsite =3D find_callsite(evsel, sample); + callsite =3D find_callsite(sample); =20 /* * This is to find the current page (with correct gfp flags and diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index ab4519287f47..4b312afed830 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -688,7 +688,6 @@ static int latency_entry_event(struct perf_kwork *kwork, =20 static void timehist_save_callchain(struct perf_kwork *kwork, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct symbol *sym; @@ -708,7 +707,7 @@ static void timehist_save_callchain(struct perf_kwork *= kwork, =20 cursor =3D get_tls_callchain_cursor(); =20 - if (thread__resolve_callchain(thread, cursor, evsel, sample, + if (thread__resolve_callchain(thread, cursor, sample, NULL, NULL, kwork->max_stack + 2) !=3D 0) { pr_debug("Failed to resolve callchain, skipping\n"); goto out_put; @@ -838,7 +837,7 @@ static int timehist_entry_event(struct perf_kwork *kwor= k, return ret; =20 if (work !=3D NULL) - timehist_save_callchain(kwork, sample, evsel, machine); + timehist_save_callchain(kwork, sample, machine); =20 return 0; } diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index cbf3a39c7837..e2b585e528ac 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -551,13 +551,13 @@ static int get_key_by_aggr_mode_simple(u64 *key, u64 = addr, u32 tid) return 0; } =20 -static u64 callchain_id(struct evsel *evsel, struct perf_sample *sample); +static u64 callchain_id(struct perf_sample *sample); =20 -static int get_key_by_aggr_mode(u64 *key, u64 addr, struct evsel *evsel, +static int get_key_by_aggr_mode(u64 *key, u64 addr, struct perf_sample *sample) { if (aggr_mode =3D=3D LOCK_AGGR_CALLER) { - *key =3D callchain_id(evsel, sample); + *key =3D callchain_id(sample); return 0; } return get_key_by_aggr_mode_simple(key, addr, sample->tid); @@ -841,7 +841,7 @@ static int get_symbol_name_offset(struct map *map, stru= ct symbol *sym, u64 ip, else return strlcpy(buf, sym->name, size); } -static int lock_contention_caller(struct evsel *evsel, struct perf_sample = *sample, +static int lock_contention_caller(struct perf_sample *sample, char *buf, int size) { struct thread *thread; @@ -862,7 +862,7 @@ static int lock_contention_caller(struct evsel *evsel, = struct perf_sample *sampl cursor =3D get_tls_callchain_cursor(); =20 /* use caller function name from the callchain */ - ret =3D thread__resolve_callchain(thread, cursor, evsel, sample, + ret =3D thread__resolve_callchain(thread, cursor, sample, NULL, NULL, max_stack_depth); if (ret !=3D 0) { thread__put(thread); @@ -896,7 +896,7 @@ static int lock_contention_caller(struct evsel *evsel, = struct perf_sample *sampl return -1; } =20 -static u64 callchain_id(struct evsel *evsel, struct perf_sample *sample) +static u64 callchain_id(struct perf_sample *sample) { struct callchain_cursor *cursor; struct machine *machine =3D &session->machines.host; @@ -911,7 +911,7 @@ static u64 callchain_id(struct evsel *evsel, struct per= f_sample *sample) =20 cursor =3D get_tls_callchain_cursor(); /* use caller function name from the callchain */ - ret =3D thread__resolve_callchain(thread, cursor, evsel, sample, + ret =3D thread__resolve_callchain(thread, cursor, sample, NULL, NULL, max_stack_depth); thread__put(thread); =20 @@ -963,7 +963,7 @@ static u64 *get_callstack(struct perf_sample *sample, i= nt max_stack) return callstack; } =20 -static int report_lock_contention_begin_event(struct evsel *evsel, +static int report_lock_contention_begin_event(struct evsel *evsel __maybe_= unused, struct perf_sample *sample) { struct lock_stat *ls; @@ -978,7 +978,7 @@ static int report_lock_contention_begin_event(struct ev= sel *evsel, struct map *kmap; struct symbol *sym; =20 - ret =3D get_key_by_aggr_mode(&key, addr, evsel, sample); + ret =3D get_key_by_aggr_mode(&key, addr, sample); if (ret < 0) return ret; =20 @@ -1025,7 +1025,7 @@ static int report_lock_contention_begin_event(struct = evsel *evsel, break; case LOCK_AGGR_CALLER: name =3D buf; - if (lock_contention_caller(evsel, sample, buf, sizeof(buf)) < 0) + if (lock_contention_caller(sample, buf, sizeof(buf)) < 0) name =3D "Unknown"; break; case LOCK_AGGR_CGROUP: @@ -1127,7 +1127,7 @@ static int report_lock_contention_begin_event(struct = evsel *evsel, return 0; } =20 -static int report_lock_contention_end_event(struct evsel *evsel, +static int report_lock_contention_end_event(struct evsel *evsel __maybe_un= used, struct perf_sample *sample) { struct lock_stat *ls; @@ -1138,7 +1138,7 @@ static int report_lock_contention_end_event(struct ev= sel *evsel, u64 key; int ret; =20 - ret =3D get_key_by_aggr_mode(&key, addr, evsel, sample); + ret =3D get_key_by_aggr_mode(&key, addr, sample); if (ret < 0) return ret; =20 diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index f15b64157589..aea14bff7e61 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c @@ -2325,7 +2325,6 @@ static bool is_idle_sample(struct perf_sample *sample, =20 static void save_task_callchain(struct perf_sched *sched, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct callchain_cursor *cursor; @@ -2345,7 +2344,7 @@ static void save_task_callchain(struct perf_sched *sc= hed, =20 cursor =3D get_tls_callchain_cursor(); =20 - if (thread__resolve_callchain(thread, cursor, evsel, sample, + if (thread__resolve_callchain(thread, cursor, sample, NULL, NULL, sched->max_stack + 2) !=3D 0) { if (verbose > 0) pr_err("Failed to resolve callchain. Skipping\n"); @@ -2519,7 +2518,7 @@ static struct thread *timehist_get_thread(struct perf= _sched *sched, sample->tid); } =20 - save_task_callchain(sched, sample, evsel, machine); + save_task_callchain(sched, sample, machine); if (sched->idle_hist) { struct thread *idle; struct idle_thread_runtime *itr; diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 3ffb8baf40f6..6ea739f20495 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -1683,7 +1683,7 @@ static int perf_sample__fprintf_bts(struct perf_sampl= e *sample, =20 if (symbol_conf.use_callchain && sample->callchain) { cursor =3D get_tls_callchain_cursor(); - if (thread__resolve_callchain(al->thread, cursor, evsel, + if (thread__resolve_callchain(al->thread, cursor, sample, NULL, NULL, scripting_max_stack)) cursor =3D NULL; @@ -2506,7 +2506,7 @@ static void process_event(struct perf_script *script, =20 if (symbol_conf.use_callchain && sample->callchain) { cursor =3D get_tls_callchain_cursor(); - if (thread__resolve_callchain(al->thread, cursor, evsel, + if (thread__resolve_callchain(al->thread, cursor, sample, NULL, NULL, scripting_max_stack)) cursor =3D NULL; @@ -2791,7 +2791,7 @@ static int process_deferred_sample_event(const struct= perf_tool *tool, =20 if (symbol_conf.use_callchain && sample->callchain) { cursor =3D get_tls_callchain_cursor(); - if (thread__resolve_callchain(al.thread, cursor, evsel, + if (thread__resolve_callchain(al.thread, cursor, sample, NULL, NULL, scripting_max_stack)) { pr_info("cannot resolve deferred callchains\n"); diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 7f40cc81fd21..1fac167f7436 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -2907,7 +2907,7 @@ static int trace__resolve_callchain(struct trace *tra= ce, if (machine__resolve(trace->host, &al, sample) < 0) goto out; =20 - err =3D thread__resolve_callchain(al.thread, cursor, evsel, sample, NULL,= NULL, max_stack); + err =3D thread__resolve_callchain(al.thread, cursor, sample, NULL, NULL, = max_stack); out: addr_location__exit(&al); return err; diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c index 55b72235f891..af4d874f1381 100644 --- a/tools/perf/util/build-id.c +++ b/tools/perf/util/build-id.c @@ -73,7 +73,7 @@ int build_id__mark_dso_hit(const struct perf_tool *tool _= _maybe_unused, =20 addr_location__exit(&al); =20 - sample__for_each_callchain_node(thread, sample->evsel, sample, PERF_MAX_S= TACK_DEPTH, + sample__for_each_callchain_node(thread, sample, PERF_MAX_STACK_DEPTH, /*symbols=3D*/false, mark_dso_hit_callback, /*data=3D*/NULL); =20 =20 diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c index f031cbbeeba8..5c2282051e39 100644 --- a/tools/perf/util/callchain.c +++ b/tools/perf/util/callchain.c @@ -1170,7 +1170,7 @@ int callchain_cursor_append(struct callchain_cursor *= cursor, =20 int sample__resolve_callchain(struct perf_sample *sample, struct callchain_cursor *cursor, struct symbol **parent, - struct evsel *evsel, struct addr_location *al, + struct addr_location *al, int max_stack) { if (sample->callchain =3D=3D NULL && !symbol_conf.show_branchflag_count) @@ -1178,7 +1178,7 @@ int sample__resolve_callchain(struct perf_sample *sam= ple, =20 if (symbol_conf.use_callchain || symbol_conf.cumulate_callchain || perf_hpp_list.parent || symbol_conf.show_branchflag_count) { - return thread__resolve_callchain(al->thread, cursor, evsel, sample, + return thread__resolve_callchain(al->thread, cursor, sample, parent, al, max_stack); } return 0; @@ -1853,7 +1853,7 @@ s64 callchain_avg_cycles(struct callchain_node *cnode) return cycles; } =20 -int sample__for_each_callchain_node(struct thread *thread, struct evsel *e= vsel, +int sample__for_each_callchain_node(struct thread *thread, struct perf_sample *sample, int max_stack, bool symbols, callchain_iter_fn cb, void *data) { @@ -1864,7 +1864,7 @@ int sample__for_each_callchain_node(struct thread *th= read, struct evsel *evsel, return -ENOMEM; =20 /* Fill in the callchain. */ - ret =3D __thread__resolve_callchain(thread, cursor, evsel, sample, + ret =3D __thread__resolve_callchain(thread, cursor, sample, /*parent=3D*/NULL, /*root_al=3D*/NULL, max_stack, symbols); if (ret) diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h index 06d463ccc7a0..27d8e486dc22 100644 --- a/tools/perf/util/callchain.h +++ b/tools/perf/util/callchain.h @@ -8,11 +8,9 @@ #include "branch.h" =20 struct addr_location; -struct evsel; struct hist_entry; struct hists; struct ip_callchain; -struct map; struct perf_sample; struct record_opts; struct thread; @@ -245,7 +243,7 @@ int record_opts__parse_callchain(struct record_opts *re= cord, =20 int sample__resolve_callchain(struct perf_sample *sample, struct callchain_cursor *cursor, struct symbol **parent, - struct evsel *evsel, struct addr_location *al, + struct addr_location *al, int max_stack); int hist_entry__append_callchain(struct hist_entry *he, struct perf_sample= *sample); int fill_callchain_info(struct addr_location *al, struct callchain_cursor_= node *node, @@ -308,7 +306,7 @@ s64 callchain_avg_cycles(struct callchain_node *cnode); =20 typedef int (*callchain_iter_fn)(struct callchain_cursor_node *node, void = *data); =20 -int sample__for_each_callchain_node(struct thread *thread, struct evsel *e= vsel, +int sample__for_each_callchain_node(struct thread *thread, struct perf_sample *sample, int max_stack, bool symbols, callchain_iter_fn cb, void *data); =20 diff --git a/tools/perf/util/db-export.c b/tools/perf/util/db-export.c index cc2bb1af4243..d991e3168aed 100644 --- a/tools/perf/util/db-export.c +++ b/tools/perf/util/db-export.c @@ -208,8 +208,7 @@ static int db_ids_from_al(struct db_export *dbe, struct= addr_location *al, static struct call_path *call_path_from_sample(struct db_export *dbe, struct machine *machine, struct thread *thread, - struct perf_sample *sample, - struct evsel *evsel) + struct perf_sample *sample) { u64 kernel_start =3D machine__kernel_start(machine); struct call_path *current =3D &dbe->cpr->call_path; @@ -227,7 +226,7 @@ static struct call_path *call_path_from_sample(struct d= b_export *dbe, */ callchain_param.order =3D ORDER_CALLER; cursor =3D get_tls_callchain_cursor(); - err =3D thread__resolve_callchain(thread, cursor, evsel, + err =3D thread__resolve_callchain(thread, cursor, sample, NULL, NULL, PERF_MAX_STACK_DEPTH); if (err) { callchain_param.order =3D saved_order; @@ -390,8 +389,7 @@ int db_export__sample(struct db_export *dbe, union perf= _event *event, =20 if (dbe->cpr) { struct call_path *cp =3D call_path_from_sample(dbe, machine, - thread, sample, - evsel); + thread, sample); if (cp) { db_export__call_path(dbe, cp); es.call_path_id =3D cp->db_id; diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 747fdc455c80..f641cf321ace 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -1342,7 +1342,7 @@ int hist_entry_iter__add(struct hist_entry_iter *iter= , struct addr_location *al, alm =3D map__get(al->map); =20 err =3D sample__resolve_callchain(iter->sample, get_tls_callchain_cursor(= ), &iter->parent, - iter->evsel, al, max_stack_depth); + al, max_stack_depth); if (err) { map__put(alm); return err; diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index e76f8c86e62a..c2e0a99efe97 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2778,13 +2778,13 @@ static u64 get_leaf_frame_caller(struct perf_sample= *sample, =20 static int thread__resolve_callchain_sample(struct thread *thread, struct callchain_cursor *cursor, - struct evsel *evsel, struct perf_sample *sample, struct symbol **parent, struct addr_location *root_al, int max_stack, bool symbols) { + struct evsel *evsel =3D sample->evsel; struct branch_stack *branch =3D sample->branch_stack; struct branch_entry *entries =3D perf_sample__branch_entries(sample); struct ip_callchain *chain =3D sample->callchain; @@ -2986,10 +2986,11 @@ static int unwind_entry(struct unwind_entry *entry,= void *arg) =20 static int thread__resolve_callchain_unwind(struct thread *thread, struct callchain_cursor *cursor, - struct evsel *evsel, struct perf_sample *sample, int max_stack, bool symbols) { + struct evsel *evsel =3D sample->evsel; + /* Can we do dwarf post unwind? */ if (!((evsel->core.attr.sample_type & PERF_SAMPLE_REGS_USER) && (evsel->core.attr.sample_type & PERF_SAMPLE_STACK_USER))) @@ -3009,7 +3010,6 @@ static int thread__resolve_callchain_unwind(struct th= read *thread, =20 int __thread__resolve_callchain(struct thread *thread, struct callchain_cursor *cursor, - struct evsel *evsel, struct perf_sample *sample, struct symbol **parent, struct addr_location *root_al, @@ -3025,22 +3025,22 @@ int __thread__resolve_callchain(struct thread *thre= ad, =20 if (callchain_param.order =3D=3D ORDER_CALLEE) { ret =3D thread__resolve_callchain_sample(thread, cursor, - evsel, sample, + sample, parent, root_al, max_stack, symbols); if (ret) return ret; ret =3D thread__resolve_callchain_unwind(thread, cursor, - evsel, sample, + sample, max_stack, symbols); } else { ret =3D thread__resolve_callchain_unwind(thread, cursor, - evsel, sample, + sample, max_stack, symbols); if (ret) return ret; ret =3D thread__resolve_callchain_sample(thread, cursor, - evsel, sample, + sample, parent, root_al, max_stack, symbols); } diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index 22a42c5825fa..048b24e9bd38 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -187,7 +187,6 @@ struct callchain_cursor; =20 int __thread__resolve_callchain(struct thread *thread, struct callchain_cursor *cursor, - struct evsel *evsel, struct perf_sample *sample, struct symbol **parent, struct addr_location *root_al, @@ -196,7 +195,6 @@ int __thread__resolve_callchain(struct thread *thread, =20 static inline int thread__resolve_callchain(struct thread *thread, struct callchain_cursor *cursor, - struct evsel *evsel, struct perf_sample *sample, struct symbol **parent, struct addr_location *root_al, @@ -204,7 +202,6 @@ static inline int thread__resolve_callchain(struct thre= ad *thread, { return __thread__resolve_callchain(thread, cursor, - evsel, sample, parent, root_al, diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/p= erf/util/scripting-engines/trace-event-perl.c index e261a57b87d4..af0d514b2397 100644 --- a/tools/perf/util/scripting-engines/trace-event-perl.c +++ b/tools/perf/util/scripting-engines/trace-event-perl.c @@ -257,7 +257,7 @@ static void define_event_symbols(struct tep_event *even= t, } =20 static SV *perl_process_callchain(struct perf_sample *sample, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct addr_location *al) { struct callchain_cursor *cursor; @@ -272,7 +272,7 @@ static SV *perl_process_callchain(struct perf_sample *s= ample, =20 cursor =3D get_tls_callchain_cursor(); =20 - if (thread__resolve_callchain(al->thread, cursor, evsel, + if (thread__resolve_callchain(al->thread, cursor, sample, NULL, NULL, scripting_max_stack) !=3D 0) { pr_err("Failed to resolve callchain. Skipping\n"); goto exit; diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools= /perf/util/scripting-engines/trace-event-python.c index 5a30caaec73e..1537122167d5 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -390,7 +390,7 @@ static unsigned long get_offset(struct symbol *sym, str= uct addr_location *al) } =20 static PyObject *python_process_callchain(struct perf_sample *sample, - struct evsel *evsel, + struct evsel *evsel __maybe_unused, struct addr_location *al) { PyObject *pylist; @@ -404,7 +404,7 @@ static PyObject *python_process_callchain(struct perf_s= ample *sample, goto exit; =20 cursor =3D get_tls_callchain_cursor(); - if (thread__resolve_callchain(al->thread, cursor, evsel, + if (thread__resolve_callchain(al->thread, cursor, sample, NULL, NULL, scripting_max_stack) !=3D 0) { pr_err("Failed to resolve callchain. Skipping\n"); --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 8C426352C2B for ; Mon, 13 Apr 2026 04:12:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053546; cv=none; b=gh8F9ztZX9pjEYazOMSskLUQhR8tUtMBZ/bFNZC+xWrhXJ1aIZOQweyzzgiSm32mOVAqAfhgRlcSwnS+m81oNtjYP3u01zIjgY5hv6e5k1Mv0UTV5sxGbjsMISpER5CKFxLq0kxd+si9nYpCgElNohSFWMegWkS5YqpdyCN7r5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053546; c=relaxed/simple; bh=iQzrrSkgD5q24jleWyjN1o5X5X3t72d6WQTerHN5aeA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OzlueJo8845xBEYGthJ5Y646qqkRI7L3o9glJN1cFJR+NYpUnJE8SKnAueQugvGb8T+bJOAwHETfKcFPfYasXoL+2vopEhO2IurMfJbXaot5gYr/BExQi6K15aLmmjkD+E9WtaJZyYfWrcySFgzQDLvovK7Fz6AjOMDwdVzMs6Y= 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=A83WhHKF; arc=none smtp.client-ip=74.125.82.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="A83WhHKF" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2d9da2559aeso567482eec.0 for ; Sun, 12 Apr 2026 21:12:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053533; x=1776658333; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=jOx0vm5n0Y9FX3aCuWOTcby7VnTaMh5tBI/U2Q+kw/k=; b=A83WhHKFhXKUmSzyaO5BRkEfZYCZy+2f0dKiYgUowbzEyoZCAFEMmEaqFjaU/yWtEy G5OVdpAaPea/A85mYEcQ3XnZr7WBRjqOF8N3v9oDKpucbszeLeNdehVD4y0o8GgVE97S k1Rn/wChZwRg7ICcP3nGcFQDWh8D3Ys56YrCy9XAUTPezJVkfCjmwh6kpBn29d6wPtP9 jmOo/HF9sDKpQuZMKInZwdYTuxEG6L792+Rf3TZJ73rIRI7L7ttwSHXYfRZ8njP8yumD TRN/Uh89h56ajEi1EDZ5WAAiVn3mC2dHpYXJlM8D4wem/UvGYv1wuhKBGEEuXZQZBssy sg9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053533; x=1776658333; h=cc: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=jOx0vm5n0Y9FX3aCuWOTcby7VnTaMh5tBI/U2Q+kw/k=; b=hd6X6YgIndIXg0n4Vsphsko+NFp2nwhUgpv1R9/1LtjX5681JHiu5q4DxXqOJk06bv j7K7s2qHvwvIFKWP+lLV8HHwp9oSmYIC34cgpdNa+Z1Cp4JMTAQ5+Uy1a5bbyCJniudn O5CAIoa3N21TK3s43XtbM3Jp+MNqYmwGus3Api7KUZvfkF6plaFHTeoa9KFIzzJV9Gfd kjGCY/L+Zwgd2MxSFxay5rNJlun16QfD+WoV+R3LdNSiftWmRL2GcwaaIhEFsLbAVUpI 3lUtg8SM8DpZHUQpAc7KTxGCXhEzo3jjzUx3VBHfhrPAjWi8YdCu6C/HJAdXKe7eYly5 yeIg== X-Forwarded-Encrypted: i=1; AFNElJ9DqyJd2TQmDajobMWZv3f9+Q5edsaNbBkyWhCH7WqRjOcX8LiKqdMV+K0wlq5z4nB2SthhLf8n5KxZ6ew=@vger.kernel.org X-Gm-Message-State: AOJu0YyxjyIkaG9VuNMwjM3XdMgnZAVshQQGdCva7P1jVlAW5BqaDZzU N10n/YPKXoeX2ufbB6qDsB1NQO0RZh7wEK8S+bD5fpxnGI8SMR35ZQE3/WapIJ03a2LlY9ix0bU 1L0lG7x+HnA== X-Received: from dycnm7.prod.google.com ([2002:a05:7300:d187:b0:2d8:fc66:cd7b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:3247:b0:2c7:3a7:c7a7 with SMTP id 5a478bee46e88-2d5898aa87dmr5815087eec.25.1776053533011; Sun, 12 Apr 2026 21:12:13 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:17 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-8-irogers@google.com> Subject: [PATCH v12 07/33] perf lock: Only pass sample to handlers From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The evsel is within the sample and so only the sample needs to be passed. Remove the parameter and fix call site. Signed-off-by: Ian Rogers --- tools/perf/builtin-lock.c | 65 ++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index e2b585e528ac..b6533483ba64 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -473,28 +473,22 @@ static struct lock_stat *pop_from_result(void) =20 struct trace_lock_handler { /* it's used on CONFIG_LOCKDEP */ - int (*acquire_event)(struct evsel *evsel, - struct perf_sample *sample); + int (*acquire_event)(struct perf_sample *sample); =20 /* it's used on CONFIG_LOCKDEP && CONFIG_LOCK_STAT */ - int (*acquired_event)(struct evsel *evsel, - struct perf_sample *sample); + int (*acquired_event)(struct perf_sample *sample); =20 /* it's used on CONFIG_LOCKDEP && CONFIG_LOCK_STAT */ - int (*contended_event)(struct evsel *evsel, - struct perf_sample *sample); + int (*contended_event)(struct perf_sample *sample); =20 /* it's used on CONFIG_LOCKDEP */ - int (*release_event)(struct evsel *evsel, - struct perf_sample *sample); + int (*release_event)(struct perf_sample *sample); =20 /* it's used when CONFIG_LOCKDEP is off */ - int (*contention_begin_event)(struct evsel *evsel, - struct perf_sample *sample); + int (*contention_begin_event)(struct perf_sample *sample); =20 /* it's used when CONFIG_LOCKDEP is off */ - int (*contention_end_event)(struct evsel *evsel, - struct perf_sample *sample); + int (*contention_end_event)(struct perf_sample *sample); }; =20 static struct lock_seq_stat *get_seq(struct thread_stat *ts, u64 addr) @@ -563,8 +557,7 @@ static int get_key_by_aggr_mode(u64 *key, u64 addr, return get_key_by_aggr_mode_simple(key, addr, sample->tid); } =20 -static int report_lock_acquire_event(struct evsel *evsel __maybe_unused, - struct perf_sample *sample) +static int report_lock_acquire_event(struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; @@ -638,8 +631,7 @@ static int report_lock_acquire_event(struct evsel *evse= l __maybe_unused, return 0; } =20 -static int report_lock_acquired_event(struct evsel *evsel __maybe_unused, - struct perf_sample *sample) +static int report_lock_acquired_event(struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; @@ -704,8 +696,7 @@ static int report_lock_acquired_event(struct evsel *evs= el __maybe_unused, return 0; } =20 -static int report_lock_contended_event(struct evsel *evsel __maybe_unused, - struct perf_sample *sample) +static int report_lock_contended_event(struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; @@ -762,8 +753,7 @@ static int report_lock_contended_event(struct evsel *ev= sel __maybe_unused, return 0; } =20 -static int report_lock_release_event(struct evsel *evsel __maybe_unused, - struct perf_sample *sample) +static int report_lock_release_event(struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; @@ -963,8 +953,7 @@ static u64 *get_callstack(struct perf_sample *sample, i= nt max_stack) return callstack; } =20 -static int report_lock_contention_begin_event(struct evsel *evsel __maybe_= unused, - struct perf_sample *sample) +static int report_lock_contention_begin_event(struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; @@ -1127,8 +1116,7 @@ static int report_lock_contention_begin_event(struct = evsel *evsel __maybe_unused return 0; } =20 -static int report_lock_contention_end_event(struct evsel *evsel __maybe_un= used, - struct perf_sample *sample) +static int report_lock_contention_end_event(struct perf_sample *sample) { struct lock_stat *ls; struct thread_stat *ts; @@ -1208,45 +1196,45 @@ static struct trace_lock_handler contention_lock_op= s =3D { =20 static struct trace_lock_handler *trace_handler; =20 -static int evsel__process_lock_acquire(struct evsel *evsel, struct perf_sa= mple *sample) +static int evsel__process_lock_acquire(struct perf_sample *sample) { if (trace_handler->acquire_event) - return trace_handler->acquire_event(evsel, sample); + return trace_handler->acquire_event(sample); return 0; } =20 -static int evsel__process_lock_acquired(struct evsel *evsel, struct perf_s= ample *sample) +static int evsel__process_lock_acquired(struct perf_sample *sample) { if (trace_handler->acquired_event) - return trace_handler->acquired_event(evsel, sample); + return trace_handler->acquired_event(sample); return 0; } =20 -static int evsel__process_lock_contended(struct evsel *evsel, struct perf_= sample *sample) +static int evsel__process_lock_contended(struct perf_sample *sample) { if (trace_handler->contended_event) - return trace_handler->contended_event(evsel, sample); + return trace_handler->contended_event(sample); return 0; } =20 -static int evsel__process_lock_release(struct evsel *evsel, struct perf_sa= mple *sample) +static int evsel__process_lock_release(struct perf_sample *sample) { if (trace_handler->release_event) - return trace_handler->release_event(evsel, sample); + return trace_handler->release_event(sample); return 0; } =20 -static int evsel__process_contention_begin(struct evsel *evsel, struct per= f_sample *sample) +static int evsel__process_contention_begin(struct perf_sample *sample) { if (trace_handler->contention_begin_event) - return trace_handler->contention_begin_event(evsel, sample); + return trace_handler->contention_begin_event(sample); return 0; } =20 -static int evsel__process_contention_end(struct evsel *evsel, struct perf_= sample *sample) +static int evsel__process_contention_end(struct perf_sample *sample) { if (trace_handler->contention_end_event) - return trace_handler->contention_end_event(evsel, sample); + return trace_handler->contention_end_event(sample); return 0; } =20 @@ -1424,8 +1412,7 @@ static int process_event_update(const struct perf_too= l *tool, return 0; } =20 -typedef int (*tracepoint_handler)(struct evsel *evsel, - struct perf_sample *sample); +typedef int (*tracepoint_handler)(struct perf_sample *sample); =20 static int process_sample_event(const struct perf_tool *tool __maybe_unuse= d, union perf_event *event, @@ -1445,7 +1432,7 @@ static int process_sample_event(const struct perf_too= l *tool __maybe_unused, =20 if (evsel->handler !=3D NULL) { tracepoint_handler f =3D evsel->handler; - err =3D f(evsel, sample); + err =3D f(sample); } =20 thread__put(thread); --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.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 9A63C37FF48 for ; Mon, 13 Apr 2026 04:12:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053544; cv=none; b=BT7uh38rxmRPCTTxT6MvQGrVbat4qBRjFLCWeDIchgoftgODj4EpjheSJePQdXWz7VErb43NurbZLviyB52mlmkpSMOtm+mV5nJlPJlwiwjauqo5wUMPUtqACDDrqOn+ftHtCXvGaKYiOIbP2x8VBpgPvh/MybdfIskM2Pun5Os= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053544; c=relaxed/simple; bh=nrE8NbjgL5GodtjlelQu6WKY5Rt5ryJ3pELk9LbtElA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=n+xecedvnKYAD9iKJ5lZIcO8X+sI6GSDfga7Ijr5phClV7PP9ZtDfOraT57JoqhPxDHqNMhwlYHdmlmwmUjvVsm6C4bXRlMo4aKc6Q0JxkPQ8AkXk28SZ9h+k0i43k9ZkIC4LaUbpl0mc9WN/491QgvbDZ7XXV5ZGip9ZTOrBUo= 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=ISrDF4XV; arc=none smtp.client-ip=74.125.82.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="ISrDF4XV" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-127876be621so3268505c88.1 for ; Sun, 12 Apr 2026 21:12:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053536; x=1776658336; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=CYe/pTSkEo3bwawbKUcGMi5fd/X0VJXe6Y5bot3/3gQ=; b=ISrDF4XVl/CYZzgf2RjZYqjSmkKt8k0UHiPeu8cvuYs9YI7buxdlwNsRZS1OsidDJj TWJIHzZ0zeHv9BTkAD5vt+I2TkJo+uI0LWLC2f3NrNhf20jGhH3aArI/7THzpxlDAkYm N3OCBJjrEEwiRinKWYJ7BF4lIPutJAbibBtzXH7CzJ5MEo1cjFHWUOSsFOgLqvL9biw+ ffpS0PfXw+2OOZos+7jG7LY2FQmELvrz1lsb/zMjLtGmdtWYoDYEnHxPhqdIl8fOXve/ kA9+gpuXKvP6YOyeW767qixxNZn9+H4rBJ4WQxGmpQYz8Hch1c2EYVIwVIrWveg6Gfq9 qkJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053536; x=1776658336; h=cc: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=CYe/pTSkEo3bwawbKUcGMi5fd/X0VJXe6Y5bot3/3gQ=; b=kiPtbJSCJ5S3cRCXI/ej7/JIrhVyGwZd6S4d7IFBVrqFJciiOmgmjZSsRJqbDQ0e+O BygdeLieKmDogdbearH8daiZdpqNBktqPLHut+TQXX6LmarVag+rCKOjOOyZNGgbxO7T 7o7U0+mCr5nAwGORtN5Ral3/unf/g3mUujRKJW90a0ZP1EJ2kYWyrVAuLrce5cJzYcWK ITS9gcC1yZO6b4zomvSczzLiBjSgTLWS0XR4GGP/mEmgnempwi1hQxZcfPi7cBQLh1oX u5nANkdKSgF08fGe1MHheoMImiO7xsxiK/ZOG4s3bKGsFBbU4JY6cGquxJ5Sr3Ezn0CN cLoQ== X-Forwarded-Encrypted: i=1; AJvYcCXgdRD+S9CoQOAc36RqSqonjUmJxQDFHKHANPCAsd5DXKEiLuxTpStLEHrDTvoOxyuDrKR+ka3DLFYSonA=@vger.kernel.org X-Gm-Message-State: AOJu0YxTS+uxU2ZBRoSRqHQx40s+L3M+DPhne4cFZtH9cDy8FoELpP1V 1Ykilq4M02TJFSYgYzv7Mqgbgm6FFhM5rDWmXDVgob1M+nHNbgpI5lNO4FNEANGqSiT+itfUreq bPSIiWfJ0Gg== X-Received: from dlaf20.prod.google.com ([2002:a05:701b:2414:b0:12a:7efb:240f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:f86:b0:12c:81b:c74b with SMTP id a92af1059eb24-12c28bf37cemr6895752c88.1.1776053535216; Sun, 12 Apr 2026 21:12:15 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:18 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-9-irogers@google.com> Subject: [PATCH v12 08/33] perf hist: Remove evsel parameter from inc samples functions From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" hist_entry__inc_addr_samples and addr_map_symbol__inc_samples unnecessarily take an evsel argument. Read the evsel from the sample instead. Signed-off-by: Ian Rogers --- tools/perf/builtin-annotate.c | 7 +++---- tools/perf/builtin-c2c.c | 2 +- tools/perf/builtin-report.c | 18 ++++++++---------- tools/perf/builtin-top.c | 6 +++--- tools/perf/util/annotate.c | 19 +++++++++---------- tools/perf/util/annotate.h | 6 ++---- 6 files changed, 26 insertions(+), 32 deletions(-) diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 58e56f826367..ee1ba2dc35f4 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -176,16 +176,15 @@ static int hist_iter__branch_callback(struct hist_ent= ry_iter *iter, struct hist_entry *he =3D iter->he; struct branch_info *bi; struct perf_sample *sample =3D iter->sample; - struct evsel *evsel =3D iter->evsel; int err; =20 bi =3D he->branch_info; - err =3D addr_map_symbol__inc_samples(&bi->from, sample, evsel); + err =3D addr_map_symbol__inc_samples(&bi->from, sample); =20 if (err) goto out; =20 - err =3D addr_map_symbol__inc_samples(&bi->to, sample, evsel); + err =3D addr_map_symbol__inc_samples(&bi->to, sample); =20 out: return err; @@ -275,7 +274,7 @@ static int evsel__add_sample(struct evsel *evsel, struc= t perf_sample *sample, if (he =3D=3D NULL) return -ENOMEM; =20 - ret =3D hist_entry__inc_addr_samples(he, sample, evsel, al->addr); + ret =3D hist_entry__inc_addr_samples(he, sample, al->addr); hists__inc_nr_samples(hists, true); return ret; } diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index 2fa3d7ec8a09..36f386949923 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -371,7 +371,7 @@ static int process_sample_event(const struct perf_tool = *tool __maybe_unused, =20 if (perf_c2c__has_annotation(NULL)) { perf_c2c__evsel_hists_inc_stats(evsel, he, sample); - addr_map_symbol__inc_samples(mem_info__iaddr(mi), sample, evsel); + addr_map_symbol__inc_samples(mem_info__iaddr(mi), sample); } =20 ret =3D hist_entry__append_callchain(he, sample); diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 848e2ccb1420..46d839bbaeef 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -170,7 +170,6 @@ static int hist_iter__report_callback(struct hist_entry= _iter *iter, int err =3D 0; struct report *rep =3D arg; struct hist_entry *he =3D iter->he; - struct evsel *evsel =3D iter->evsel; struct perf_sample *sample =3D iter->sample; struct mem_info *mi; struct branch_info *bi; @@ -180,25 +179,25 @@ static int hist_iter__report_callback(struct hist_ent= ry_iter *iter, =20 if (sort__mode =3D=3D SORT_MODE__BRANCH) { bi =3D he->branch_info; - err =3D addr_map_symbol__inc_samples(&bi->from, sample, evsel); + err =3D addr_map_symbol__inc_samples(&bi->from, sample); if (err) goto out; =20 - err =3D addr_map_symbol__inc_samples(&bi->to, sample, evsel); + err =3D addr_map_symbol__inc_samples(&bi->to, sample); =20 } else if (rep->mem_mode) { mi =3D he->mem_info; - err =3D addr_map_symbol__inc_samples(mem_info__daddr(mi), sample, evsel); + err =3D addr_map_symbol__inc_samples(mem_info__daddr(mi), sample); if (err) goto out; =20 - err =3D hist_entry__inc_addr_samples(he, sample, evsel, al->addr); + err =3D hist_entry__inc_addr_samples(he, sample, al->addr); =20 } else if (symbol_conf.cumulate_callchain) { if (single) - err =3D hist_entry__inc_addr_samples(he, sample, evsel, al->addr); + err =3D hist_entry__inc_addr_samples(he, sample, al->addr); } else { - err =3D hist_entry__inc_addr_samples(he, sample, evsel, al->addr); + err =3D hist_entry__inc_addr_samples(he, sample, al->addr); } =20 out: @@ -214,7 +213,6 @@ static int hist_iter__branch_callback(struct hist_entry= _iter *iter, struct report *rep =3D arg; struct branch_info *bi =3D he->branch_info; struct perf_sample *sample =3D iter->sample; - struct evsel *evsel =3D iter->evsel; int err; =20 branch_type_count(&rep->brtype_stat, &bi->flags, @@ -223,11 +221,11 @@ static int hist_iter__branch_callback(struct hist_ent= ry_iter *iter, if (!ui__has_annotation() && !rep->symbol_ipc) return 0; =20 - err =3D addr_map_symbol__inc_samples(&bi->from, sample, evsel); + err =3D addr_map_symbol__inc_samples(&bi->from, sample); if (err) goto out; =20 - err =3D addr_map_symbol__inc_samples(&bi->to, sample, evsel); + err =3D addr_map_symbol__inc_samples(&bi->to, sample); =20 out: return err; diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index f6eb543de537..b4fc991b4eeb 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -199,7 +199,7 @@ static void ui__warn_map_erange(struct map *map, struct= symbol *sym, u64 ip) static void perf_top__record_precise_ip(struct perf_top *top, struct hist_entry *he, struct perf_sample *sample, - struct evsel *evsel, u64 ip) + u64 ip) EXCLUSIVE_LOCKS_REQUIRED(he->hists->lock) { struct annotation *notes; @@ -216,7 +216,7 @@ static void perf_top__record_precise_ip(struct perf_top= *top, if (!annotation__trylock(notes)) return; =20 - err =3D hist_entry__inc_addr_samples(he, sample, evsel, ip); + err =3D hist_entry__inc_addr_samples(he, sample, ip); =20 annotation__unlock(notes); =20 @@ -735,7 +735,7 @@ static int hist_iter__top_callback(struct hist_entry_it= er *iter, struct evsel *evsel =3D iter->evsel; =20 if (perf_hpp_list.sym && single) - perf_top__record_precise_ip(top, iter->he, iter->sample, evsel, al->addr= ); + perf_top__record_precise_ip(top, iter->he, iter->sample, al->addr); =20 hist__account_cycles(iter->sample->branch_stack, al, iter->sample, !(top->record_opts.branch_stack & PERF_SAMPLE_BRANCH_ANY), diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index e745f3034a0e..470569745abe 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -213,9 +213,10 @@ static int __symbol__account_cycles(struct cyc_hist *c= h, } =20 static int __symbol__inc_addr_samples(struct map_symbol *ms, - struct annotated_source *src, struct evsel *evsel, u64 addr, + struct annotated_source *src, u64 addr, struct perf_sample *sample) { + struct evsel *evsel =3D sample->evsel; struct symbol *sym =3D ms->sym; long hash_key; u64 offset; @@ -318,7 +319,7 @@ struct annotated_source *symbol__hists(struct symbol *s= ym, int nr_hists) } =20 static int symbol__inc_addr_samples(struct map_symbol *ms, - struct evsel *evsel, u64 addr, + u64 addr, struct perf_sample *sample) { struct symbol *sym =3D ms->sym; @@ -326,8 +327,8 @@ static int symbol__inc_addr_samples(struct map_symbol *= ms, =20 if (sym =3D=3D NULL) return 0; - src =3D symbol__hists(sym, evsel->evlist->core.nr_entries); - return src ? __symbol__inc_addr_samples(ms, src, evsel, addr, sample) : 0; + src =3D symbol__hists(sym, sample->evsel->evlist->core.nr_entries); + return src ? __symbol__inc_addr_samples(ms, src, addr, sample) : 0; } =20 static int symbol__account_br_cntr(struct annotated_branch *branch, @@ -581,16 +582,14 @@ static int annotation__compute_ipc(struct annotation = *notes, size_t size, return 0; } =20 -int addr_map_symbol__inc_samples(struct addr_map_symbol *ams, struct perf_= sample *sample, - struct evsel *evsel) +int addr_map_symbol__inc_samples(struct addr_map_symbol *ams, struct perf_= sample *sample) { - return symbol__inc_addr_samples(&ams->ms, evsel, ams->al_addr, sample); + return symbol__inc_addr_samples(&ams->ms, ams->al_addr, sample); } =20 -int hist_entry__inc_addr_samples(struct hist_entry *he, struct perf_sample= *sample, - struct evsel *evsel, u64 ip) +int hist_entry__inc_addr_samples(struct hist_entry *he, struct perf_sample= *sample, u64 ip) { - return symbol__inc_addr_samples(&he->ms, evsel, ip, sample); + return symbol__inc_addr_samples(&he->ms, ip, sample); } =20 =20 diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h index 696e36dbf013..1aa6df7d1618 100644 --- a/tools/perf/util/annotate.h +++ b/tools/perf/util/annotate.h @@ -422,8 +422,7 @@ static inline struct annotation *symbol__annotation(str= uct symbol *sym) return (void *)sym - symbol_conf.priv_size; } =20 -int addr_map_symbol__inc_samples(struct addr_map_symbol *ams, struct perf_= sample *sample, - struct evsel *evsel); +int addr_map_symbol__inc_samples(struct addr_map_symbol *ams, struct perf_= sample *sample); =20 struct annotated_branch *annotation__get_branch(struct annotation *notes); =20 @@ -433,8 +432,7 @@ int addr_map_symbol__account_cycles(struct addr_map_sym= bol *ams, struct evsel *evsel, u64 br_cntr); =20 -int hist_entry__inc_addr_samples(struct hist_entry *he, struct perf_sample= *sample, - struct evsel *evsel, u64 addr); +int hist_entry__inc_addr_samples(struct hist_entry *he, struct perf_sample= *sample, u64 addr); =20 struct annotated_source *symbol__hists(struct symbol *sym, int nr_hists); void symbol__annotate_zero_histograms(struct symbol *sym); --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.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 EC3C83806B5 for ; Mon, 13 Apr 2026 04:12:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053545; cv=none; b=ufuQCsuYh0Ed7XJkLitGiOdl6nBV07lqqSL8cvQ3R+FqTPnliy6enH2yIEf+CNXns9WU43yHdHbafS/z1yjlwWr1Pe6tVJxrsqmHunuqiGBNPKR4dQ6ixaMzFhK9nqqb2i5v60hYe8XKrcWcR+zRZCAFLj9jalss199tKjlHObw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053545; c=relaxed/simple; bh=zocEQ15pqhkgaBM7JLqkF/pDJjGAt5zDiwcYu+1pxdw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=u6XxzV+tF7Ebx68J+AgQDfVzK1GzU3pmjo5J4IL384H3oAEIrLMrAHrn58eCnLHl98JVTeSZZD7LRB2VdKo7d0CtTBuyir/mqB05xMmXEOodnu1nPAw1VUGgKoiOiFEz7jbG52/1tCYhCfzMXRpD1nDXVOYPToKviWPTq1wy334= 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=JDmPOJgC; arc=none smtp.client-ip=74.125.82.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="JDmPOJgC" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c20a91932so7882953c88.1 for ; Sun, 12 Apr 2026 21:12:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053538; x=1776658338; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=qFmOnjJwpBpu0n7wKSDPl2Bef0Eg6yPkVeQqUwZtmi0=; b=JDmPOJgCa3nowCAwQQkVZcLuzGP5A3EJtoJHGFX/pqzVDJOb9TVegnlFTDbguGnk1Y SJLTo8Pr2eT9qgkvMvF7nxNHF22kmu3XfC5Y56JPSN/VDV/QzZ8XvhJFxfhj9NQkhZCl celzE1cLXN+D7GnxFQ6Ddpp4c7IzfChuH8sthwn6GD9Xa2cKTEkmwEeJyt/NqDmI04hW FzepZR/KvlMWLZlaoSI7JGe1bamPu3/K6HQ5YSZsj6auyEF5hHZF/6B5N1WhfsZz2hR4 ErJ5K7pkS5PBv32QEPamKivnMtgLHRjejICJoPJY3ruWi/8ZnQOzzQmB4HL+ofS643nN vP3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053538; x=1776658338; h=cc: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=qFmOnjJwpBpu0n7wKSDPl2Bef0Eg6yPkVeQqUwZtmi0=; b=hEnsS+a3qFzSXBQUGHtKp+xDzaPm4x4QbjoSy01aIC6DvKpi7lG6514QNk5pBTGsBZ i8uNu9+dKN11FwyxrEHQ6Pr2vlkJNM9DwgNn79Cy4K8+nDPntO/aPVmuc25AXE0/Z2UT YHP0N9gErAnRVzjEFTAQeKPM7yo27/pYboG0xDYPxL5d/NXYomqt0AMgrDtuPBUbTzxn xRjV4VVnNt6WKOv46wqSAjKSmyc5/LzejOdNWXvqDiceCt5JRB0bJ2FhkWDnFwPcE9s5 UgwkwOibTKXAIZF9BUcPwI2ZHYcVLE8e/IhrE8oRM8z1MO2th1QkWf44ZrHDle+VfICW Mj2A== X-Forwarded-Encrypted: i=1; AJvYcCWEZ7x42ApGV0sbHTlgZ+JXHRaAf+UAdYIcS7h85Eq++V44hvlODMJFDskClpVl/y57VlYHHGsrbAyW9Ng=@vger.kernel.org X-Gm-Message-State: AOJu0YxJaIG835x/Pu96FFndgOltiIlBvMaTrex3C6cH6DUKGQFafaNU HZa5AuvmB2ORkE4eakLG8cKB/km31yAJSQjHXqyPVP1aDbGhPAH8b4h8vG8RVKJmVr32Rxl2wZC ntLz193JwdA== X-Received: from dlbsn14.prod.google.com ([2002:a05:7022:b90e:b0:12a:7f44:d2e3]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:701b:2205:b0:12a:7181:2f1c with SMTP id a92af1059eb24-12c34ecf751mr4257950c88.17.1776053537574; Sun, 12 Apr 2026 21:12:17 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:19 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-10-irogers@google.com> Subject: [PATCH v12 09/33] perf db-export: Remove evsel from struct export_sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As the sample contains the evsel avoid the duplication. Remove the evsel from db_export__sample as it can also read from the sample. Signed-off-by: Ian Rogers --- tools/perf/util/db-export.c | 5 ++--- tools/perf/util/db-export.h | 3 +-- tools/perf/util/scripting-engines/trace-event-python.c | 8 ++++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/tools/perf/util/db-export.c b/tools/perf/util/db-export.c index d991e3168aed..ba54b1119ee6 100644 --- a/tools/perf/util/db-export.c +++ b/tools/perf/util/db-export.c @@ -344,14 +344,13 @@ static int db_export__threads(struct db_export *dbe, = struct thread *thread, } =20 int db_export__sample(struct db_export *dbe, union perf_event *event, - struct perf_sample *sample, struct evsel *evsel, + struct perf_sample *sample, struct addr_location *al, struct addr_location *addr_al) { struct thread *thread =3D al->thread; struct export_sample es =3D { .event =3D event, .sample =3D sample, - .evsel =3D evsel, .al =3D al, }; struct thread *main_thread; @@ -364,7 +363,7 @@ int db_export__sample(struct db_export *dbe, union perf= _event *event, if (!machine) return -1; =20 - err =3D db_export__evsel(dbe, evsel); + err =3D db_export__evsel(dbe, sample->evsel); if (err) return err; =20 diff --git a/tools/perf/util/db-export.h b/tools/perf/util/db-export.h index 23983cb35706..1abbfd398e3a 100644 --- a/tools/perf/util/db-export.h +++ b/tools/perf/util/db-export.h @@ -25,7 +25,6 @@ struct call_return; struct export_sample { union perf_event *event; struct perf_sample *sample; - struct evsel *evsel; struct addr_location *al; u64 db_id; u64 comm_db_id; @@ -96,7 +95,7 @@ int db_export__symbol(struct db_export *dbe, struct symbo= l *sym, int db_export__branch_type(struct db_export *dbe, u32 branch_type, const char *name); int db_export__sample(struct db_export *dbe, union perf_event *event, - struct perf_sample *sample, struct evsel *evsel, + struct perf_sample *sample, struct addr_location *al, struct addr_location *addr_al); =20 int db_export__branch_types(struct db_export *dbe); diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools= /perf/util/scripting-engines/trace-event-python.c index 1537122167d5..9e1069ec0578 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -1312,7 +1312,7 @@ static void python_export_sample_table(struct db_expo= rt *dbe, t =3D tuple_new(28); =20 tuple_set_d64(t, 0, es->db_id); - tuple_set_d64(t, 1, es->evsel->db_id); + tuple_set_d64(t, 1, es->sample->evsel->db_id); tuple_set_d64(t, 2, maps__machine(thread__maps(es->al->thread))->db_id); tuple_set_d64(t, 3, thread__db_id(es->al->thread)); tuple_set_d64(t, 4, es->comm_db_id); @@ -1353,7 +1353,7 @@ static void python_export_synth(struct db_export *dbe= , struct export_sample *es) t =3D tuple_new(3); =20 tuple_set_d64(t, 0, es->db_id); - tuple_set_d64(t, 1, es->evsel->core.attr.config); + tuple_set_d64(t, 1, es->sample->evsel->core.attr.config); tuple_set_bytes(t, 2, es->sample->raw_data, es->sample->raw_size); =20 call_object(tables->synth_handler, t, "synth_data"); @@ -1368,7 +1368,7 @@ static int python_export_sample(struct db_export *dbe, =20 python_export_sample_table(dbe, es); =20 - if (es->evsel->core.attr.type =3D=3D PERF_TYPE_SYNTH && tables->synth_han= dler) + if (es->sample->evsel->core.attr.type =3D=3D PERF_TYPE_SYNTH && tables->s= ynth_handler) python_export_synth(dbe, es); =20 return 0; @@ -1517,7 +1517,7 @@ static void python_process_event(union perf_event *ev= ent, /* Reserve for future process_hw/sw/raw APIs */ default: if (tables->db_export_mode) - db_export__sample(&tables->dbe, event, sample, evsel, al, addr_al); + db_export__sample(&tables->dbe, event, sample, al, addr_al); else python_process_general_event(sample, evsel, al, addr_al); } --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 6D6F537FF53 for ; Mon, 13 Apr 2026 04:12:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053550; cv=none; b=BPbCRaftborFQNUvYrQICOocvOUHYVvS2qbwLcZSSBNa7+bXmFlyELcFHtaHThNDc6lcwsZt25Oxe4VtgqFf2qLf+zOO5cConW+tHvQbeLC9lfs8FSbVoJZkH6E0YOB+9OwJdPM1iocO+cfu1wYs/yCX05acgkXZBKd1umy/Xkw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053550; c=relaxed/simple; bh=O8SeBQYRtZfVbPx2BCDTNpujwAYEkUSpzlGDMnrE3rg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KwWbMOFi4Az1uP2pU5i824GS2o537Nuv3VKAM0Qj0AIvxYx6W9ubwtfY1r1XgpHK+YvqD6JLNJqE8uJBotc4A7ngrdcXVVCOhxuQogNl9DTnaOJAvjPwjV7HdJNF/7kDYAk7UyNiuDdEvJeF1VwdFEsY51RRFodMLTqVIZG71FQ= 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=OA8fMb3N; arc=none smtp.client-ip=74.125.82.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="OA8fMb3N" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2d93379001eso1541289eec.1 for ; Sun, 12 Apr 2026 21:12:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053540; x=1776658340; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=QXDoV621AgmOA9pWlvFBOO3ASn3gi8/J5JlWkTFIGII=; b=OA8fMb3NoDT1LOrk3ia6deLLmXfla5jM2JnlaAFC2Qfr9SFGzgo6c9S4ZsEGiYirxG 0Bpq+7D7Gei4HTuuzYA/BINZKO6S3Soewaf6/nyajMlu05Q713Sbe+mpty9r/a2NcxPU C34lfbUTH5c3at2hUam31VDAjC3R196MlTMm8RI4fS9/n+iV34KJi9DL0ZxHJA2DPtGb lkURIR/B4toxHQSFgSwnrz3aDiOaD9dCXvxCWx8bVR3siiRhdDbXzRZlCkH6xM5kwS/v 2xb/j0kfifR1u3RHYCE4ahVxmX5mWEYnJVSyL4xmCyDTa+eEHvH614Vqg8XIvWFwL2B+ FoEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053540; x=1776658340; h=cc: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=QXDoV621AgmOA9pWlvFBOO3ASn3gi8/J5JlWkTFIGII=; b=rZOG50gfwyu8lHKJtTV0YugIiMRei/hAiG//kVRYW0oKBMHJqDYwNy5jMOxAF8yAHt Ho/RRvCoLzYGLDYWhH1SoXPOaf52LOzXSWrcg1uFIDkxkR4nfrf0coK7kGvEbQvQmM7Y /2rlbcL7SRxOfhfWljKUhR8q0pc4kCOsm5EALgCZN2zB3NwTAumufwtMMULCMZ93B/FY Y0d7Xdny9boJ2zSbY/ZcL4sdIVnoaIrX9+1zOOOm4gQSqnUKOCwMFHLta/8v6mD6J7RQ pX3/KClWru2VXnUeok9yaMq9V6D2mmVQmvwIZbIBI5fGg0xUxEh1CAZUmZB6flLmdyyX zgMg== X-Forwarded-Encrypted: i=1; AFNElJ9QpCoXGuFA515Z20WPjZs7NeNeWdTUOZ5pSVwF8YdOj2l4N25pqy9pqevQz4C+v4hlq/54trvbGolmS2s=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3settC7ripBtbcfriwNl16QVMxi3g0yZTVfI97F6cE+3rs/LA x1Ip1d4YM3TJ1I+9L85/ctubGW1Wq34lyIWH2i8bs0VM2HUyGueecbAQQA4dxhXuiaVGEczwzXU gh/hFWseu8A== X-Received: from dybir4.prod.google.com ([2002:a05:7300:c8c4:b0:2da:13c6:f288]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:693c:2c96:b0:2c5:50fe:c771 with SMTP id 5a478bee46e88-2d58aa833b4mr7782994eec.29.1776053539600; Sun, 12 Apr 2026 21:12:19 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:20 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-11-irogers@google.com> Subject: [PATCH v12 10/33] perf hist: Remove evsel from struct hist_entry_iter From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" struct hist_entry_iter has the sample within it so the evsel is unnecessary. Remove the evsel and update uses. Also remove the evsel from hist__account_cycles and derive it from the sample too. Signed-off-by: Ian Rogers --- tools/perf/builtin-annotate.c | 10 ++++------ tools/perf/builtin-diff.c | 3 +-- tools/perf/builtin-report.c | 6 ++---- tools/perf/builtin-top.c | 9 +++------ tools/perf/tests/hists_cumulate.c | 1 - tools/perf/tests/hists_filter.c | 1 - tools/perf/tests/hists_output.c | 1 - tools/perf/util/hist.c | 24 ++++++++++++------------ tools/perf/util/hist.h | 3 +-- 9 files changed, 23 insertions(+), 35 deletions(-) diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index ee1ba2dc35f4..6f8be9ead43b 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -190,14 +190,12 @@ static int hist_iter__branch_callback(struct hist_ent= ry_iter *iter, return err; } =20 -static int process_branch_callback(struct evsel *evsel, - struct perf_sample *sample, +static int process_branch_callback(struct perf_sample *sample, struct addr_location *al, struct perf_annotate *ann, struct machine *machine) { struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D sample, .add_entry_cb =3D hist_iter__branch_callback, .hide_unresolved =3D symbol_conf.hide_unresolved, @@ -220,8 +218,8 @@ static int process_branch_callback(struct evsel *evsel, if (a.map !=3D NULL) dso__set_hit(map__dso(a.map)); =20 - hist__account_cycles(sample->branch_stack, al, sample, false, - NULL, evsel); + hist__account_cycles(sample->branch_stack, al, sample, /*nonany_branch_mo= de=3D*/false, + /*total_cycles=3D*/NULL); =20 ret =3D hist_entry_iter__add(&iter, &a, PERF_MAX_STACK_DEPTH, ann); out: @@ -268,7 +266,7 @@ static int evsel__add_sample(struct evsel *evsel, struc= t perf_sample *sample, process_branch_stack(sample->branch_stack, al, sample); =20 if (ann->has_br_stack && has_annotation(ann)) - return process_branch_callback(evsel, sample, al, ann, machine); + return process_branch_callback(sample, al, ann, machine); =20 he =3D hists__add_entry(hists, al, NULL, NULL, NULL, NULL, sample, true); if (he =3D=3D NULL) diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index 82e9e514922b..b4ff863b304c 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c @@ -397,7 +397,6 @@ static int diff__process_sample_event(const struct perf= _tool *tool, struct evsel *evsel =3D sample->evsel; struct hists *hists =3D evsel__hists(evsel); struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D sample, .ops =3D &hist_iter_normal, }; @@ -431,7 +430,7 @@ static int diff__process_sample_event(const struct perf= _tool *tool, } =20 hist__account_cycles(sample->branch_stack, &al, sample, - false, NULL, evsel); + /*nonany_branch_mode=3D*/false, /*total_cycles=3D*/NULL); break; =20 case COMPUTE_STREAM: diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 46d839bbaeef..ff7117c5470f 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -265,10 +265,8 @@ static int process_sample_event(const struct perf_tool= *tool, struct machine *machine) { struct report *rep =3D container_of(tool, struct report, tool); - struct evsel *evsel =3D sample->evsel; struct addr_location al; struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D sample, .hide_unresolved =3D symbol_conf.hide_unresolved, .add_entry_cb =3D hist_iter__report_callback, @@ -280,7 +278,7 @@ static int process_sample_event(const struct perf_tool = *tool, return 0; } =20 - if (evswitch__discard(&rep->evswitch, evsel)) + if (evswitch__discard(&rep->evswitch, sample->evsel)) return 0; =20 addr_location__init(&al); @@ -324,7 +322,7 @@ static int process_sample_event(const struct perf_tool = *tool, if (ui__has_annotation() || rep->symbol_ipc || rep->total_cycles_mode) { hist__account_cycles(sample->branch_stack, &al, sample, rep->nonany_branch_mode, - &rep->total_cycles, evsel); + &rep->total_cycles); } =20 rep->total_samples++; diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index b4fc991b4eeb..6cf73bb0c7af 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -732,20 +732,18 @@ static int hist_iter__top_callback(struct hist_entry_= iter *iter, EXCLUSIVE_LOCKS_REQUIRED(iter->he->hists->lock) { struct perf_top *top =3D arg; - struct evsel *evsel =3D iter->evsel; =20 if (perf_hpp_list.sym && single) perf_top__record_precise_ip(top, iter->he, iter->sample, al->addr); =20 hist__account_cycles(iter->sample->branch_stack, al, iter->sample, !(top->record_opts.branch_stack & PERF_SAMPLE_BRANCH_ANY), - NULL, evsel); + /*total_cycles=3D*/NULL); return 0; } =20 static void perf_event__process_sample(const struct perf_tool *tool, const union perf_event *event, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -831,9 +829,8 @@ static void perf_event__process_sample(const struct per= f_tool *tool, } =20 if (al.sym =3D=3D NULL || !al.sym->idle) { - struct hists *hists =3D evsel__hists(evsel); + struct hists *hists =3D evsel__hists(sample->evsel); struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D sample, .add_entry_cb =3D hist_iter__top_callback, }; @@ -1211,7 +1208,7 @@ static int deliver_event(struct ordered_events *qe, } =20 if (event->header.type =3D=3D PERF_RECORD_SAMPLE) { - perf_event__process_sample(&top->tool, event, evsel, + perf_event__process_sample(&top->tool, event, &sample, machine); } else if (event->header.type =3D=3D PERF_RECORD_LOST) { perf_top__process_lost(top, event, evsel); diff --git a/tools/perf/tests/hists_cumulate.c b/tools/perf/tests/hists_cum= ulate.c index 606aa926a8fc..267cbc24691a 100644 --- a/tools/perf/tests/hists_cumulate.c +++ b/tools/perf/tests/hists_cumulate.c @@ -87,7 +87,6 @@ static int add_hist_entries(struct hists *hists, struct m= achine *machine) addr_location__init(&al); for (i =3D 0; i < ARRAY_SIZE(fake_samples); i++) { struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D &sample, .hide_unresolved =3D false, }; diff --git a/tools/perf/tests/hists_filter.c b/tools/perf/tests/hists_filte= r.c index cc6b26e373d1..002e3a4c1ca5 100644 --- a/tools/perf/tests/hists_filter.c +++ b/tools/perf/tests/hists_filter.c @@ -63,7 +63,6 @@ static int add_hist_entries(struct evlist *evlist, evlist__for_each_entry(evlist, evsel) { for (i =3D 0; i < ARRAY_SIZE(fake_samples); i++) { struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D &sample, .ops =3D &hist_iter_normal, .hide_unresolved =3D false, diff --git a/tools/perf/tests/hists_output.c b/tools/perf/tests/hists_outpu= t.c index 7818950d786e..fa683fd7b1e5 100644 --- a/tools/perf/tests/hists_output.c +++ b/tools/perf/tests/hists_output.c @@ -57,7 +57,6 @@ static int add_hist_entries(struct hists *hists, struct m= achine *machine) addr_location__init(&al); for (i =3D 0; i < ARRAY_SIZE(fake_samples); i++) { struct hist_entry_iter iter =3D { - .evsel =3D evsel, .sample =3D &sample, .ops =3D &hist_iter_normal, .hide_unresolved =3D false, diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index f641cf321ace..811d68fa6770 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -935,8 +935,8 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter,= struct addr_location *al { u64 cost; struct mem_info *mi =3D iter->mi; - struct hists *hists =3D evsel__hists(iter->evsel); struct perf_sample *sample =3D iter->sample; + struct hists *hists =3D evsel__hists(sample->evsel); struct hist_entry *he; =20 if (mi =3D=3D NULL) @@ -968,7 +968,7 @@ static int iter_finish_mem_entry(struct hist_entry_iter *iter, struct addr_location *al __maybe_unused) { - struct evsel *evsel =3D iter->evsel; + struct evsel *evsel =3D iter->sample->evsel; struct hists *hists =3D evsel__hists(evsel); struct hist_entry *he =3D iter->he; int err =3D -EINVAL; @@ -1036,9 +1036,9 @@ static int iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_locat= ion *al) { struct branch_info *bi; - struct evsel *evsel =3D iter->evsel; - struct hists *hists =3D evsel__hists(evsel); struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; + struct hists *hists =3D evsel__hists(evsel); struct hist_entry *he =3D NULL; int i =3D iter->curr; int err =3D 0; @@ -1078,7 +1078,7 @@ static int iter_finish_branch_entry(struct hist_entry_iter *iter, struct addr_location *al __maybe_unused) { - struct evsel *evsel =3D iter->evsel; + struct evsel *evsel =3D iter->sample->evsel; struct hists *hists =3D evsel__hists(evsel); =20 for (int i =3D 0; i < iter->total; i++) @@ -1103,8 +1103,8 @@ iter_prepare_normal_entry(struct hist_entry_iter *ite= r __maybe_unused, static int iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_loc= ation *al) { - struct evsel *evsel =3D iter->evsel; struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; struct hist_entry *he; =20 he =3D hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL, @@ -1121,8 +1121,8 @@ iter_finish_normal_entry(struct hist_entry_iter *iter, struct addr_location *al __maybe_unused) { struct hist_entry *he =3D iter->he; - struct evsel *evsel =3D iter->evsel; struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; =20 if (he =3D=3D NULL) return 0; @@ -1165,9 +1165,9 @@ static int iter_add_single_cumulative_entry(struct hist_entry_iter *iter, struct addr_location *al) { - struct evsel *evsel =3D iter->evsel; - struct hists *hists =3D evsel__hists(evsel); struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; + struct hists *hists =3D evsel__hists(evsel); struct hist_entry **he_cache =3D iter->he_cache; struct hist_entry *he; int err =3D 0; @@ -1224,8 +1224,8 @@ static int iter_add_next_cumulative_entry(struct hist_entry_iter *iter, struct addr_location *al) { - struct evsel *evsel =3D iter->evsel; struct perf_sample *sample =3D iter->sample; + struct evsel *evsel =3D sample->evsel; struct hist_entry **he_cache =3D iter->he_cache; struct hist_entry *he; struct hist_entry he_tmp =3D { @@ -2826,7 +2826,7 @@ int hists__unlink(struct hists *hists) =20 void hist__account_cycles(struct branch_stack *bs, struct addr_location *a= l, struct perf_sample *sample, bool nonany_branch_mode, - u64 *total_cycles, struct evsel *evsel) + u64 *total_cycles) { struct branch_info *bi; struct branch_entry *entries =3D perf_sample__branch_entries(sample); @@ -2850,7 +2850,7 @@ void hist__account_cycles(struct branch_stack *bs, st= ruct addr_location *al, for (int i =3D bs->nr - 1; i >=3D 0; i--) { addr_map_symbol__account_cycles(&bi[i].from, nonany_branch_mode ? NULL : prev, - bi[i].flags.cycles, evsel, + bi[i].flags.cycles, sample->evsel, bi[i].branch_stack_cntr); prev =3D &bi[i].to; =20 diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index d97a4efb9250..8fb89d81ef06 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h @@ -156,7 +156,6 @@ struct hist_entry_iter { int total; int curr; =20 - struct evsel *evsel; struct perf_sample *sample; struct hist_entry *he; struct symbol *parent; @@ -799,7 +798,7 @@ unsigned int hists__overhead_width(struct hists *hists); =20 void hist__account_cycles(struct branch_stack *bs, struct addr_location *a= l, struct perf_sample *sample, bool nonany_branch_mode, - u64 *total_cycles, struct evsel *evsel); + u64 *total_cycles); =20 struct option; int parse_filter_percentage(const struct option *opt, const char *arg, int= unset); --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.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 DD50237F8C3 for ; Mon, 13 Apr 2026 04:12:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053550; cv=none; b=STGOyV8kPd2KdgkrB51w71cnZDdN2M1p6YIgBQHTvmy9nK/LL39mk0OXGMehAWkUxqaoGPnTtCBEUYGwUU8BTNVJq+dTtiRZrqpyR3li5JvK1ASDz40QBUdOXPq9QoA0ob0zYeUuvAlEfDHDuZOLx+iRV8urnMI882QJR+lnVeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053550; c=relaxed/simple; bh=cLWE7bs+0Cxg9cEMpw2DCvBK22szFSANqxVQJFFr1kA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ftitWVJpEkDBhl4Rzx1sVQaFXAPyD03mq1y+MQh1Fxms78wdYjWICrtT/JU13mjNNk2eg0Gr5eA550MSzgHFj4tV3wBhb4ZA1Cvd++kAnEBUpr0QmFBRhZOJGHqL11p2m5OHc6/kKYOoOwfySOvnfLc6QjFgMxhWCwYnm78arqk= 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=puStblF+; arc=none smtp.client-ip=74.125.82.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="puStblF+" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-1279caef718so16265669c88.1 for ; Sun, 12 Apr 2026 21:12:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053542; x=1776658342; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=18PpJMje7yTmFawrKVzMshBAHP9Be4M6fcInXM7pDdU=; b=puStblF+3Q9702D7Qj6CEXtVIQsjHVJLAZWRrvZp3SpBzx8j06ZCAoQuPEAYlYuei2 LZpLuTb5CHeXYOZ73unwiBVWkRsFux8c9Wn/VfPfpCS3lt+55DY4TBm18hi37/AnQlhm SEM/G03duPVfKpSDtw8RtUzE4KN7ycjovpO/OG6ZjjB/STNbslvtsoCE1X+4rABz+nOx sMj66gQ0d5Fq2pRUAfK8v/rgjD6tXYoYGUdpZHiRe7VgEmoKii27o6HQP/zw0sLGBumd mLgs5k4jFd3qgw5z5APgPfsjdQDW4IXwsFqDguePc2CdFbqM+4V5zy0tempk081dFLEF U42Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053542; x=1776658342; h=cc: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=18PpJMje7yTmFawrKVzMshBAHP9Be4M6fcInXM7pDdU=; b=RLwKmQNMbzktZuWfY7IbI6zMVc4SjF2HyZkvHzlFIPmH0csNWA70YCtww3qI7Q72SW WnsEOSfpBrCrPhtCd3JUWcjUunILuT9vxxToHrd9/U74gIFig30VY05fp4F5kGleyvEk 5Xryu+QQ9vtDr2BplL5m0eETE1b1TuMianVgs3xR8BXnlOwfDPhFCS73NTt2FCpn8mz6 TD65t+tvFtVyz9D31i3P2DSocGpyTgE/SJetbHUArv3STzjCDE8Xd/ZByrUTC6+03Vk5 qj3sSdBgY8gOgn1fqDUvbiM9nJD8e6exSCghzdwVzI9Wriv+x8iauaM9081Nf8uC7fcl c3fg== X-Forwarded-Encrypted: i=1; AJvYcCUkCEps6T/pPKhLvEjaDL71VtAf0z50oX9TJz8YmcnLmi9sU9MgOFmLhvGF+a1bMgvc+EMeheqp6JnKPrg=@vger.kernel.org X-Gm-Message-State: AOJu0YyhP9EZ/PD/2wY1FqoSQb6wVK5ozVppJo5hdKeQfvWpAffjNo/H j9BQZYh49IMi4KgiKo3x8Y7V/jLOlHIaPmqEmlvkF91kZOP2dgSzBRTUnIUpia8VyN3spa41Q0p KQFxUWZ9zqQ== X-Received: from dlad14.prod.google.com ([2002:a05:701b:220e:b0:12a:c10f:98fe]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6982:b0:11b:ade6:45a7 with SMTP id a92af1059eb24-12c34e68d78mr6400921c88.1.1776053541928; Sun, 12 Apr 2026 21:12:21 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:21 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-12-irogers@google.com> Subject: [PATCH v12 11/33] perf report: Directly use sample->evsel to avoid computing from sample->id From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In count_lost_samples_events try to avoid searching for the evsel for the sample, just use the variable within the sample. Signed-off-by: Ian Rogers --- tools/perf/builtin-report.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index ff7117c5470f..3deb21f4d781 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -788,9 +788,11 @@ static int count_lost_samples_event(const struct perf_= tool *tool, struct machine *machine __maybe_unused) { struct report *rep =3D container_of(tool, struct report, tool); - struct evsel *evsel; + struct evsel *evsel =3D sample->evsel; + + if (!evsel) + evsel =3D evlist__id2evsel(rep->session->evlist, sample->id); =20 - evsel =3D evlist__id2evsel(rep->session->evlist, sample->id); if (evsel) { struct hists *hists =3D evsel__hists(evsel); u32 count =3D event->lost_samples.lost; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 59A3637E301 for ; Mon, 13 Apr 2026 04:12:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053553; cv=none; b=I50Cq2sH3hdCc+dBqtGpx+HAYITCE6sXmN8QkKTulqj9JRz/B4BGH5c9v2vP1iaR9vAQg4xB7wx1mNEJ0zDNnFIomeAkdkaoe54m2n1Y+dQSahn0pXEmNNxxphgUi0iZZCHX/DbsqC667E+759EGjzCNo0vhyNZGq0auzcYRp7M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053553; c=relaxed/simple; bh=s03PR3NdhraoAct+z3ztP2wak5yT9JPVUBwMWmour+o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OYSYOnDsIKWLjTl2nBvWeTVHU/FBSqwrV836DqH63Ev+oIy+we44p4NAe2b9l7Nq84UxU5MPNKzi9kPcGi0alYmHU+ETF2Gz8Q0qJjFeek3NRwPxiG3QZrQnU7yuu6Y8jV1HefTV9ru5boV+LXZcjIZ4WmLiea4Rr00cnlehVHA= 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=tqGeG9sK; arc=none smtp.client-ip=74.125.82.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="tqGeG9sK" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2bdf6fe90a9so5426518eec.1 for ; Sun, 12 Apr 2026 21:12:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053544; x=1776658344; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=VnOzocw/zY+37IjMdz6jX9+0KodIGkyYOBbLG+SMCCM=; b=tqGeG9sK2GvH87YIb05voYZDOXD+wRw1ddrLiI+KjH5OHm/djOEGu0yXZo9FYXzVXS U8X7PFu+LlxqnvTIqmCgKq6abgulBFpkGViDzhQsHpKtA6qRGbMLpaQudz/lO27HDrsO OFcI+7WXmDaXij9tojBWkeGFEpzBV/yWc1cje+U5Dl+E4rFAhLWJuQHof4IXsq7jl0aT J5419VUiXrgj20lFaD0jfpDrL+tvH/coHrNN2SNWV8YJ8STdZW2yGv3ymc/g3WUv8nw9 6rAMeSv8ckrOpvTeFZ/7cbX7YsAW+HKZwk9+a77ytql9BrYUPj6cuUpSeAh7s4NLkacp BvsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053544; x=1776658344; h=cc: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=VnOzocw/zY+37IjMdz6jX9+0KodIGkyYOBbLG+SMCCM=; b=W/lWnLaAPlDUcxEGgGhU+ZZ6pXvsNVRCeIHTeRWcnYkfDOL4BNJfr96G3B43siVQw+ TxAxspYZtrMwBRYgmh5seAF/5rMFI1TBgX/GGLjgVViwcImgBlNS4C/0cJnppgC4acMk V0CLcYKF0Zpn9sK2Al4/QWq0C4Ny/uEGek37Loa0AdLgNF1T+GkzJgemVIl0iHD75CeF 1VRMXVu6cjXqsrz5mrGxPprtzBjeNOvW2mJcX0gXIM7fC5DeIht69W6R2xcCj845u03f uxZrk2tauYntP6Fu2rADcBJmB7LwI/Yzo9kNeL8qK/OmIfc5yA2gl4m53CXfy6J7lJNg NVqA== X-Forwarded-Encrypted: i=1; AJvYcCXrhFkHZZyyVCv97mmo5A28TperJhZJ9Zz1qiQ5fY2rWNkqNadeOx8jFaI/0vZWDCOEzvDmb9ubRF4CUbA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+ZIPcI+OCtcTEO1g4RusW9EuJBlD5qwQJwPXneHn+qL0S1iK+ jucphL5mgD06aJIVhZIhxjLGuki5Yf9O/bz9ZgdxCauQni3RzZnWs50QOAXTWvEPI1TsRtpvpai sT9aET6W1HQ== X-Received: from dydb8.prod.google.com ([2002:a05:7300:80c8:b0:2cb:b540:9519]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6183:b0:11d:c22e:a131 with SMTP id a92af1059eb24-12c34e37b04mr6494827c88.3.1776053544066; Sun, 12 Apr 2026 21:12:24 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:22 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-13-irogers@google.com> Subject: [PATCH v12 12/33] perf annotate: Don't pass evsel to add_sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel so read it rather than pass it. Update call site. Signed-off-by: Ian Rogers --- tools/perf/builtin-annotate.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 6f8be9ead43b..719b36d4eed5 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -232,11 +232,11 @@ static bool has_annotation(struct perf_annotate *ann) return ui__has_annotation() || ann->use_stdio2; } =20 -static int evsel__add_sample(struct evsel *evsel, struct perf_sample *samp= le, - struct addr_location *al, struct perf_annotate *ann, - struct machine *machine) +static int add_sample(struct perf_sample *sample, + struct addr_location *al, struct perf_annotate *ann, + struct machine *machine) { - struct hists *hists =3D evsel__hists(evsel); + struct hists *hists =3D evsel__hists(sample->evsel); struct hist_entry *he; int ret; =20 @@ -298,7 +298,7 @@ static int process_sample_event(const struct perf_tool = *tool, goto out_put; =20 if (!al.filtered && - evsel__add_sample(sample->evsel, sample, &al, ann, machine)) { + add_sample(sample, &al, ann, machine)) { pr_warning("problem incrementing symbol count, " "skipping event\n"); ret =3D -1; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 174193815E5 for ; Mon, 13 Apr 2026 04:12:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053555; cv=none; b=TuK4cI2oKrMjaNSgTPrw6zfsb5ESTgs2A5Xy/R9lr7JJvypaCTjYRZpPWRjLnU2c5SEJxYqo1UKu9Az81yFgvoEC23lR1doabRrSv3xIEEXlL8w0Rrn7DaGrb3UAi+FyUMsoj8WjMDN6U83GM0CI2sfiVeVY7Q0u9ey983OgV/k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053555; c=relaxed/simple; bh=U21YjZbTLKjhR+W4EfBEee1/yW+4HlS/oTGqe0Nrojw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=AXwmNKNKjFWzqZH2KpGxeN/ABhXOfKKzOXc49iWeo6OrhOCLJB/ooyDz1JEYKyv9JYAZz5ho5TwDh+/fQWQ/9qZxbLrER7ZnFyeC3Ej2UObkW6NkC/4mTg4OsieZ4SPGUobgqx8aZP5Dir55lV+V2LzfruEPXMs8MZ9bCPkTNak= 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=r9mxQ560; arc=none smtp.client-ip=74.125.82.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="r9mxQ560" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2d8a677cdfaso786788eec.1 for ; Sun, 12 Apr 2026 21:12:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053547; x=1776658347; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=CexyOKGLd1wDyUtEXB2mYM32u5jxlu6R2jpDLPNHjCI=; b=r9mxQ5608mNJEPgsG/cJnJOihZz8YDHCaGrUVu9ocpVX3R0AQx4hQwRgh/jW4FjtaX 2wmd+kLryshEY9l6XdPHEULKKYTOVMH4rV2o98ChLDfkRZZJ9cFH+BMJl4m49BgATbSY 9psMOT0/1trisglGvdUfunGEGmIJgJeFl3zpm9u1AfLQY//2qTvPE4CZWjnowmkO/YE/ m+cHJYL/6Z9nJhp5iEVSWyAs0BrUNMyePleA4U5BHHTbmkpgnshbwBjQ6c8EtUuXw7vf JJZKF//tOpgaSUI7BLgC9XtKe+8A892QZ6n/wViQEDsWKhtWcIJKKdzMKge08aO1DdU3 37MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053547; x=1776658347; h=cc: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=CexyOKGLd1wDyUtEXB2mYM32u5jxlu6R2jpDLPNHjCI=; b=j71aHC8mwhbvLq0UGigNTS3oGv7FlwpVSD8v5WCMzJzcPo1uv8znGtBqMoPRHoDo5N YCl+5BrrsivI1QAcAoHCqWJELUARClyUE/S7wW+QDrI0uDKV9FYeBrwdqiVzlwlXtntQ gmovCipHAqIr84uOddTIumIFbJmiXQVjBkT6PxYwiXdIWPFRMRRLaU8eN3rvyjfDllT1 dyMl0d5rvFAiJOWEN+xUcuvEOtTe3WR9FPpdsOFdBtMUGp3ezwQT9e9GTzB4WBCdAjEY cmnK9e9FKRjjxax7ORyxIG5Tnh8SeMbkFE+Rv602n0YpOFyrCTrIJwRXRNUTsYePJCg5 ltDQ== X-Forwarded-Encrypted: i=1; AFNElJ8TGmjRo27b6m2AwusTRv6LEWXkLm4Rt548SzYdTwYcN6IngWo1BLgRwCs6CXPKb9X6iVENFTXTpmKxfs0=@vger.kernel.org X-Gm-Message-State: AOJu0YyzuMNEN3xePNglplA6uGyJ8/FqzLpSdCyLay2rL4jvpB7v13B5 CBhqYq+13cLlNTThiBioMxFnCCPV2RvqWX7heBD/KLux+iqd6CAtVzobD5wTvr/ceJHNKu3QuwW jieB1r6LIRA== X-Received: from dyji40.prod.google.com ([2002:a05:7300:7a28:b0:2d8:dd18:baee]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:d704:b0:2b7:fdb6:ccf6 with SMTP id 5a478bee46e88-2d5890795cfmr6355216eec.14.1776053546399; Sun, 12 Apr 2026 21:12:26 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:23 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-14-irogers@google.com> Subject: [PATCH v12 13/33] perf inject: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and so it is unnecessary to pass the evsel as well. Clean up handling of sample and mmap_evsel when synthesizing build id events and mmap2 events with build ids. For callchain walking and things that expect the evsel to match sample, the sample->evsel shouldn't change. The mmap_evsel should be used when making mmap2 events. Some minor tweaks to synthetic events to be robust to evsel being NULL and to remove an unnecessary branch (as the id sample will be empty) on the evsel. Signed-off-by: Ian Rogers --- tools/perf/builtin-inject.c | 52 ++++++++++++++++-------------- tools/perf/util/synthetic-events.c | 30 ++++++++--------- tools/perf/util/synthetic-events.h | 2 -- 3 files changed, 40 insertions(+), 44 deletions(-) diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index f43c165c3a13..593d3ed5ac47 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -146,14 +146,12 @@ struct event_entry { static int tool__inject_build_id(const struct perf_tool *tool, struct perf_sample *sample, struct machine *machine, - const struct evsel *evsel, __u16 misc, const char *filename, struct dso *dso, u32 flags); static int tool__inject_mmap2_build_id(const struct perf_tool *tool, struct perf_sample *sample, struct machine *machine, - const struct evsel *evsel, __u16 misc, __u32 pid, __u32 tid, __u64 start, __u64 len, __u64 pgoff, @@ -356,7 +354,6 @@ perf_inject__cut_auxtrace_sample(struct perf_inject *in= ject, typedef int (*inject_handler)(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine); =20 static int perf_event__repipe_sample(const struct perf_tool *tool, @@ -369,7 +366,7 @@ static int perf_event__repipe_sample(const struct perf_= tool *tool, =20 if (evsel && evsel->handler) { inject_handler f =3D evsel->handler; - return f(tool, event, sample, evsel, machine); + return f(tool, event, sample, machine); } =20 build_id__mark_dso_hit(tool, event, sample, machine); @@ -583,11 +580,12 @@ static int perf_event__repipe_common_mmap(const struc= t perf_tool *tool, } =20 if (dso && !dso__hit(dso)) { - struct evsel *evsel =3D evlist__event2evsel(inject->session->evlist, ev= ent); + if (!sample->evsel) + sample->evsel =3D evlist__event2evsel(inject->session->evlist, event); =20 - if (evsel) { + if (sample->evsel) { dso__set_hit(dso); - tool__inject_build_id(tool, sample, machine, evsel, + tool__inject_build_id(tool, sample, machine, /*misc=3D*/sample->cpumode, filename, dso, flags); } @@ -614,23 +612,26 @@ static int perf_event__repipe_common_mmap(const struc= t perf_tool *tool, } if ((inject->build_id_style =3D=3D BID_RWS__MMAP2_BUILDID_ALL) && !(event->header.misc & PERF_RECORD_MISC_MMAP_BUILD_ID)) { - struct evsel *evsel =3D evlist__event2evsel(inject->session->evlist, eve= nt); + struct evsel *saved_evsel =3D sample->evsel; =20 - if (evsel && !dso_sought) { + sample->evsel =3D evlist__event2evsel(inject->session->evlist, event); + if (sample->evsel && !dso_sought) { dso =3D findnew_dso(pid, tid, filename, dso_id, machine); dso_sought =3D true; } - if (evsel && dso && - !tool__inject_mmap2_build_id(tool, sample, machine, evsel, + if (sample->evsel && dso && + !tool__inject_mmap2_build_id(tool, sample, machine, sample->cpumode | PERF_RECORD_MISC_MMAP_BUILD_ID, pid, tid, start, len, pgoff, dso, prot, flags, filename)) { /* Injected mmap2 so no need to repipe. */ + sample->evsel =3D saved_evsel; dso__put(dso); return 0; } + sample->evsel =3D saved_evsel; } dso__put(dso); if (inject->build_id_style =3D=3D BID_RWS__MMAP2_BUILDID_LAZY) @@ -835,7 +836,6 @@ static bool perf_inject__lookup_known_build_id(struct p= erf_inject *inject, static int tool__inject_build_id(const struct perf_tool *tool, struct perf_sample *sample, struct machine *machine, - const struct evsel *evsel, __u16 misc, const char *filename, struct dso *dso, u32 flags) @@ -859,7 +859,7 @@ static int tool__inject_build_id(const struct perf_tool= *tool, =20 err =3D perf_event__synthesize_build_id(tool, sample, machine, perf_event__repipe, - evsel, misc, dso__bid(dso), + misc, dso__bid(dso), filename); if (err) { pr_err("Can't synthesize build_id event for %s\n", filename); @@ -872,7 +872,6 @@ static int tool__inject_build_id(const struct perf_tool= *tool, static int tool__inject_mmap2_build_id(const struct perf_tool *tool, struct perf_sample *sample, struct machine *machine, - const struct evsel *evsel, __u16 misc, __u32 pid, __u32 tid, __u64 start, __u64 len, __u64 pgoff, @@ -895,7 +894,6 @@ static int tool__inject_mmap2_build_id(const struct per= f_tool *tool, =20 err =3D perf_event__synthesize_mmap2_build_id(tool, sample, machine, perf_event__repipe, - evsel, misc, pid, tid, start, len, pgoff, dso__bid(dso), @@ -912,7 +910,7 @@ static int mark_dso_hit(const struct perf_inject *injec= t, const struct perf_tool *tool, struct perf_sample *sample, struct machine *machine, - const struct evsel *mmap_evsel, + struct evsel *mmap_evsel, struct map *map, bool sample_in_dso) { struct dso *dso; @@ -940,9 +938,13 @@ static int mark_dso_hit(const struct perf_inject *inje= ct, dso =3D map__dso(map); if (inject->build_id_style =3D=3D BID_RWS__INJECT_HEADER_LAZY) { if (dso && !dso__hit(dso)) { + /* + * The sample is just read for identifiers which we want + * to match the for the event of the sample. + */ dso__set_hit(dso); tool__inject_build_id(tool, sample, machine, - mmap_evsel, misc, dso__long_name(dso), dso, + misc, dso__long_name(dso), dso, map__flags(map)); } } else if (inject->build_id_style =3D=3D BID_RWS__MMAP2_BUILDID_LAZY) { @@ -950,11 +952,13 @@ static int mark_dso_hit(const struct perf_inject *inj= ect, const struct build_id null_bid =3D { .size =3D 0 }; const struct build_id *bid =3D dso ? dso__bid(dso) : &null_bid; const char *filename =3D dso ? dso__long_name(dso) : ""; + struct evsel *saved_evsel =3D sample->evsel; =20 map__set_hit(map); + /* Creating a new mmap2 event which has an evsel for the mmap event. */ + sample->evsel =3D mmap_evsel; perf_event__synthesize_mmap2_build_id(tool, sample, machine, perf_event__repipe, - mmap_evsel, misc, sample->pid, sample->tid, map__start(map), @@ -964,6 +968,7 @@ static int mark_dso_hit(const struct perf_inject *injec= t, map__prot(map), map__flags(map), filename); + sample->evsel =3D saved_evsel; } } return 0; @@ -974,7 +979,7 @@ struct mark_dso_hit_args { const struct perf_tool *tool; struct perf_sample *sample; struct machine *machine; - const struct evsel *mmap_evsel; + struct evsel *mmap_evsel; }; =20 static int mark_dso_hit_callback(struct callchain_cursor_node *node, void = *data) @@ -1029,7 +1034,6 @@ static int perf_event__inject_buildid(const struct pe= rf_tool *tool, union perf_e static int perf_inject__sched_process_exit(const struct perf_tool *tool, union perf_event *event __maybe_unused, struct perf_sample *sample, - struct evsel *evsel __maybe_unused, struct machine *machine __maybe_unused) { struct perf_inject *inject =3D container_of(tool, struct perf_inject, too= l); @@ -1049,13 +1053,12 @@ static int perf_inject__sched_process_exit(const st= ruct perf_tool *tool, static int perf_inject__sched_switch(const struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct perf_inject *inject =3D container_of(tool, struct perf_inject, too= l); struct event_entry *ent; =20 - perf_inject__sched_process_exit(tool, event, sample, evsel, machine); + perf_inject__sched_process_exit(tool, event, sample, machine); =20 ent =3D malloc(event->header.size + sizeof(struct event_entry)); if (ent =3D=3D NULL) { @@ -1074,13 +1077,13 @@ static int perf_inject__sched_switch(const struct p= erf_tool *tool, static int perf_inject__sched_stat(const struct perf_tool *tool, union perf_event *event __maybe_unused, struct perf_sample *sample, - struct evsel *evsel, struct machine *machine) { struct event_entry *ent; union perf_event *event_sw; struct perf_sample sample_sw; struct perf_inject *inject =3D container_of(tool, struct perf_inject, too= l); + struct evsel *evsel =3D sample->evsel; u32 pid =3D perf_sample__intval(sample, "pid"); int ret; =20 @@ -1445,7 +1448,7 @@ static int synthesize_build_id(struct perf_inject *in= ject, struct dso *dso, pid_ dso__set_hit(dso); =20 return perf_event__synthesize_build_id(&inject->tool, &synth_sample, mach= ine, - process_build_id, inject__mmap_evsel(inject), + process_build_id, /*misc=3D*/synth_sample.cpumode, dso__bid(dso), dso__long_name(dso)); } @@ -2007,7 +2010,6 @@ static int evsel__check_stype(struct evsel *evsel, u6= 4 sample_type, const char * static int drop_sample(const struct perf_tool *tool __maybe_unused, union perf_event *event __maybe_unused, struct perf_sample *sample __maybe_unused, - struct evsel *evsel __maybe_unused, struct machine *machine __maybe_unused) { return 0; diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic= -events.c index 85bee747f4cd..de812a2befbc 100644 --- a/tools/perf/util/synthetic-events.c +++ b/tools/perf/util/synthetic-events.c @@ -2252,13 +2252,15 @@ int perf_event__synthesize_build_id(const struct pe= rf_tool *tool, struct perf_sample *sample, struct machine *machine, perf_event__handler_t process, - const struct evsel *evsel, __u16 misc, const struct build_id *bid, const char *filename) { union perf_event ev; size_t len; + u64 sample_type =3D sample->evsel ? sample->evsel->core.attr.sample_type = : 0; + void *array =3D &ev; + int ret; =20 len =3D sizeof(ev.build_id) + strlen(filename) + 1; len =3D PERF_ALIGN(len, sizeof(u64)); @@ -2275,23 +2277,17 @@ int perf_event__synthesize_build_id(const struct pe= rf_tool *tool, ev.build_id.header.size =3D len; strcpy(ev.build_id.filename, filename); =20 - if (evsel) { - void *array =3D &ev; - int ret; - - array +=3D ev.header.size; - ret =3D perf_event__synthesize_id_sample(array, evsel->core.attr.sample_= type, sample); - if (ret < 0) - return ret; - - if (ret & 7) { - pr_err("Bad id sample size %d\n", ret); - return -EINVAL; - } + array +=3D ev.header.size; + ret =3D perf_event__synthesize_id_sample(array, sample_type, sample); + if (ret < 0) + return ret; =20 - ev.header.size +=3D ret; + if (ret & 7) { + pr_err("Bad id sample size %d\n", ret); + return -EINVAL; } =20 + ev.header.size +=3D ret; return process(tool, &ev, sample, machine); } =20 @@ -2299,7 +2295,6 @@ int perf_event__synthesize_mmap2_build_id(const struc= t perf_tool *tool, struct perf_sample *sample, struct machine *machine, perf_event__handler_t process, - const struct evsel *evsel, __u16 misc, __u32 pid, __u32 tid, __u64 start, __u64 len, __u64 pgoff, @@ -2309,6 +2304,7 @@ int perf_event__synthesize_mmap2_build_id(const struc= t perf_tool *tool, { union perf_event ev; size_t ev_len; + u64 sample_type =3D sample->evsel ? sample->evsel->core.attr.sample_type = : 0; void *array; int ret; =20 @@ -2339,7 +2335,7 @@ int perf_event__synthesize_mmap2_build_id(const struc= t perf_tool *tool, =20 array =3D &ev; array +=3D ev.header.size; - ret =3D perf_event__synthesize_id_sample(array, evsel->core.attr.sample_t= ype, sample); + ret =3D perf_event__synthesize_id_sample(array, sample_type, sample); if (ret < 0) return ret; =20 diff --git a/tools/perf/util/synthetic-events.h b/tools/perf/util/synthetic= -events.h index b0edad0c3100..473a43a78993 100644 --- a/tools/perf/util/synthetic-events.h +++ b/tools/perf/util/synthetic-events.h @@ -50,7 +50,6 @@ int perf_event__synthesize_build_id(const struct perf_too= l *tool, struct perf_sample *sample, struct machine *machine, perf_event__handler_t process, - const struct evsel *evsel, __u16 misc, const struct build_id *bid, const char *filename); @@ -58,7 +57,6 @@ int perf_event__synthesize_mmap2_build_id(const struct pe= rf_tool *tool, struct perf_sample *sample, struct machine *machine, perf_event__handler_t process, - const struct evsel *evsel, __u16 misc, __u32 pid, __u32 tid, __u64 start, __u64 len, __u64 pgoff, --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 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 888473803E2 for ; Mon, 13 Apr 2026 04:12:32 +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=1776053557; cv=none; b=ml9+YZjrYl8WBf1tEprXqr0tEo9Y2OP2oaa3LIKvwrr9zON5P6SaVpkdI58Xw+NweTNwgU+QNpxfmqhlmCLnjl+/k6RAxyYn9GdZRyRoC4DrJm4nVORHudXL4lLUB1xPKuOlYAD55I4j9otSm8RDl9xgQLCEhfcEk1TVPj0jSmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053557; c=relaxed/simple; bh=495v7vwy/bxdki64nsuLUq2VLnkw+FqQnijSjVyewWk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Zcf70IJQNVTwIZ2IJZ1x8v2Rukg3ix4ztY57Wf3hHiG9cVFO00FFh7S7Y+5KKCQFwhiotQL2l5SUrjcfT/cujsjJUw6gEVvFfNf7l9RQ3Bmpt9foGCh4GZB2vJRp5fj7qFt9maFdu7CpqrlcgPvlPeEw7jRLJxxIaPgUdBw+kJE= 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=QxFZMLK3; 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="QxFZMLK3" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2b45cd0bb96so5774885ad.3 for ; Sun, 12 Apr 2026 21:12:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053549; x=1776658349; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=TdCCiiHDf0G456jnJXOkKokcXFcoaXYbGwyy1xI9gh0=; b=QxFZMLK3qmpziW9EJBM67GxbyIpffuE6fPf3fEgGVecGV+YvxHga4mPPBHCaXTR02B gmW5xLHbiU99HMziJw4Ehr9OgmVQ6po5jzddl1H97FAKAeiVZGLwn9E0vUcn4yAIDdaW wo5PZ3g6KflNMBVpdONHX1E2sY+5rDi2fVaphlpuAIND1vJNT90xKXttuiSFFdWptKoq TfkhstLsBKcjovKX2hMbD7rmzzX1GOnbD0FqlJmXosypLqO8+8L+4RUQNRmm0R6QkHHd A27qIgsKgLi9Acys+mWl2j7uUJ3ilPCojdFG6oY+ATi3Mksp3d/Q5Fi83pJcsg09D3C0 dypg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053549; x=1776658349; h=cc: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=TdCCiiHDf0G456jnJXOkKokcXFcoaXYbGwyy1xI9gh0=; b=SL1rJgq9SjXeLX/mc8H85PT1F5J55F+Iwg5nHuCoxRnCl9m0dUy2iEHEI8wy4X9/Xn NDkRucBuVDBvY+o0Lt/UzOuVkVmY4Tvf8WrwAxpcJ1OfieGVvWv04CoMu2G3F75Mtx1C oA8xXxM5wNr28uckxa40DHM2A7GriXeKYM0wCwuv1PgaEIf8XimfiUY85Gxx/QQZkXWh MR+xT5/jf/opAoAWNZ1kXTVboGYAZslkDrCjbnk7n7l78BecARRUJocYSVO7nLzf5g+z jcVbJMNPgvurGgYqbzE5DShz4YPUNxsQDgdWuIDEraDqt4aLYRIpAxZ8ooLlkan0Ppuf JQNA== X-Forwarded-Encrypted: i=1; AFNElJ93vv5Z5vb67NtXuA5tHcLXQRSA8fD0Ny1K3uEn3Iu7ets6RizxGaWLKxPg0wF0ZXMxPQ6nJqbwYKdt69Q=@vger.kernel.org X-Gm-Message-State: AOJu0YyV42X/stAOJS/h82d/BY4o/l53AboqxACP4+Uy+y28+7rBRdZr pE2wMQvfsOcrbhmCAz14N+tjU3/UHG4ka7zU2bsxTzjSqWxPjaX/0xm57JMj9KeDkYOGZ/E6tnO OzTdLMkOIiQ== X-Received: from plbkp8.prod.google.com ([2002:a17:903:2808:b0:2b4:6553:4533]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:6942:b0:2b0:4aeb:dedc with SMTP id d9443c01a7336-2b2d5a167c7mr85680495ad.26.1776053548825; Sun, 12 Apr 2026 21:12:28 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:24 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-15-irogers@google.com> Subject: [PATCH v12 14/33] perf kmem: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and so it is unnecessary to pass the evsel as well. Signed-off-by: Ian Rogers --- tools/perf/builtin-kmem.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 2cdc56bc2616..68a39f56204d 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -171,7 +171,7 @@ static int insert_caller_stat(unsigned long call_site, return 0; } =20 -static int evsel__process_alloc_event(struct evsel *evsel, struct perf_sam= ple *sample) +static int evsel__process_alloc_event(struct perf_sample *sample) { unsigned long ptr =3D perf_sample__intval(sample, "ptr"), call_site =3D perf_sample__intval(sample, "call_site"); @@ -198,7 +198,7 @@ static int evsel__process_alloc_event(struct evsel *evs= el, struct perf_sample *s * If the tracepoint contains the field "node" the tool stats the * cross allocation. */ - if (evsel__field(evsel, "node")) { + if (evsel__field(sample->evsel, "node")) { int node1, node2; =20 node1 =3D cpu__get_node((struct perf_cpu){.cpu =3D sample->cpu}); @@ -243,7 +243,7 @@ static struct alloc_stat *search_alloc_stat(unsigned lo= ng ptr, return NULL; } =20 -static int evsel__process_free_event(struct evsel *evsel __maybe_unused, s= truct perf_sample *sample) +static int evsel__process_free_event(struct perf_sample *sample) { unsigned long ptr =3D perf_sample__intval(sample, "ptr"); struct alloc_stat *s_alloc, *s_caller; @@ -751,8 +751,7 @@ static char *compact_gfp_string(unsigned long gfp_flags) return NULL; } =20 -static int parse_gfp_flags(struct evsel *evsel, struct perf_sample *sample, - unsigned int gfp_flags) +static int parse_gfp_flags(struct perf_sample *sample, unsigned int gfp_fl= ags) { struct tep_record record =3D { .cpu =3D sample->cpu, @@ -773,7 +772,7 @@ static int parse_gfp_flags(struct evsel *evsel, struct = perf_sample *sample, } =20 trace_seq_init(&seq); - tp_format =3D evsel__tp_format(evsel); + tp_format =3D evsel__tp_format(sample->evsel); if (tp_format) tep_print_event(tp_format->tep, &seq, &record, "%s", TEP_PRINT_INFO); =20 @@ -805,7 +804,7 @@ static int parse_gfp_flags(struct evsel *evsel, struct = perf_sample *sample, return 0; } =20 -static int evsel__process_page_alloc_event(struct evsel *evsel, struct per= f_sample *sample) +static int evsel__process_page_alloc_event(struct perf_sample *sample) { u64 page; unsigned int order =3D perf_sample__intval(sample, "order"); @@ -835,7 +834,7 @@ static int evsel__process_page_alloc_event(struct evsel= *evsel, struct perf_samp return 0; } =20 - if (parse_gfp_flags(evsel, sample, gfp_flags) < 0) + if (parse_gfp_flags(sample, gfp_flags) < 0) return -1; =20 callsite =3D find_callsite(sample); @@ -876,8 +875,7 @@ static int evsel__process_page_alloc_event(struct evsel= *evsel, struct perf_samp return 0; } =20 -static int evsel__process_page_free_event(struct evsel *evsel __maybe_unus= ed, - struct perf_sample *sample) +static int evsel__process_page_free_event(struct perf_sample *sample) { u64 page; unsigned int order =3D perf_sample__intval(sample, "order"); @@ -954,8 +952,7 @@ static bool perf_kmem__skip_sample(struct perf_sample *= sample) return false; } =20 -typedef int (*tracepoint_handler)(struct evsel *evsel, - struct perf_sample *sample); +typedef int (*tracepoint_handler)(struct perf_sample *sample); =20 static int process_sample_event(const struct perf_tool *tool __maybe_unuse= d, union perf_event *event, @@ -973,14 +970,15 @@ static int process_sample_event(const struct perf_too= l *tool __maybe_unused, return -1; } =20 - if (perf_kmem__skip_sample(sample)) + if (perf_kmem__skip_sample(sample)) { return 0; + } =20 dump_printf(" ... thread: %s:%d\n", thread__comm_str(thread), thread__tid= (thread)); =20 if (evsel->handler !=3D NULL) { tracepoint_handler f =3D evsel->handler; - err =3D f(evsel, sample); + err =3D f(sample); } =20 thread__put(thread); --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.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 552483822B2 for ; Mon, 13 Apr 2026 04:12:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053561; cv=none; b=i5tm/sS24vy6nz0wftgW3iLP913uRtXH2IboKzfpMVblNO2mch+M2d6rPjEJ+4odjD/mu+beXlfUknW9YAAqylO39CZW1hSUYz7gtyGceBdJqWY5xEF9x4F6lmpefW5WOS8d3+lnwJBUJzRTMgPYjpR4Mc3qrT1O38lfhUSbj9U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053561; c=relaxed/simple; bh=4AitkhbMT/H25fSVWezh726kNN913ChWpH9ozuiIptg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=V/CBM55GsrchkiRERn+sKuoOpQKqFn2DGBlDrZ63TKBXhcU98I6J3BjQbl65WwdjFAFR+W/r2lNfz17ILl00aD3dY/awD2NQFOyvi4txbpaHef9Y8LWt/sWcLBPyQJtPbCacIZOs3YKw+2r7teqWI1PkFc7yUT9s80PgeI31Ps0= 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=iIqYUGkT; arc=none smtp.client-ip=74.125.82.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="iIqYUGkT" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-127876be621so3268830c88.1 for ; Sun, 12 Apr 2026 21:12:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053551; x=1776658351; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=/r7dggWXwMFscIDTaUN6PdgwhXUpKGlt+pv5j46vEHM=; b=iIqYUGkTmNf9AqfHVjl9rvXNt9Xs2IVcmZ6wXYVFOp4Gub4aNlnA7IVKMg8ctfvsh/ Jdek25FO07Qchitgooj8a322KYHOL+WckLr9J0i3jsMxHuMztyUB30dCCZ4PwFXabLP5 pEdV9XZhgyPg9bA+CBt+EYoiylbxVtim+ACUTsJxyyDhzdKSEKyhcmZq2IHvnXwbZkPi aNPdW7KKYa4co/QMwRoG9+z7+UfZV81YO10dWqmNwaSDyC/f+XSLAEeQk0iXXl3IpgpK 9QvgfWBJO9eL3BwgjS47TW76iKtOD1jJn51mOM26RT8D/ZgGjHujUzMAwkvshELwDiGc ib7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053551; x=1776658351; h=cc: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=/r7dggWXwMFscIDTaUN6PdgwhXUpKGlt+pv5j46vEHM=; b=qIIgNQFESKc7IYSxCZKxiK3L2CuluSqqYZJBM0tnFLIDNNcOAKOqezuyrpe+hR2oUV J2PnDLmg4RE2RSEE+PV2a+6G76quBuAoZM0xkqDIVaW+vp8mlCmVMy4faFBmxvgTy/Uu tyHUAMkmE3GnJCWQwcnzKdv/VG7lt48q3Fcq6hO7Wr6SikkVLXocuVqozzV2k7wp1cEl w9eFBxjKfrzu8IKer3KgMha1WX4rvdZ9tKtT0A1PeAzCBpOn3tVG6NEnVkN3dWcvv8ZJ mDee4UulO+FJ84tvwd+h2UEFQV4zGv2L2sbE3zgGxtjVfN7ahPdnHLJp9Xo3XcjhHuO9 FG8w== X-Forwarded-Encrypted: i=1; AJvYcCWEPxs2Mt2FBIwCrfOqlQUjIwQdR1KgVZqzQX07Rm3zEt2XWzzY00qTFXmBCmSBLdzBbO3iy4I5EiqTnZM=@vger.kernel.org X-Gm-Message-State: AOJu0YxlGuQtwfcYu1W22Vk1dMREnFTJDO5XcNJPFDVFCGEbYw9krWn+ PAZMSlozE01WnXEWPROpJerlXxcZez3Rn0yOs0a3adVonWn4p+ZZWemOO0+NiKEkJzB2UCbJ6f9 j68Nn3PVxcg== X-Received: from dybgl28.prod.google.com ([2002:a05:7300:e01c:b0:2d8:1265:1a34]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:4a2:b0:123:3c24:b15 with SMTP id a92af1059eb24-12c28c31ef4mr6296248c88.19.1776053551103; Sun, 12 Apr 2026 21:12:31 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:25 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-16-irogers@google.com> Subject: [PATCH v12 15/33] perf kwork: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and so it is unnecessary to pass the evsel as well. Remove the evsel from struct kwork_class. Signed-off-by: Ian Rogers --- tools/perf/builtin-kwork.c | 74 +++++++++++++------------------------- tools/perf/util/kwork.h | 9 +++-- 2 files changed, 28 insertions(+), 55 deletions(-) diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index 4b312afed830..59a54d11f7fa 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -448,7 +448,6 @@ static int work_push_atom(struct perf_kwork *kwork, struct kwork_class *class, enum kwork_trace_type src_type, enum kwork_trace_type dst_type, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine, struct kwork_work **ret_work, @@ -458,7 +457,7 @@ static int work_push_atom(struct perf_kwork *kwork, struct kwork_work *work, key; =20 BUG_ON(class->work_init =3D=3D NULL); - class->work_init(kwork, class, &key, src_type, evsel, sample, machine); + class->work_init(kwork, class, &key, src_type, sample, machine); =20 atom =3D atom_new(kwork, sample); if (atom =3D=3D NULL) @@ -507,7 +506,6 @@ static struct kwork_atom *work_pop_atom(struct perf_kwo= rk *kwork, struct kwork_class *class, enum kwork_trace_type src_type, enum kwork_trace_type dst_type, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine, struct kwork_work **ret_work) @@ -516,7 +514,7 @@ static struct kwork_atom *work_pop_atom(struct perf_kwo= rk *kwork, struct kwork_work *work, key; =20 BUG_ON(class->work_init =3D=3D NULL); - class->work_init(kwork, class, &key, src_type, evsel, sample, machine); + class->work_init(kwork, class, &key, src_type, sample, machine); =20 work =3D work_findnew(&class->work_root, &key, &kwork->cmp_id); if (ret_work !=3D NULL) @@ -599,18 +597,16 @@ static void report_update_exit_event(struct kwork_wor= k *work, =20 static int report_entry_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { return work_push_atom(kwork, class, KWORK_TRACE_ENTRY, - KWORK_TRACE_MAX, evsel, sample, + KWORK_TRACE_MAX, sample, machine, NULL, true); } =20 static int report_exit_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -618,7 +614,7 @@ static int report_exit_event(struct perf_kwork *kwork, struct kwork_work *work =3D NULL; =20 atom =3D work_pop_atom(kwork, class, KWORK_TRACE_EXIT, - KWORK_TRACE_ENTRY, evsel, sample, + KWORK_TRACE_ENTRY, sample, machine, &work); if (work =3D=3D NULL) return -1; @@ -654,18 +650,16 @@ static void latency_update_entry_event(struct kwork_w= ork *work, =20 static int latency_raise_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { return work_push_atom(kwork, class, KWORK_TRACE_RAISE, - KWORK_TRACE_MAX, evsel, sample, + KWORK_TRACE_MAX, sample, machine, NULL, true); } =20 static int latency_entry_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -673,7 +667,7 @@ static int latency_entry_event(struct perf_kwork *kwork, struct kwork_work *work =3D NULL; =20 atom =3D work_pop_atom(kwork, class, KWORK_TRACE_ENTRY, - KWORK_TRACE_RAISE, evsel, sample, + KWORK_TRACE_RAISE, sample, machine, &work); if (work =3D=3D NULL) return -1; @@ -812,18 +806,16 @@ static void timehist_print_event(struct perf_kwork *k= work, =20 static int timehist_raise_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { return work_push_atom(kwork, class, KWORK_TRACE_RAISE, - KWORK_TRACE_MAX, evsel, sample, + KWORK_TRACE_MAX, sample, machine, NULL, true); } =20 static int timehist_entry_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -831,7 +823,7 @@ static int timehist_entry_event(struct perf_kwork *kwor= k, struct kwork_work *work =3D NULL; =20 ret =3D work_push_atom(kwork, class, KWORK_TRACE_ENTRY, - KWORK_TRACE_RAISE, evsel, sample, + KWORK_TRACE_RAISE, sample, machine, &work, true); if (ret) return ret; @@ -844,7 +836,6 @@ static int timehist_entry_event(struct perf_kwork *kwor= k, =20 static int timehist_exit_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -861,7 +852,7 @@ static int timehist_exit_event(struct perf_kwork *kwork, } =20 atom =3D work_pop_atom(kwork, class, KWORK_TRACE_EXIT, - KWORK_TRACE_ENTRY, evsel, sample, + KWORK_TRACE_ENTRY, sample, machine, &work); if (work =3D=3D NULL) { ret =3D -1; @@ -895,18 +886,16 @@ static void top_update_runtime(struct kwork_work *wor= k, =20 static int top_entry_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { return work_push_atom(kwork, class, KWORK_TRACE_ENTRY, - KWORK_TRACE_MAX, evsel, sample, + KWORK_TRACE_MAX, sample, machine, NULL, true); } =20 static int top_exit_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -915,7 +904,7 @@ static int top_exit_event(struct perf_kwork *kwork, struct kwork_atom *atom; =20 atom =3D work_pop_atom(kwork, class, KWORK_TRACE_EXIT, - KWORK_TRACE_ENTRY, evsel, sample, + KWORK_TRACE_ENTRY, sample, machine, &work); if (!work) return -1; @@ -936,7 +925,6 @@ static int top_exit_event(struct perf_kwork *kwork, =20 static int top_sched_switch_event(struct perf_kwork *kwork, struct kwork_class *class, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -944,7 +932,7 @@ static int top_sched_switch_event(struct perf_kwork *kw= ork, struct kwork_work *work; =20 atom =3D work_pop_atom(kwork, class, KWORK_TRACE_EXIT, - KWORK_TRACE_ENTRY, evsel, sample, + KWORK_TRACE_ENTRY, sample, machine, &work); if (!work) return -1; @@ -954,12 +942,11 @@ static int top_sched_switch_event(struct perf_kwork *= kwork, atom_del(atom); } =20 - return top_entry_event(kwork, class, evsel, sample, machine); + return top_entry_event(kwork, class, sample, machine); } =20 static struct kwork_class kwork_irq; static int process_irq_handler_entry_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -967,12 +954,11 @@ static int process_irq_handler_entry_event(const stru= ct perf_tool *tool, =20 if (kwork->tp_handler->entry_event) return kwork->tp_handler->entry_event(kwork, &kwork_irq, - evsel, sample, machine); + sample, machine); return 0; } =20 static int process_irq_handler_exit_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -980,7 +966,7 @@ static int process_irq_handler_exit_event(const struct = perf_tool *tool, =20 if (kwork->tp_handler->exit_event) return kwork->tp_handler->exit_event(kwork, &kwork_irq, - evsel, sample, machine); + sample, machine); return 0; } =20 @@ -1005,7 +991,6 @@ static void irq_work_init(struct perf_kwork *kwork, struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type __maybe_unused, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine __maybe_unused) { @@ -1038,7 +1023,6 @@ static struct kwork_class kwork_irq =3D { =20 static struct kwork_class kwork_softirq; static int process_softirq_raise_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1046,13 +1030,12 @@ static int process_softirq_raise_event(const struct= perf_tool *tool, =20 if (kwork->tp_handler->raise_event) return kwork->tp_handler->raise_event(kwork, &kwork_softirq, - evsel, sample, machine); + sample, machine); =20 return 0; } =20 static int process_softirq_entry_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1060,13 +1043,12 @@ static int process_softirq_entry_event(const struct= perf_tool *tool, =20 if (kwork->tp_handler->entry_event) return kwork->tp_handler->entry_event(kwork, &kwork_softirq, - evsel, sample, machine); + sample, machine); =20 return 0; } =20 static int process_softirq_exit_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1074,7 +1056,7 @@ static int process_softirq_exit_event(const struct pe= rf_tool *tool, =20 if (kwork->tp_handler->exit_event) return kwork->tp_handler->exit_event(kwork, &kwork_softirq, - evsel, sample, machine); + sample, machine); =20 return 0; } @@ -1133,7 +1115,6 @@ static void softirq_work_init(struct perf_kwork *kwor= k, struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type __maybe_unused, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine __maybe_unused) { @@ -1148,7 +1129,7 @@ static void softirq_work_init(struct perf_kwork *kwor= k, } else { num =3D perf_sample__intval(sample, "vec"); work->id =3D num; - work->name =3D evsel__softirq_name(evsel, num); + work->name =3D evsel__softirq_name(sample->evsel, num); } } =20 @@ -1169,7 +1150,6 @@ static struct kwork_class kwork_softirq =3D { =20 static struct kwork_class kwork_workqueue; static int process_workqueue_activate_work_event(const struct perf_tool *t= ool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1177,13 +1157,12 @@ static int process_workqueue_activate_work_event(co= nst struct perf_tool *tool, =20 if (kwork->tp_handler->raise_event) return kwork->tp_handler->raise_event(kwork, &kwork_workqueue, - evsel, sample, machine); + sample, machine); =20 return 0; } =20 static int process_workqueue_execute_start_event(const struct perf_tool *t= ool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1191,13 +1170,12 @@ static int process_workqueue_execute_start_event(co= nst struct perf_tool *tool, =20 if (kwork->tp_handler->entry_event) return kwork->tp_handler->entry_event(kwork, &kwork_workqueue, - evsel, sample, machine); + sample, machine); =20 return 0; } =20 static int process_workqueue_execute_end_event(const struct perf_tool *too= l, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1205,7 +1183,7 @@ static int process_workqueue_execute_end_event(const = struct perf_tool *tool, =20 if (kwork->tp_handler->exit_event) return kwork->tp_handler->exit_event(kwork, &kwork_workqueue, - evsel, sample, machine); + sample, machine); =20 return 0; } @@ -1233,7 +1211,6 @@ static void workqueue_work_init(struct perf_kwork *kw= ork __maybe_unused, struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type __maybe_unused, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { @@ -1267,7 +1244,6 @@ static struct kwork_class kwork_workqueue =3D { =20 static struct kwork_class kwork_sched; static int process_sched_switch_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1275,7 +1251,7 @@ static int process_sched_switch_event(const struct pe= rf_tool *tool, =20 if (kwork->tp_handler->sched_switch_event) return kwork->tp_handler->sched_switch_event(kwork, &kwork_sched, - evsel, sample, machine); + sample, machine); return 0; } =20 @@ -1300,7 +1276,6 @@ static void sched_work_init(struct perf_kwork *kwork = __maybe_unused, struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine __maybe_unused) { @@ -1946,7 +1921,6 @@ static int perf_kwork__report(struct perf_kwork *kwor= k) } =20 typedef int (*tracepoint_handler)(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine); =20 @@ -1961,7 +1935,7 @@ static int perf_kwork__process_tracepoint_sample(cons= t struct perf_tool *tool, if (evsel->handler !=3D NULL) { tracepoint_handler f =3D evsel->handler; =20 - err =3D f(tool, evsel, sample, machine); + err =3D f(tool, sample, machine); } =20 return err; diff --git a/tools/perf/util/kwork.h b/tools/perf/util/kwork.h index db00269b73f2..abf637d44794 100644 --- a/tools/perf/util/kwork.h +++ b/tools/perf/util/kwork.h @@ -157,7 +157,6 @@ struct kwork_class { struct kwork_class *class, struct kwork_work *work, enum kwork_trace_type src_type, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine); =20 @@ -167,19 +166,19 @@ struct kwork_class { =20 struct trace_kwork_handler { int (*raise_event)(struct perf_kwork *kwork, - struct kwork_class *class, struct evsel *evsel, + struct kwork_class *class, struct perf_sample *sample, struct machine *machine); =20 int (*entry_event)(struct perf_kwork *kwork, - struct kwork_class *class, struct evsel *evsel, + struct kwork_class *class, struct perf_sample *sample, struct machine *machine); =20 int (*exit_event)(struct perf_kwork *kwork, - struct kwork_class *class, struct evsel *evsel, + struct kwork_class *class, struct perf_sample *sample, struct machine *machine); =20 int (*sched_switch_event)(struct perf_kwork *kwork, - struct kwork_class *class, struct evsel *evsel, + struct kwork_class *class, struct perf_sample *sample, struct machine *machine); }; =20 --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 C5175382281 for ; Mon, 13 Apr 2026 04:12:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053562; cv=none; b=My2TAiHByIbAdgMIISlXM8LWMEXNC6N+vFHEButDJv8ruxQOCRcRhIFEv30Nm89y6rL/kO127eq2L1ZZmj8vvn4IWiC47qJtC+cg2I09qiTUb6qbK8fVkcz5Fij6Jnz4jZIm91bcWOKUCWCz4qvnx2P8e00KQTz5xVvFSUPdijQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053562; c=relaxed/simple; bh=bZFYQTHNj09jPUVsZ8Lp0qqyUMeLrlsOChwSvyrzbj8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gpLY3IVGEqJxE6yOjVHODta450HY1ZWlY/QF3EFnzlSOUYC71eCTmMmgfJU55sO2696x5i7p0vQXyz0f7RjhSweLM4C0wAGWCvFJv50dWDCH2pR+seBBKBHOrhE0pN1o4vaqzCmjxvolkA+9N1kguamkZYHJkPr64az2oZqFhqo= 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=DtiwU6RF; arc=none smtp.client-ip=74.125.82.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="DtiwU6RF" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2c0ba59a830so5234118eec.0 for ; Sun, 12 Apr 2026 21:12:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053554; x=1776658354; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=G3RKd90CU7bpfJzsVRgdoPzaWpWL8PVovDD5xnBS+Qs=; b=DtiwU6RF5CAMIT4TX0FPH0HPLUpsCat7z+q0RxgVm0E2k8Xe9awrFmazwvnVnh2J0y tNlRk0lDokuuidyKUwt5K0X8Dfwvmz11kwUU6fHljaqXs0/hu6QVb9pMfxrJTNSH10lO W24KJ2knT89kn7jjClw3HPgG7IDKtByKwzbNxTQxxFl96Dd63UAG0vltqn5F+fLWQn1B Tqlp8r9zxaUVzPvmhVkMaIRYupNM5dg0EzX3XWmXkOAbhLcSy6eHEIPVnTi18DOgUHgv ioflft4ul7P4rABaOCM8I7QZ9nmDWNklKNp+xyOjTulu/NCOEeAz7mgTISN4mcqtEI/f EqRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053554; x=1776658354; h=cc: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=G3RKd90CU7bpfJzsVRgdoPzaWpWL8PVovDD5xnBS+Qs=; b=SfVVWCNQRh7FdQH95VDjV5DEfhLhKXqWskMLcV21H/i8ZOYjRJmmBqA9N2OYJHM+Dv LlCk3JKn9OfjbMSbQgoS573B4YTJmivQ7GRnOX+sOPD2M41+HJk2/6EjJVQ87/Esf3Nn sbltNUV/BaEKEhXY7VikxJrQiID4SYthVcG714H/aNDgnE96MOW3scooIuRD7FqNI2qK moPZjQx/BAAFB7TZUe7gxJIYh9E/0Y/TfwU5FcUBJxNtR7Ypr09QFKR50VYbSxXJMuGx X0aY0/TiaHdu6TZYuPwSvsnvFQxd3TxTgeyjw0VO4ZCVns9tzjYRCMSv/bnkXdqu6Edq jSmg== X-Forwarded-Encrypted: i=1; AFNElJ/6pUMA+AnYxk6MvL4dWpc7F6v0LAfciM5OpoqAMB3B5cHfMc0EU6VP7zpkkFZn9EFeV1A5m88ELrvuAgk=@vger.kernel.org X-Gm-Message-State: AOJu0YysQ7aJ4UD2o1QS2HORrsodFiPnwLz1gxp40YhMly15juSPYMaT a6hCVTnNf5PH1FkrkpawTcQHmtdw7WjGsuGXIcun/wnl6qL1ZxVis7gwTwYEX5Ezxv+KV0iJBEn G2fDVwz1QYw== X-Received: from dycno6.prod.google.com ([2002:a05:7301:1446:b0:2cb:30a4:447d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:220d:b0:2be:1f56:ed21 with SMTP id 5a478bee46e88-2d5876a0820mr6185449eec.7.1776053553229; Sun, 12 Apr 2026 21:12:33 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:26 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-17-irogers@google.com> Subject: [PATCH v12 16/33] perf sched: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and so it is unnecessary to pass the evsel as well. Signed-off-by: Ian Rogers --- tools/perf/builtin-sched.c | 92 ++++++++++++++------------------------ 1 file changed, 34 insertions(+), 58 deletions(-) diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index aea14bff7e61..45439e2af8ff 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c @@ -129,21 +129,20 @@ typedef int (*sort_fn_t)(struct work_atoms *, struct = work_atoms *); struct perf_sched; =20 struct trace_sched_handler { - int (*switch_event)(struct perf_sched *sched, struct evsel *evsel, - struct perf_sample *sample, struct machine *machine); + int (*switch_event)(struct perf_sched *sched, struct perf_sample *sample, + struct machine *machine); =20 - int (*runtime_event)(struct perf_sched *sched, struct evsel *evsel, - struct perf_sample *sample, struct machine *machine); + int (*runtime_event)(struct perf_sched *sched, struct perf_sample *sample, + struct machine *machine); =20 - int (*wakeup_event)(struct perf_sched *sched, struct evsel *evsel, - struct perf_sample *sample, struct machine *machine); + int (*wakeup_event)(struct perf_sched *sched, struct perf_sample *sample, + struct machine *machine); =20 /* PERF_RECORD_FORK event, not sched_process_fork tracepoint */ int (*fork_event)(struct perf_sched *sched, union perf_event *event, struct machine *machine); =20 int (*migrate_task_event)(struct perf_sched *sched, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine); }; @@ -826,7 +825,7 @@ static void test_calibrations(struct perf_sched *sched) =20 static int replay_wakeup_event(struct perf_sched *sched, - struct evsel *evsel, struct perf_sample *sample, + struct perf_sample *sample, struct machine *machine __maybe_unused) { const char *comm =3D perf_sample__strval(sample, "comm"); @@ -834,7 +833,7 @@ replay_wakeup_event(struct perf_sched *sched, struct task_desc *waker, *wakee; =20 if (verbose > 0) { - printf("sched_wakeup event %p\n", evsel); + printf("sched_wakeup event %p\n", sample->evsel); =20 printf(" ... pid %d woke up %s/%d\n", sample->tid, comm, pid); } @@ -847,7 +846,6 @@ replay_wakeup_event(struct perf_sched *sched, } =20 static int replay_switch_event(struct perf_sched *sched, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine __maybe_unused) { @@ -861,7 +859,7 @@ static int replay_switch_event(struct perf_sched *sched, s64 delta; =20 if (verbose > 0) - printf("sched_switch event %p\n", evsel); + printf("sched_switch event %p\n", sample->evsel); =20 if (cpu >=3D MAX_CPUS || cpu < 0) return 0; @@ -1134,7 +1132,6 @@ static void free_work_atoms(struct work_atoms *atoms) } =20 static int latency_switch_event(struct perf_sched *sched, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { @@ -1204,7 +1201,6 @@ static int latency_switch_event(struct perf_sched *sc= hed, } =20 static int latency_runtime_event(struct perf_sched *sched, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { @@ -1239,7 +1235,6 @@ static int latency_runtime_event(struct perf_sched *s= ched, } =20 static int latency_wakeup_event(struct perf_sched *sched, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { @@ -1300,7 +1295,6 @@ static int latency_wakeup_event(struct perf_sched *sc= hed, } =20 static int latency_migrate_task_event(struct perf_sched *sched, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, struct machine *machine) { @@ -1519,20 +1513,18 @@ static void perf_sched__sort_lat(struct perf_sched = *sched) } =20 static int process_sched_wakeup_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { struct perf_sched *sched =3D container_of(tool, struct perf_sched, tool); =20 if (sched->tp_handler->wakeup_event) - return sched->tp_handler->wakeup_event(sched, evsel, sample, machine); + return sched->tp_handler->wakeup_event(sched, sample, machine); =20 return 0; } =20 static int process_sched_wakeup_ignore(const struct perf_tool *tool __mayb= e_unused, - struct evsel *evsel __maybe_unused, struct perf_sample *sample __maybe_unused, struct machine *machine __maybe_unused) { @@ -1626,8 +1618,8 @@ static void print_sched_map(struct perf_sched *sched,= struct perf_cpu this_cpu, } } =20 -static int map_switch_event(struct perf_sched *sched, struct evsel *evsel = __maybe_unused, - struct perf_sample *sample, struct machine *machine) +static int map_switch_event(struct perf_sched *sched, struct perf_sample = *sample, + struct machine *machine) { const u32 next_pid =3D perf_sample__intval(sample, "next_pid"); const u32 prev_pid =3D perf_sample__intval(sample, "prev_pid"); @@ -1791,7 +1783,6 @@ static int map_switch_event(struct perf_sched *sched,= struct evsel *evsel __mayb } =20 static int process_sched_switch_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -1810,21 +1801,20 @@ static int process_sched_switch_event(const struct = perf_tool *tool, } =20 if (sched->tp_handler->switch_event) - err =3D sched->tp_handler->switch_event(sched, evsel, sample, machine); + err =3D sched->tp_handler->switch_event(sched, sample, machine); =20 sched->curr_pid[this_cpu] =3D next_pid; return err; } =20 static int process_sched_runtime_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { struct perf_sched *sched =3D container_of(tool, struct perf_sched, tool); =20 if (sched->tp_handler->runtime_event) - return sched->tp_handler->runtime_event(sched, evsel, sample, machine); + return sched->tp_handler->runtime_event(sched, sample, machine); =20 return 0; } @@ -1847,20 +1837,18 @@ static int perf_sched__process_fork_event(const str= uct perf_tool *tool, } =20 static int process_sched_migrate_task_event(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { struct perf_sched *sched =3D container_of(tool, struct perf_sched, tool); =20 if (sched->tp_handler->migrate_task_event) - return sched->tp_handler->migrate_task_event(sched, evsel, sample, machi= ne); + return sched->tp_handler->migrate_task_event(sched, sample, machine); =20 return 0; } =20 typedef int (*tracepoint_handler)(const struct perf_tool *tool, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine); =20 @@ -1874,7 +1862,7 @@ static int perf_sched__process_tracepoint_sample(cons= t struct perf_tool *tool __ =20 if (evsel->handler !=3D NULL) { tracepoint_handler f =3D evsel->handler; - err =3D f(tool, evsel, sample, machine); + err =3D f(tool, sample, machine); } =20 return err; @@ -2313,11 +2301,10 @@ static void timehist_update_runtime_stats(struct th= read_runtime *r, r->total_pre_mig_time +=3D r->dt_pre_mig; } =20 -static bool is_idle_sample(struct perf_sample *sample, - struct evsel *evsel) +static bool is_idle_sample(struct perf_sample *sample) { /* pid 0 =3D=3D swapper =3D=3D idle task */ - if (evsel__name_is(evsel, "sched:sched_switch")) + if (evsel__name_is(sample->evsel, "sched:sched_switch")) return perf_sample__intval(sample, "prev_pid") =3D=3D 0; =20 return sample->pid =3D=3D 0; @@ -2499,12 +2486,11 @@ static void save_idle_callchain(struct perf_sched *= sched, =20 static struct thread *timehist_get_thread(struct perf_sched *sched, struct perf_sample *sample, - struct machine *machine, - struct evsel *evsel) + struct machine *machine) { struct thread *thread; =20 - if (is_idle_sample(sample, evsel)) { + if (is_idle_sample(sample)) { thread =3D get_idle_thread(sample->cpu); if (thread =3D=3D NULL) pr_err("Failed to get idle thread for cpu %d.\n", sample->cpu); @@ -2547,7 +2533,6 @@ static struct thread *timehist_get_thread(struct perf= _sched *sched, =20 static bool timehist_skip_sample(struct perf_sched *sched, struct thread *thread, - struct evsel *evsel, struct perf_sample *sample) { bool rc =3D false; @@ -2569,7 +2554,7 @@ static bool timehist_skip_sample(struct perf_sched *s= ched, tr =3D thread__get_runtime(thread); if (tr && tr->prio !=3D -1) prio =3D tr->prio; - else if (evsel__name_is(evsel, "sched:sched_switch")) + else if (evsel__name_is(sample->evsel, "sched:sched_switch")) prio =3D perf_sample__intval(sample, "prev_prio"); =20 if (prio !=3D -1 && !test_bit(prio, sched->prio_bitmap)) { @@ -2579,7 +2564,7 @@ static bool timehist_skip_sample(struct perf_sched *s= ched, } =20 if (sched->idle_hist) { - if (!evsel__name_is(evsel, "sched:sched_switch")) + if (!evsel__name_is(sample->evsel, "sched:sched_switch")) rc =3D true; else if (perf_sample__intval(sample, "prev_pid") !=3D 0 && perf_sample__intval(sample, "next_pid") !=3D 0) @@ -2590,7 +2575,6 @@ static bool timehist_skip_sample(struct perf_sched *s= ched, } =20 static void timehist_print_wakeup_event(struct perf_sched *sched, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine, struct thread *awakened) @@ -2603,8 +2587,8 @@ static void timehist_print_wakeup_event(struct perf_s= ched *sched, return; =20 /* show wakeup unless both awakee and awaker are filtered */ - if (timehist_skip_sample(sched, thread, evsel, sample) && - timehist_skip_sample(sched, awakened, evsel, sample)) { + if (timehist_skip_sample(sched, thread, sample) && + timehist_skip_sample(sched, awakened, sample)) { thread__put(thread); return; } @@ -2628,7 +2612,6 @@ static void timehist_print_wakeup_event(struct perf_s= ched *sched, =20 static int timehist_sched_wakeup_ignore(const struct perf_tool *tool __may= be_unused, union perf_event *event __maybe_unused, - struct evsel *evsel __maybe_unused, struct perf_sample *sample __maybe_unused, struct machine *machine __maybe_unused) { @@ -2637,7 +2620,6 @@ static int timehist_sched_wakeup_ignore(const struct = perf_tool *tool __maybe_unu =20 static int timehist_sched_wakeup_event(const struct perf_tool *tool, union perf_event *event __maybe_unused, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -2663,14 +2645,13 @@ static int timehist_sched_wakeup_event(const struct= perf_tool *tool, /* show wakeups if requested */ if (sched->show_wakeups && !perf_time__skip_sample(&sched->ptime, sample->time)) - timehist_print_wakeup_event(sched, evsel, sample, machine, thread); + timehist_print_wakeup_event(sched, sample, machine, thread); =20 thread__put(thread); return 0; } =20 static void timehist_print_migration_event(struct perf_sched *sched, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine, struct thread *migrated) @@ -2691,8 +2672,8 @@ static void timehist_print_migration_event(struct per= f_sched *sched, if (thread =3D=3D NULL) return; =20 - if (timehist_skip_sample(sched, thread, evsel, sample) && - timehist_skip_sample(sched, migrated, evsel, sample)) { + if (timehist_skip_sample(sched, thread, sample) && + timehist_skip_sample(sched, migrated, sample)) { thread__put(thread); return; } @@ -2726,7 +2707,6 @@ static void timehist_print_migration_event(struct per= f_sched *sched, =20 static int timehist_migrate_task_event(const struct perf_tool *tool, union perf_event *event __maybe_unused, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -2751,8 +2731,7 @@ static int timehist_migrate_task_event(const struct p= erf_tool *tool, =20 /* show migrations if requested */ if (sched->show_migrations) { - timehist_print_migration_event(sched, evsel, sample, - machine, thread); + timehist_print_migration_event(sched, sample, machine, thread); } thread__put(thread); =20 @@ -2784,7 +2763,6 @@ static void timehist_update_task_prio(struct perf_sam= ple *sample, =20 static int timehist_sched_change_event(const struct perf_tool *tool, union perf_event *event, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine) { @@ -2808,13 +2786,13 @@ static int timehist_sched_change_event(const struct= perf_tool *tool, if (sched->show_prio || sched->prio_str) timehist_update_task_prio(sample, machine); =20 - thread =3D timehist_get_thread(sched, sample, machine, evsel); + thread =3D timehist_get_thread(sched, sample, machine); if (thread =3D=3D NULL) { rc =3D -1; goto out; } =20 - if (timehist_skip_sample(sched, thread, evsel, sample)) + if (timehist_skip_sample(sched, thread, sample)) goto out; =20 tr =3D thread__get_runtime(thread); @@ -2823,7 +2801,7 @@ static int timehist_sched_change_event(const struct p= erf_tool *tool, goto out; } =20 - tprev =3D evsel__get_time(evsel, sample->cpu); + tprev =3D evsel__get_time(sample->evsel, sample->cpu); =20 /* * If start time given: @@ -2913,7 +2891,7 @@ static int timehist_sched_change_event(const struct p= erf_tool *tool, tr->migrated =3D 0; } =20 - evsel__save_time(evsel, sample->time, sample->cpu); + evsel__save_time(sample->evsel, sample->time, sample->cpu); =20 thread__put(thread); addr_location__exit(&al); @@ -2922,11 +2900,10 @@ static int timehist_sched_change_event(const struct= perf_tool *tool, =20 static int timehist_sched_switch_event(const struct perf_tool *tool, union perf_event *event, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine __maybe_unused) { - return timehist_sched_change_event(tool, event, evsel, sample, machine); + return timehist_sched_change_event(tool, event, sample, machine); } =20 static int process_lost(const struct perf_tool *tool __maybe_unused, @@ -3174,7 +3151,6 @@ static void timehist_print_summary(struct perf_sched = *sched, =20 typedef int (*sched_handler)(const struct perf_tool *tool, union perf_event *event, - struct evsel *evsel, struct perf_sample *sample, struct machine *machine); =20 @@ -3196,7 +3172,7 @@ static int perf_timehist__process_sample(const struct= perf_tool *tool, if (evsel->handler !=3D NULL) { sched_handler f =3D evsel->handler; =20 - err =3D f(tool, event, evsel, sample, machine); + err =3D f(tool, event, sample, machine); } =20 return err; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 D932A382F19 for ; Mon, 13 Apr 2026 04:12:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053565; cv=none; b=dm+izQxTxtnEXuk36hDkDieHQkkuUlbtZShlJdBvjL25XVpt9BZky1CfQ4TH17cVVlPDBWlPw/eEtRCHf6vL5vHLWYSu+SCs4GiaDGqmevwU72jhhdZBeskM0Xvx83I0VbFHXo19Gd7Vg2IwXSYh8uh5FpXpxBYepd2dD7i6faA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053565; c=relaxed/simple; bh=Pp17mH3cyPs8wClDF436l++iCbJL7V577K67JvRUutU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=bcPF4UKwdX8rMLFYM6w9fgE6Dsjz8spGn8f6ilOk+KsocoIPqZhWxrVy89+GeDTabSeyBiXh2BR6NTPyDUJ6uuDfd29MGUkmpFdeJ7YAQZ8ooCtosyDc8sOyTbiCN1nu7uyeLsM+qZb/8zEYEeHQ1gbYX0n64kMUAYnwrQN3lRY= 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=fpU7/L+q; arc=none smtp.client-ip=74.125.82.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="fpU7/L+q" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2d8a677cdfaso786852eec.1 for ; Sun, 12 Apr 2026 21:12:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053556; x=1776658356; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Nq7inTgObUkJQusjbZywjT67pBRs4vv79SY6QidR5y4=; b=fpU7/L+qUHY03LobspuqQ5nLxfESpTfU3tnJvcadtwj9rBJazotvvHbXwzgrZNQbsi 6Mtkhbh3g/WcrvtUymnn0zqqytlIt2LkQ1/Wf67vuXE22b8b+jS34SBlkARQ6JNNMDwA nJsB6Bb5pitrncTwBQuaka/GboVr4xxCRekYS2i6JUlmjULdgBNc4knWSGMta6h04Z5n BprGU+jw7n8pKpj25DuBAwwThhuQHwo1qaUWa2kQz5olUr+JR4yuQ6ya77ujGk/w9xig 0Ei25v87GANqmm3sjrQwEMWnL1CYIYr2VWCeV0+NeqBMKCVL8gmZs19cPTZXvoQ2w3hq HK3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053556; x=1776658356; h=cc: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=Nq7inTgObUkJQusjbZywjT67pBRs4vv79SY6QidR5y4=; b=UZwOSEhG3VeJsVvq4N9hlFnM4kosz/v6W9ACogwB8rIX18Lf+raxE8gZO9Lk6S3ISP ZJO9oLALbL7iPtWghauduEzpJ0M2KahQsXdiwxY6T9r3KVfFcPORUu8tpBpT4u+Dq5ae tUBksLkB0mdjbvD4SuEFd9doE7lwN2X6FUDbizouVkVQ8TpxSnBZzeFagirgeB0jyCUw PCavqDOjUn8OTOCxsdjXgoMvRrvqL//zvVywsAv2ISd6vhAIgqsyBt7CUlaN1EbflN3s u4i+ku/eUbcqDBKgwjHVDjteaOq5J7xH+LFbA22e0A9CxOAin7j6grLv7cdSBmSkwM57 TPXw== X-Forwarded-Encrypted: i=1; AFNElJ9774R2K0qYzEiRtQWnOCOaIspXRlkX71KfXQPHul85QBe0HC60CbIoE7CDQ8SP/g63kRnj4OcZTE5mvEY=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5zKmn4lHhxhVEPUP5Np0GNFL3OULUHoC8OwoXALQTK1l7uRHX iEUTE9hquuCBmdHHaxO5hqrpRsQ5E8g2wKN7/XeE1pwyG+VLoG2GrrN8LZiXoFR97+C10VK9EkZ TUHaKrRXOyg== X-Received: from dycmx14.prod.google.com ([2002:a05:693c:288e:b0:2d6:f1a6:66f6]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:4190:b0:2d8:e60e:a1cb with SMTP id 5a478bee46e88-2d8e60ea998mr1478761eec.30.1776053555569; Sun, 12 Apr 2026 21:12:35 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:27 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-18-irogers@google.com> Subject: [PATCH v12 17/33] perf timechart: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and so it is unnecessary to pass the evsel as well. Add missing backtrace argument to tracepoint_handler functions and mark them unused. Signed-off-by: Ian Rogers --- tools/perf/builtin-timechart.c | 60 +++++++++++++++------------------- 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 034e0ba3f9cb..1d24d8738519 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -567,7 +567,6 @@ static const char *cat_backtrace(union perf_event *even= t, } =20 typedef int (*tracepoint_handler)(struct timechart *tchart, - struct evsel *evsel, struct perf_sample *sample, const char *backtrace); =20 @@ -588,8 +587,8 @@ static int process_sample_event(const struct perf_tool = *tool, =20 if (evsel->handler !=3D NULL) { tracepoint_handler f =3D evsel->handler; - return f(tchart, evsel, sample, - cat_backtrace(event, sample, machine)); + + return f(tchart, sample, cat_backtrace(event, sample, machine)); } =20 return 0; @@ -597,7 +596,6 @@ static int process_sample_event(const struct perf_tool = *tool, =20 static int process_sample_cpu_idle(struct timechart *tchart __maybe_unused, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { @@ -613,7 +611,6 @@ process_sample_cpu_idle(struct timechart *tchart __mayb= e_unused, =20 static int process_sample_cpu_frequency(struct timechart *tchart, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { @@ -626,7 +623,6 @@ process_sample_cpu_frequency(struct timechart *tchart, =20 static int process_sample_sched_wakeup(struct timechart *tchart, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace) { @@ -640,7 +636,6 @@ process_sample_sched_wakeup(struct timechart *tchart, =20 static int process_sample_sched_switch(struct timechart *tchart, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace) { @@ -656,7 +651,6 @@ process_sample_sched_switch(struct timechart *tchart, #ifdef SUPPORT_OLD_POWER_EVENTS static int process_sample_power_start(struct timechart *tchart __maybe_unused, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { @@ -669,7 +663,6 @@ process_sample_power_start(struct timechart *tchart __m= aybe_unused, =20 static int process_sample_power_end(struct timechart *tchart, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { @@ -679,7 +672,6 @@ process_sample_power_end(struct timechart *tchart, =20 static int process_sample_power_frequency(struct timechart *tchart, - struct evsel *evsel __maybe_unused, struct perf_sample *sample, const char *backtrace __maybe_unused) { @@ -849,8 +841,8 @@ static int pid_end_io_sample(struct timechart *tchart, = int pid, int type, =20 static int process_enter_read(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_READ, @@ -859,8 +851,8 @@ process_enter_read(struct timechart *tchart, =20 static int process_exit_read(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_READ, @@ -869,8 +861,8 @@ process_exit_read(struct timechart *tchart, =20 static int process_enter_write(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_WRITE, @@ -879,8 +871,8 @@ process_enter_write(struct timechart *tchart, =20 static int process_exit_write(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_WRITE, @@ -889,8 +881,8 @@ process_exit_write(struct timechart *tchart, =20 static int process_enter_sync(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_SYNC, @@ -899,8 +891,8 @@ process_enter_sync(struct timechart *tchart, =20 static int process_exit_sync(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_SYNC, @@ -909,8 +901,8 @@ process_exit_sync(struct timechart *tchart, =20 static int process_enter_tx(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_TX, @@ -919,8 +911,8 @@ process_enter_tx(struct timechart *tchart, =20 static int process_exit_tx(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_TX, @@ -929,8 +921,8 @@ process_exit_tx(struct timechart *tchart, =20 static int process_enter_rx(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_RX, @@ -939,8 +931,8 @@ process_enter_rx(struct timechart *tchart, =20 static int process_exit_rx(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_RX, @@ -949,8 +941,8 @@ process_exit_rx(struct timechart *tchart, =20 static int process_enter_poll(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long fd =3D perf_sample__intval(sample, "fd"); return pid_begin_io_sample(tchart, sample->tid, IOTYPE_POLL, @@ -959,8 +951,8 @@ process_enter_poll(struct timechart *tchart, =20 static int process_exit_poll(struct timechart *tchart, - struct evsel *evsel __maybe_unused, - struct perf_sample *sample) + struct perf_sample *sample, + const char *backtrace __maybe_unused) { long ret =3D perf_sample__intval(sample, "ret"); return pid_end_io_sample(tchart, sample->tid, IOTYPE_POLL, --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 5DA97382F38 for ; Mon, 13 Apr 2026 04:12:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053569; cv=none; b=U6NG1UzMKUa9IQcmco5UEnnqw/8RGtPfCALe8bZWDzrfr7k9bNfGq1iIWKdyoztbbfMwXRrG5V06pFncy/uT63lQpTQuhHrnBWBtci2Bn04wbyG9MSWdePNRAX6BXLO3OMr5elS2QivrjL1BRea+UM/tqIOLJbG101FeTPoHi3A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053569; c=relaxed/simple; bh=ge8wARLhBMwexhRDGIWjn0ZcXZilIlhpkFC0+P8MGis=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jDkChIXKdBuIy8R/8+bb9VqSYlETDeczdqyiDCyNe7AB80eawpYCF3GizEV4NxaQ7fk5yS5Xm5rwJmtTQqHrItax/WSSQkm5/htkwgw52rUtT+Xr+aRjg3Agg4bNC4wzORamY5MKQJg6GYwbbcgqyElzQSg6ujkEdL+jnaV1szs= 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=LdBE7T8K; arc=none smtp.client-ip=74.125.82.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="LdBE7T8K" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2d5de9deba9so4583132eec.0 for ; Sun, 12 Apr 2026 21:12:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053558; x=1776658358; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=dApPHTKd9TWmg34UUEla0Pul7we/BjeRSMVVeuYijd4=; b=LdBE7T8KCAl5O96aTaJoIdTQH+a5uQontsrOMJm+7bPOPGSZaejkDgiUbyp5lq2riC 3yQqVKsFb233+gfwhmWBQ7PSmVbC5qpRSlkPwpE4166TxyLXIFe9vR+cDOPmKYjAtv+Y NRjqi4RQnnKkVYZp8YwLe9pgycIyU0fuxdNzX9fgTrzOfGKuf0y0yGBiwwcwyFsnOndD zIYbqMaOJgiJ106WOYVnUyiPmWVvLQ2cE3PfP84Go+WmB/0vVRBX3yspKJOCJ9b5Ph6e HF5If3dQLJCGD0oqczjnha3StJKUDRuyz/IGVVi9FO6IAs5IaFM5iSDQEot+sOmALgwY WD/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053558; x=1776658358; h=cc: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=dApPHTKd9TWmg34UUEla0Pul7we/BjeRSMVVeuYijd4=; b=NHOMfRyF7wQLribYOfg7EGeKx3OoC0UtdiCG7c2Rdhtf9Z3Ji18rOjIIp4XkQ0rm8b QaCDH8Jf7PL6dRU5vzrpDbjim2pKyYjzGB6L+o699V8pycyxVjqpFLwHwwBgmDAY5uAC q018XhfJKTWzR9B1tyMlyQDhn3XrZUkHW1lWpDqakIB8n5xJgHGgocsvBcOio5ciyoU1 TqU1TYt/zvldZmfK5yhf7MJjnwe/nK6q/jPtP7zQVe6vIBAZ1kYMCS/A8o64wbJKl+s4 jEDwq4igQNRLQm6c7qW0xhFtH/TgaYcQVgl6UEQzsKNE2pj43J3CvBLSJAO5n6fcfsSC d4nw== X-Forwarded-Encrypted: i=1; AFNElJ+4JV+fuMn34dD89KCf7mqLb6TsMd9jKOjl5ozMjYycuVCsKPFR/SpbvKwgpDSM4Aq4FOxqA7ppiH8EKsM=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1FjlqSbt0BbsHgfR3YFSS3987lS9a5pJRiYtPrHkp5nlFQwIQ IyQzO9dvVjsaeGiKXMjVrIrT+LsUVBAWbzfPQxMIsYCKl1NzyMaFrbVe4QyKZlrnBk0h4gcQh8O PWrDPhADNSQ== X-Received: from dydu24.prod.google.com ([2002:a05:7300:51f8:b0:2d5:dda1:d014]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:6706:b0:2c8:fe46:eeb6 with SMTP id 5a478bee46e88-2d5881a91e7mr6431630eec.16.1776053557915; Sun, 12 Apr 2026 21:12:37 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:28 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-19-irogers@google.com> Subject: [PATCH v12 18/33] perf trace: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and so it is unnecessary to pass the evsel as well. In trace__handle_event try to use the evsel from the sample to avoid recomputation. Signed-off-by: Ian Rogers --- tools/perf/builtin-trace.c | 52 ++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 1fac167f7436..4e54e75d8ff0 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -2582,7 +2582,7 @@ static struct syscall *trace__find_syscall(struct tra= ce *trace, int e_machine, i return sc; } =20 -typedef int (*tracepoint_handler)(struct trace *trace, struct evsel *evsel, +typedef int (*tracepoint_handler)(struct trace *trace, union perf_event *event, struct perf_sample *sample); =20 @@ -2777,10 +2777,11 @@ static void *syscall__augmented_args(struct syscall= *sc, struct perf_sample *sam return NULL; } =20 -static int trace__sys_enter(struct trace *trace, struct evsel *evsel, +static int trace__sys_enter(struct trace *trace, union perf_event *event __maybe_unused, struct perf_sample *sample) { + struct evsel *evsel =3D sample->evsel; char *msg; void *args; int printed =3D 0; @@ -2923,10 +2924,11 @@ static int trace__fprintf_callchain(struct trace *t= race, struct perf_sample *sam return sample__fprintf_callchain(sample, 38, print_opts, get_tls_callchai= n_cursor(), symbol_conf.bt_stop_list, trace->output); } =20 -static int trace__sys_exit(struct trace *trace, struct evsel *evsel, +static int trace__sys_exit(struct trace *trace, union perf_event *event __maybe_unused, struct perf_sample *sample) { + struct evsel *evsel =3D sample->evsel; long ret; u64 duration =3D 0; bool duration_calculated =3D false; @@ -3061,7 +3063,7 @@ errno_print: { return err; } =20 -static int trace__vfs_getname(struct trace *trace, struct evsel *evsel __m= aybe_unused, +static int trace__vfs_getname(struct trace *trace, union perf_event *event __maybe_unused, struct perf_sample *sample) { @@ -3122,7 +3124,7 @@ static int trace__vfs_getname(struct trace *trace, st= ruct evsel *evsel __maybe_u return 0; } =20 -static int trace__sched_stat_runtime(struct trace *trace, struct evsel *ev= sel, +static int trace__sched_stat_runtime(struct trace *trace, union perf_event *event __maybe_unused, struct perf_sample *sample) { @@ -3144,7 +3146,7 @@ static int trace__sched_stat_runtime(struct trace *tr= ace, struct evsel *evsel, =20 out_dump: fprintf(trace->output, "%s: comm=3D%s,pid=3D%u,runtime=3D%" PRIu64 ",vrun= time=3D%" PRIu64 ")\n", - evsel->name, + sample->evsel->name, perf_sample__strval(sample, "comm"), (pid_t)perf_sample__intval(sample, "pid"), runtime, @@ -3255,10 +3257,11 @@ static size_t trace__fprintf_tp_fields(struct trace= *trace, struct perf_sample * return fprintf(trace->output, "%.*s", (int)printed, bf); } =20 -static int trace__event_handler(struct trace *trace, struct evsel *evsel, +static int trace__event_handler(struct trace *trace, union perf_event *event __maybe_unused, struct perf_sample *sample) { + struct evsel *evsel =3D sample->evsel; struct thread *thread; int callchain_ret =3D 0; =20 @@ -3364,7 +3367,6 @@ static void print_location(FILE *f, struct perf_sampl= e *sample, } =20 static int trace__pgfault(struct trace *trace, - struct evsel *evsel, union perf_event *event __maybe_unused, struct perf_sample *sample) { @@ -3393,7 +3395,7 @@ static int trace__pgfault(struct trace *trace, if (ttrace =3D=3D NULL) goto out_put; =20 - if (evsel->core.attr.config =3D=3D PERF_COUNT_SW_PAGE_FAULTS_MAJ) { + if (sample->evsel->core.attr.config =3D=3D PERF_COUNT_SW_PAGE_FAULTS_MAJ)= { ttrace->pfmaj++; trace->pfmaj++; } else { @@ -3409,7 +3411,7 @@ static int trace__pgfault(struct trace *trace, trace__fprintf_entry_head(trace, thread, 0, true, sample->time, trace->ou= tput); =20 fprintf(trace->output, "%sfault [", - evsel->core.attr.config =3D=3D PERF_COUNT_SW_PAGE_FAULTS_MAJ ? + sample->evsel->core.attr.config =3D=3D PERF_COUNT_SW_PAGE_FAULTS_MAJ ? "maj" : "min"); =20 print_location(trace->output, sample, &al, false, true); @@ -3434,7 +3436,8 @@ static int trace__pgfault(struct trace *trace, if (callchain_ret > 0) trace__fprintf_callchain(trace, sample); else if (callchain_ret < 0) - pr_err("Problem processing %s callchain, skipping...\n", evsel__name(evs= el)); + pr_err("Problem processing %s callchain, skipping...\n", + evsel__name(sample->evsel)); =20 ++trace->nr_events_printed; out: @@ -3446,7 +3449,6 @@ static int trace__pgfault(struct trace *trace, } =20 static void trace__set_base_time(struct trace *trace, - struct evsel *evsel, struct perf_sample *sample) { /* @@ -3458,7 +3460,7 @@ static void trace__set_base_time(struct trace *trace, * appears in our event stream (vfs_getname comes to mind). */ if (trace->base_time =3D=3D 0 && !trace->full_time && - (evsel->core.attr.sample_type & PERF_SAMPLE_TIME)) + (sample->evsel->core.attr.sample_type & PERF_SAMPLE_TIME)) trace->base_time =3D sample->time; } =20 @@ -3478,11 +3480,11 @@ static int trace__process_sample(const struct perf_= tool *tool, if (thread && thread__is_filtered(thread)) goto out; =20 - trace__set_base_time(trace, evsel, sample); + trace__set_base_time(trace, sample); =20 if (handler) { ++trace->nr_events; - handler(trace, evsel, event, sample); + handler(trace, event, sample); } out: thread__put(thread); @@ -3624,32 +3626,34 @@ static void evlist__free_syscall_tp_fields(struct e= vlist *evlist) static void trace__handle_event(struct trace *trace, union perf_event *eve= nt, struct perf_sample *sample) { const u32 type =3D event->header.type; - struct evsel *evsel; =20 if (type !=3D PERF_RECORD_SAMPLE) { trace__process_event(trace, trace->host, event, sample); return; } =20 - evsel =3D evlist__id2evsel(trace->evlist, sample->id); - if (evsel =3D=3D NULL) { + if (sample->evsel =3D=3D NULL) + sample->evsel =3D evlist__id2evsel(trace->evlist, sample->id); + + if (sample->evsel =3D=3D NULL) { fprintf(trace->output, "Unknown tp ID %" PRIu64 ", skipping...\n", sampl= e->id); return; } =20 - if (evswitch__discard(&trace->evswitch, evsel)) + if (evswitch__discard(&trace->evswitch, sample->evsel)) return; =20 - trace__set_base_time(trace, evsel, sample); + trace__set_base_time(trace, sample); =20 - if (evsel->core.attr.type =3D=3D PERF_TYPE_TRACEPOINT && + if (sample->evsel->core.attr.type =3D=3D PERF_TYPE_TRACEPOINT && sample->raw_data =3D=3D NULL) { fprintf(trace->output, "%s sample with no payload for tid: %d, cpu %d, r= aw_size=3D%d, skipping...\n", - evsel__name(evsel), sample->tid, + evsel__name(sample->evsel), sample->tid, sample->cpu, sample->raw_size); } else { - tracepoint_handler handler =3D evsel->handler; - handler(trace, evsel, event, sample); + tracepoint_handler handler =3D sample->evsel->handler; + + handler(trace, event, sample); } =20 if (trace->nr_events_printed >=3D trace->max_events && trace->max_events = !=3D ULONG_MAX) --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 C134F38238F for ; Mon, 13 Apr 2026 04:12:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053568; cv=none; b=B9lZnmQm/cFqJXOPfXr2+tkWQ/jOFC5Ehwj96Pgsw0h2AfbCHxMlJu17CB9FFXWSWrKl9YGNiNW4HlcumXTRuO3Wq23xNUiB6QaK02sdIYpoAnSstVZdNwlqcxaMzrW7f/ebqfy1FWfjJgjavc7l+fhovqkWBKq67yxWyaP5QgM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053568; c=relaxed/simple; bh=D6J4TrILnw+Vd5duIq8Xx5kVQzeF4EcLXmzsOqpDjuo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=POQHWr3PJfUKWB8HAL6l8Hg8BlrmfulV2Uyq7hI8ld8nKWfW7nEQcNdITJ7pOeuCtXtncguspBjKbwq9G43uH5iAYfK+ErU8glgm2EB9BToGKR9Aa18e1eXUfW4+RbIaLPfoP3YCQWyA2wUZ2+V0N62YaFHwv7sb3q9KF46q/0Y= 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=lh7kyxfT; arc=none smtp.client-ip=74.125.82.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="lh7kyxfT" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2bdf6fe90a9so5426652eec.1 for ; Sun, 12 Apr 2026 21:12:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053561; x=1776658361; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=DtrEOzqaeIjI7JHJhlF1QdgQmfPYgnjdkQHTwBVDnJc=; b=lh7kyxfTZpLAzlq5si30ujhwCK+tteACTqYneR/T0dA54teMfWzsxEc9VtnTMWrJy/ f52t8RMkWJO5wqBE1myGmyeVbph8gMVZ+30LX+UXwh5ykqLOcjzzWNosqgkZ6xeyzpSu jeCp2cC7+kfi0N9ujCl30O6oGBggIvxlGJWcmlsRIdZrou3glzPwn1I3wP2S6JDCFGRP Ak4F+5TZArShHZSmDQutSJIA45QSJU4e8WRd7TWt2EVa6nAgP3ptYk3ULiOFdMqlwKxZ 3WBkQARG3w/y2dsTbeuv/1G8TmkJ514o5JqX9g1SApOeuHIeILJexb1EiwMwsY/Q47EV zUcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053561; x=1776658361; h=cc: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=DtrEOzqaeIjI7JHJhlF1QdgQmfPYgnjdkQHTwBVDnJc=; b=g1mhuTJpnWmclWlSza9bugdO4P83BmMpZ1hMVZH0vdM385Nw2fTkE+6+LRJVDauH0M naEWgvlxCadAJ4hyy5pDY0EI3c5BCSkoaFm0PmjcXLfWEFENaq9+KDHk44NOgv0oSu7D U4XmLDLZ94hxi5qq+lw6h2fIfPxep5QPU9PEiDQSq8JCxYdZFgs7GcCpEDtRRgZu+HtP XDpZuPUypuOlwrfM+qKQzCArDxz9yb2u3VPCA6qPLGYjsERvoGA0jLa/HnDnqF4+wMmi LWfQOWoztR1lvf1Jhq3SzaLBMhggsm8SmiA26sG/9ZrJPCxHNpPRyJx0jDZLSHFSVNjz lPSg== X-Forwarded-Encrypted: i=1; AFNElJ8lVLPF51WCIF1E8CA00D6sydTe3EK6FCfcGf4OAtVgPdznm3A4NIjzJlKhr1PTSVDsNT5TbAecQ9qsE8M=@vger.kernel.org X-Gm-Message-State: AOJu0YyB4/orOB48yvcwi3QI5gBEHwT5a03bFx9+G5VuU1kU7XoG0NO0 SP7A7BBGMphWHKTw6z+n3/WhTomm5837TU7D0KWwsPIosWBmgGqG1ebLnR7DL838C1fuWqQSPUe vmOchFfJ/2w== X-Received: from dybir4.prod.google.com ([2002:a05:7300:c8c4:b0:2da:13c6:f288]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:4089:b0:2cc:afce:bc01 with SMTP id 5a478bee46e88-2d589daf1b2mr6310451eec.29.1776053560269; Sun, 12 Apr 2026 21:12:40 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:29 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-20-irogers@google.com> Subject: [PATCH v12 19/33] perf evlist: Try to avoid computing evsel from sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the sample has an evsel, don't recompute using the sample.id. Signed-off-by: Ian Rogers --- tools/perf/builtin-top.c | 4 +++- tools/perf/tests/mmap-basic.c | 4 +++- tools/perf/tests/switch-tracking.c | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 6cf73bb0c7af..c8474f7ac658 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -1164,7 +1164,9 @@ static int deliver_event(struct ordered_events *qe, goto next_event; } =20 - evsel =3D evlist__id2evsel(session->evlist, sample.id); + evsel =3D sample.evsel; + if (!evsel) + evsel =3D evlist__id2evsel(session->evlist, sample.id); assert(evsel !=3D NULL); =20 if (event->header.type =3D=3D PERF_RECORD_SAMPLE) { diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c index 3313c236104e..a18d84d858aa 100644 --- a/tools/perf/tests/mmap-basic.c +++ b/tools/perf/tests/mmap-basic.c @@ -142,7 +142,9 @@ static int test__basic_mmap(struct test_suite *test __m= aybe_unused, int subtest } =20 err =3D -1; - evsel =3D evlist__id2evsel(evlist, sample.id); + evsel =3D sample.evsel; + if (!evsel) + evsel =3D evlist__id2evsel(evlist, sample.id); perf_sample__exit(&sample); if (evsel =3D=3D NULL) { pr_debug("event with id %" PRIu64 diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-t= racking.c index 22b0302252db..e32331fee277 100644 --- a/tools/perf/tests/switch-tracking.c +++ b/tools/perf/tests/switch-tracking.c @@ -138,7 +138,10 @@ static int process_sample_event(struct evlist *evlist, goto out; } =20 - evsel =3D evlist__id2evsel(evlist, sample.id); + evsel =3D sample.evsel; + if (!evsel) + evsel =3D evlist__id2evsel(evlist, sample.id); + if (evsel =3D=3D switch_tracking->switch_evsel) { next_tid =3D perf_sample__intval(&sample, "next_pid"); prev_tid =3D perf_sample__intval(&sample, "prev_pid"); --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.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 1025E2D7D59 for ; Mon, 13 Apr 2026 04:12:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053574; cv=none; b=rBEFuS3bjhYwrXBvmvDHc2wrK9eW/AkellqlPVbZ+LbCHbHbpM31yemSxN92JBs28t4UCgewYWnCUjAWtemY3anzNdBYjUTabYmaUzkOdtOt02Nw5jRwlXFgKAfR+8n4VBGDKAE+i6BjhNOvG4Po3LwoZyqzuoLemkaDD8jPIwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053574; c=relaxed/simple; bh=aBbjJYLIj3JlgKicEywSIpg8iDK6n1Z+4CENOSS2sBg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Wv+A81OdT/FcaCvu4+TmBW6Kv+x+uYUGBgkAnd3fydKMZmuao6Q0aXFhhGmPuyAAYtG02XfI6m0rFkbuCJLD/hmZLzcuGjB5LAmTCRN8/phDCGPEziPr1pIkLABMQJomp7y8jHPlfX13L3LRIbh08Up2oe5PtySW/ZyutN405Rw= 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=RAGZQKmf; arc=none smtp.client-ip=74.125.82.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="RAGZQKmf" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c283a1212so11130304c88.1 for ; Sun, 12 Apr 2026 21:12:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053563; x=1776658363; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=kwG1W24uSzD7B/5afwjU1RRK24gDCHemA91ftb3lUmE=; b=RAGZQKmfMaZH9oQ7n2CUo3W+AimN79JfRtJn1UD3mdmKYZXDeFc7VlXOU+5b1BipOy uVhCcBLVMH1J509KUNS+So59Fi1TAlCcTrK/UP2UPD7UgGN+/j0aWRzQjacR2YMHoLlL z/RArTkb4lxcOQfGgthgIvYFde/D3dlBjjOAcVe3S6sJU/mcGIUG/D8I+A1O0FO/Gpd3 +85qaoKVLr7aefycZGHp0EYuX3VxwnEExsRdZH8cagibh8opZiFgjfewO+gIxqJrTZjt vLeMFxdEEsFdUwl6y99ShaU/ZJiuNuskLwtawnUDb2uY8o/6iljfkxQQOH4b2veeSIod 25Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053563; x=1776658363; h=cc: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=kwG1W24uSzD7B/5afwjU1RRK24gDCHemA91ftb3lUmE=; b=DCdxPPUh1dxGzmv97es7Krcmid7V3kJLSJ0tljt/0VaSFUi++cx70qGGf9nYjKjJzU wot1U7y5n1vRwJHM+UVsvrXjX1D+DV1bLpKHNTsllsUIyJGa69RZ/S+RuM+TnkpymntS HSTO/rUz4ROTBn6qw3BCHZmpJTOVZwNMJ0S+XLXUfqZBS98VfTJnWzclY8Ti6TPAgNtr M4SMXypyZT2xLd0ZpFvQbU/CyjRrcOm2jg6SaHpksheagbWzd5spuHoHXNyOng3zlmGb ayIWBJ+euAgWhd8sl3JrBJY7pTQg/wplvsHRtW89csABZK59sNz9jv13Tn1CqL48+T2h L48g== X-Forwarded-Encrypted: i=1; AJvYcCWe2wWS63C42oaj+OrFytACywxj7nUUp3Ib67C8LZXX+IvRSzEJaCv4KYeNWqC1sTNGTGrmozGGpnI9YlI=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7mtYsMV2QAU5KbM6hS7MWo0bCRrGoQT8IrQLgDBpvIS5uiS6+ ca0UA92V0oxBoHtBuAuCZYF1MLMl2EMdsqK1z0UehN7gIwwGSfRKhGLy/l1tgGvNy95/yXJG0z5 8O66PPha0ag== X-Received: from dld26.prod.google.com ([2002:a05:7022:31a:b0:12b:fe5e:215]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6629:b0:12a:713b:896a with SMTP id a92af1059eb24-12c34eedc16mr7356350c88.17.1776053562666; Sun, 12 Apr 2026 21:12:42 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:30 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-21-irogers@google.com> Subject: [PATCH v12 20/33] perf script: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and so it is unnecessary to pass the evsel as well. Remove the evsel from the struct scripting_context so that the sample version is always accessed. Signed-off-by: Ian Rogers --- tools/perf/builtin-script.c | 12 ++++-- .../util/scripting-engines/trace-event-perl.c | 21 +++++------ .../scripting-engines/trace-event-python.c | 37 ++++++++----------- tools/perf/util/trace-event-scripting.c | 5 +-- tools/perf/util/trace-event.h | 3 -- 5 files changed, 33 insertions(+), 45 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 6ea739f20495..c8ecf250577f 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -2418,12 +2418,13 @@ static bool show_event(struct perf_sample *sample, } =20 static void process_event(struct perf_script *script, - struct perf_sample *sample, struct evsel *evsel, + struct perf_sample *sample, struct addr_location *al, struct addr_location *addr_al, struct machine *machine) { struct thread *thread =3D al->thread; + struct evsel *evsel =3D sample->evsel; struct perf_event_attr *attr =3D &evsel->core.attr; unsigned int type =3D evsel__output_type(evsel); struct evsel_script *es =3D evsel->priv; @@ -2715,9 +2716,9 @@ static int process_sample_event(const struct perf_too= l *tool, thread__resolve(al.thread, &addr_al, sample); addr_al_ptr =3D &addr_al; } - scripting_ops->process_event(event, sample, evsel, &al, addr_al_ptr); + scripting_ops->process_event(event, sample, &al, addr_al_ptr); } else { - process_event(scr, sample, evsel, &al, &addr_al, machine); + process_event(scr, sample, &al, &addr_al, machine); } =20 out_put: @@ -2893,9 +2894,12 @@ static int print_event_with_time(const struct perf_t= ool *tool, { struct perf_script *script =3D container_of(tool, struct perf_script, too= l); struct perf_session *session =3D script->session; - struct evsel *evsel =3D evlist__id2evsel(session->evlist, sample->id); + struct evsel *evsel =3D sample->evsel; struct thread *thread =3D NULL; =20 + if (!evsel) + evsel =3D evlist__id2evsel(session->evlist, sample->id); + if (evsel && !evsel->core.attr.sample_id_all) { sample->cpu =3D 0; sample->time =3D timestamp; diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/p= erf/util/scripting-engines/trace-event-perl.c index af0d514b2397..7a18ea4b7d50 100644 --- a/tools/perf/util/scripting-engines/trace-event-perl.c +++ b/tools/perf/util/scripting-engines/trace-event-perl.c @@ -257,7 +257,6 @@ static void define_event_symbols(struct tep_event *even= t, } =20 static SV *perl_process_callchain(struct perf_sample *sample, - struct evsel *evsel __maybe_unused, struct addr_location *al) { struct callchain_cursor *cursor; @@ -340,7 +339,6 @@ static SV *perl_process_callchain(struct perf_sample *s= ample, } =20 static void perl_process_tracepoint(struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al) { struct thread *thread =3D al->thread; @@ -355,6 +353,7 @@ static void perl_process_tracepoint(struct perf_sample = *sample, unsigned long long nsecs =3D sample->time; const char *comm =3D thread__comm_str(thread); DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); + struct evsel *evsel =3D sample->evsel; =20 bitmap_zero(events_defined, TRACE_EVENT_TYPE_MAX); dSP; @@ -389,7 +388,7 @@ static void perl_process_tracepoint(struct perf_sample = *sample, XPUSHs(sv_2mortal(newSVuv(ns))); XPUSHs(sv_2mortal(newSViv(pid))); XPUSHs(sv_2mortal(newSVpv(comm, 0))); - XPUSHs(sv_2mortal(perl_process_callchain(sample, evsel, al))); + XPUSHs(sv_2mortal(perl_process_callchain(sample, al))); =20 /* common fields other than pid can be accessed via xsub fns */ =20 @@ -426,7 +425,7 @@ static void perl_process_tracepoint(struct perf_sample = *sample, XPUSHs(sv_2mortal(newSVuv(nsecs))); XPUSHs(sv_2mortal(newSViv(pid))); XPUSHs(sv_2mortal(newSVpv(comm, 0))); - XPUSHs(sv_2mortal(perl_process_callchain(sample, evsel, al))); + XPUSHs(sv_2mortal(perl_process_callchain(sample, al))); call_pv("main::trace_unhandled", G_SCALAR); } SPAGAIN; @@ -435,9 +434,7 @@ static void perl_process_tracepoint(struct perf_sample = *sample, LEAVE; } =20 -static void perl_process_event_generic(union perf_event *event, - struct perf_sample *sample, - struct evsel *evsel) +static void perl_process_event_generic(union perf_event *event, struct per= f_sample *sample) { dSP; =20 @@ -448,7 +445,8 @@ static void perl_process_event_generic(union perf_event= *event, SAVETMPS; PUSHMARK(SP); XPUSHs(sv_2mortal(newSVpvn((const char *)event, event->header.size))); - XPUSHs(sv_2mortal(newSVpvn((const char *)&evsel->core.attr, sizeof(evsel-= >core.attr)))); + XPUSHs(sv_2mortal(newSVpvn((const char *)&sample->evsel->core.attr, + sizeof(sample->evsel->core.attr)))); XPUSHs(sv_2mortal(newSVpvn((const char *)sample, sizeof(*sample)))); XPUSHs(sv_2mortal(newSVpvn((const char *)sample->raw_data, sample->raw_si= ze))); PUTBACK; @@ -461,13 +459,12 @@ static void perl_process_event_generic(union perf_eve= nt *event, =20 static void perl_process_event(union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al) { - scripting_context__update(scripting_context, event, sample, evsel, al, ad= dr_al); - perl_process_tracepoint(sample, evsel, al); - perl_process_event_generic(event, sample, evsel); + scripting_context__update(scripting_context, event, sample, al, addr_al); + perl_process_tracepoint(sample, al); + perl_process_event_generic(event, sample); } =20 static void run_start_sub(void) diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools= /perf/util/scripting-engines/trace-event-python.c index 9e1069ec0578..8edd2f36e5a9 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -390,7 +390,6 @@ static unsigned long get_offset(struct symbol *sym, str= uct addr_location *al) } =20 static PyObject *python_process_callchain(struct perf_sample *sample, - struct evsel *evsel __maybe_unused, struct addr_location *al) { PyObject *pylist; @@ -651,11 +650,9 @@ static PyObject *get_sample_value_as_tuple(struct samp= le_read_value *value, return t; } =20 -static void set_sample_read_in_dict(PyObject *dict_sample, - struct perf_sample *sample, - struct evsel *evsel) +static void set_sample_read_in_dict(PyObject *dict_sample, struct perf_sam= ple *sample) { - u64 read_format =3D evsel->core.attr.read_format; + u64 read_format =3D sample->evsel->core.attr.read_format; PyObject *values; unsigned int i; =20 @@ -741,11 +738,10 @@ static void regs_map(struct regs_dump *regs, uint64_t= mask, uint16_t e_machine, =20 static int set_regs_in_dict(PyObject *dict, struct perf_sample *sample, - struct evsel *evsel, uint16_t e_machine, uint32_t e_flags) { - struct perf_event_attr *attr =3D &evsel->core.attr; + struct perf_event_attr *attr =3D &sample->evsel->core.attr; =20 int size =3D (__sw_hweight64(attr->sample_regs_intr) * MAX_REG_SIZE) + 1; char *bf =3D NULL; @@ -831,7 +827,6 @@ static void python_process_sample_flags(struct perf_sam= ple *sample, PyObject *di } =20 static PyObject *get_perf_sample_dict(struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al, PyObject *callchain) @@ -839,6 +834,7 @@ static PyObject *get_perf_sample_dict(struct perf_sampl= e *sample, PyObject *dict, *dict_sample, *brstack, *brstacksym; uint16_t e_machine =3D EM_HOST; uint32_t e_flags =3D EF_HOST; + struct evsel *evsel =3D sample->evsel; =20 dict =3D PyDict_New(); if (!dict) @@ -871,7 +867,7 @@ static PyObject *get_perf_sample_dict(struct perf_sampl= e *sample, PyLong_FromUnsignedLongLong(sample->phys_addr)); pydict_set_item_string_decref(dict_sample, "addr", PyLong_FromUnsignedLongLong(sample->addr)); - set_sample_read_in_dict(dict_sample, sample, evsel); + set_sample_read_in_dict(dict_sample, sample); pydict_set_item_string_decref(dict_sample, "weight", PyLong_FromUnsignedLongLong(sample->weight)); pydict_set_item_string_decref(dict_sample, "ins_lat", @@ -928,7 +924,7 @@ static PyObject *get_perf_sample_dict(struct perf_sampl= e *sample, if (al->thread) e_machine =3D thread__e_machine(al->thread, /*machine=3D*/NULL, &e_flags= ); =20 - if (set_regs_in_dict(dict, sample, evsel, e_machine, e_flags)) + if (set_regs_in_dict(dict, sample, e_machine, e_flags)) Py_FatalError("Failed to setting regs in dict"); =20 return dict; @@ -936,7 +932,6 @@ static PyObject *get_perf_sample_dict(struct perf_sampl= e *sample, =20 #ifdef HAVE_LIBTRACEEVENT static void python_process_tracepoint(struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al) { @@ -954,6 +949,7 @@ static void python_process_tracepoint(struct perf_sampl= e *sample, const char *comm =3D thread__comm_str(al->thread); const char *default_handler_name =3D "trace_unhandled"; DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); + struct evsel *evsel =3D sample->evsel; =20 bitmap_zero(events_defined, TRACE_EVENT_TYPE_MAX); =20 @@ -995,7 +991,7 @@ static void python_process_tracepoint(struct perf_sampl= e *sample, PyTuple_SetItem(t, n++, context); =20 /* ip unwinding */ - callchain =3D python_process_callchain(sample, evsel, al); + callchain =3D python_process_callchain(sample, al); /* Need an additional reference for the perf_sample dict */ Py_INCREF(callchain); =20 @@ -1051,7 +1047,7 @@ static void python_process_tracepoint(struct perf_sam= ple *sample, PyTuple_SetItem(t, n++, dict); =20 if (get_argument_count(handler) =3D=3D (int) n + 1) { - all_entries_dict =3D get_perf_sample_dict(sample, evsel, al, addr_al, + all_entries_dict =3D get_perf_sample_dict(sample, al, addr_al, callchain); PyTuple_SetItem(t, n++, all_entries_dict); } else { @@ -1070,7 +1066,6 @@ static void python_process_tracepoint(struct perf_sam= ple *sample, } #else static void python_process_tracepoint(struct perf_sample *sample __maybe_u= nused, - struct evsel *evsel __maybe_unused, struct addr_location *al __maybe_unused, struct addr_location *addr_al __maybe_unused) { @@ -1465,7 +1460,6 @@ static int python_process_call_return(struct call_ret= urn *cr, u64 *parent_db_id, } =20 static void python_process_general_event(struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al) { @@ -1488,8 +1482,8 @@ static void python_process_general_event(struct perf_= sample *sample, Py_FatalError("couldn't create Python tuple"); =20 /* ip unwinding */ - callchain =3D python_process_callchain(sample, evsel, al); - dict =3D get_perf_sample_dict(sample, evsel, al, addr_al, callchain); + callchain =3D python_process_callchain(sample, al); + dict =3D get_perf_sample_dict(sample, al, addr_al, callchain); =20 PyTuple_SetItem(t, n++, dict); if (_PyTuple_Resize(&t, n) =3D=3D -1) @@ -1502,24 +1496,23 @@ static void python_process_general_event(struct per= f_sample *sample, =20 static void python_process_event(union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al) { struct tables *tables =3D &tables_global; =20 - scripting_context__update(scripting_context, event, sample, evsel, al, ad= dr_al); + scripting_context__update(scripting_context, event, sample, al, addr_al); =20 - switch (evsel->core.attr.type) { + switch (sample->evsel->core.attr.type) { case PERF_TYPE_TRACEPOINT: - python_process_tracepoint(sample, evsel, al, addr_al); + python_process_tracepoint(sample, al, addr_al); break; /* Reserve for future process_hw/sw/raw APIs */ default: if (tables->db_export_mode) db_export__sample(&tables->dbe, event, sample, al, addr_al); else - python_process_general_event(sample, evsel, al, addr_al); + python_process_general_event(sample, al, addr_al); } } =20 diff --git a/tools/perf/util/trace-event-scripting.c b/tools/perf/util/trac= e-event-scripting.c index fa850e44cb46..dc584ac316a3 100644 --- a/tools/perf/util/trace-event-scripting.c +++ b/tools/perf/util/trace-event-scripting.c @@ -103,12 +103,11 @@ int script_spec__for_each(int (*cb)(struct scripting_= ops *ops, const char *spec) void scripting_context__update(struct scripting_context *c, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al) { #ifdef HAVE_LIBTRACEEVENT - const struct tep_event *tp_format =3D evsel__tp_format(evsel); + const struct tep_event *tp_format =3D evsel__tp_format(sample->evsel); =20 c->pevent =3D tp_format ? tp_format->tep : NULL; #else @@ -117,7 +116,6 @@ void scripting_context__update(struct scripting_context= *c, c->event_data =3D sample->raw_data; c->event =3D event; c->sample =3D sample; - c->evsel =3D evsel; c->al =3D al; c->addr_al =3D addr_al; } @@ -134,7 +132,6 @@ static int stop_script_unsupported(void) =20 static void process_event_unsupported(union perf_event *event __maybe_unus= ed, struct perf_sample *sample __maybe_unused, - struct evsel *evsel __maybe_unused, struct addr_location *al __maybe_unused, struct addr_location *addr_al __maybe_unused) { diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h index 914d9b69ed62..720121c74f1d 100644 --- a/tools/perf/util/trace-event.h +++ b/tools/perf/util/trace-event.h @@ -94,7 +94,6 @@ struct scripting_ops { int (*stop_script) (void); void (*process_event) (union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al); void (*process_switch)(union perf_event *event, @@ -124,7 +123,6 @@ struct scripting_context { void *event_data; union perf_event *event; struct perf_sample *sample; - struct evsel *evsel; struct addr_location *al; struct addr_location *addr_al; struct perf_session *session; @@ -133,7 +131,6 @@ struct scripting_context { void scripting_context__update(struct scripting_context *scripting_context, union perf_event *event, struct perf_sample *sample, - struct evsel *evsel, struct addr_location *al, struct addr_location *addr_al); =20 --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.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 9B5CA3845D0 for ; Mon, 13 Apr 2026 04:12:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053572; cv=none; b=TbimeUCxaJxyJrS8pKYXNWkVcd1j07KveRG5tA82IE2ct9y5sYcQsRhnLYIjYLEVvfuMAtek26eeive8z8WgigbwAZLbn/CMg7GCpsHTY3DjekNRd1Ty+PXBsnPJqMbjV2sMpWKkJIQvUhWYmJEwXenFPDJXcsRKhp8iYSedF24= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053572; c=relaxed/simple; bh=p3zEoq/bmQlpgAQt3/UAgTTaA4JyI4UO/QfGKpe/qI0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kDDot9Ynn8WO/KK8q9cZ3mk8Bvwh0DPq9DdRB23tUI4t15q0V+RuMcjh7TVL0PRGnuSUyl90kbPHaQIYih0wqcBvloM81Vy7EhMo0omaGDXI3MseKgNF/6sUVxkda7K3qZqLRwIh36lT6Eu5vzZ2tvnTeLyT0ZOx7RoohuG27yM= 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=f8HZCABS; arc=none smtp.client-ip=74.125.82.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="f8HZCABS" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c283a1212so11130399c88.1 for ; Sun, 12 Apr 2026 21:12:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053565; x=1776658365; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=f8QqzSuQNDbhCu1T3qPBkA3LFLyljNgjUWQeDCGZhEI=; b=f8HZCABSs21MtK2xErqxmFrCAI+ibOKwuAdVTrwRPGvozX32oVq/0uiv60bIeQVrHL 0uiecEklIDb9hRRVXhM5DfrOTc+Ck6rY4G8/zEetaE78zVcql0xRyjoRlsa4VVBzoC1y 1an7I+mBVUgbA/B540Pz0UcvZp8Hz14LSEWDr4OileIodhW/2I4Wn0dLpYeo18k6BbTe UZHA8K6iCmdKucnOcgPv/JKY6jwGYwJLLKrrOnU1Fhr46ZkosLDV+uvpKl672ZKi4gli nmjllAyXWqUMMd9OH4uismEHTb9fZJZRFywsXkUaU4noSmmP93qIhV8eR+ZkxGBuwq8L T1sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053565; x=1776658365; h=cc: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=f8QqzSuQNDbhCu1T3qPBkA3LFLyljNgjUWQeDCGZhEI=; b=RRJfG9JuBC7ILd49NFNywmC+amlK+uzrbUGJCOQABz8/nZMOg1RLudzlncwd3q4iH4 EJimxnYUq4zCKsvUacd2yS5NvE0XdHLAelBsDZZ+MU9QXAonWCEcGdkfNbjm4HbbaZar JRX0K79wET9NWmcOmAbxX6WBlwOkrE8bNdNQ27OoeKfys4XMrfk8iAc0aSszYeQAiH7H 1nVrhTSX4BiPnJ2sa28EI4mgCsAyB2wgyw7bmPNWYkRZ6RUN/wqt7+5IJD9lduhmxcLr j51X2uCg5M4H0w+AlORzQHT9XE3G4hR1FHw0rsUTp9O/hqnVxkWXpRnMQ8ZZb6LI/jWb 2+Lg== X-Forwarded-Encrypted: i=1; AJvYcCVJQ7fnaMD8DoZzMgZH0MDg4fpt2QxVA10RBbB5q1/ef+vPy5+F78xPUUHZQSPngR8rQgpPWuwwSvfnhVM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0nlQUwc+OrIyLR94ygqvxn6AJn5uYeiywO4LDnKXBYOMOJRsg NcX5rkgQaklCJBioDJZXUNr5sVdytbBFYC6ftZylMclaFz3KcCSbMUKCwHhZA6cx6vMx64aAopS 5xVjYDsLr3w== X-Received: from dlag15.prod.google.com ([2002:a05:701b:250f:b0:12a:c3c1:4ace]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:ba3:b0:128:cbc7:4c28 with SMTP id a92af1059eb24-12c34f1c63dmr6746512c88.35.1776053565110; Sun, 12 Apr 2026 21:12:45 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:31 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-22-irogers@google.com> Subject: [PATCH v12 21/33] perf s390-sample-raw: Don't pass evsel or its PMU with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sample contains the evsel and its PMU so it is unnecessary to pass the evsel as well. Signed-off-by: Ian Rogers --- tools/perf/util/s390-sample-raw.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/s390-sample-raw.c b/tools/perf/util/s390-sampl= e-raw.c index c6ae0ae8d86a..52bbca5c56c8 100644 --- a/tools/perf/util/s390-sample-raw.c +++ b/tools/perf/util/s390-sample-raw.c @@ -222,8 +222,9 @@ static char *get_counter_name(int set, int nr, struct p= erf_pmu *pmu) return result; } =20 -static void s390_cpumcfdg_dump(struct perf_pmu *pmu, struct perf_sample *s= ample) +static void s390_cpumcfdg_dump(struct perf_sample *sample) { + struct perf_pmu *pmu =3D sample->evsel->pmu; size_t i, len =3D sample->raw_size, offset =3D 0; unsigned char *buf =3D sample->raw_data; const char *color =3D PERF_COLOR_BLUE; @@ -284,8 +285,9 @@ static bool s390_pai_all_test(struct perf_sample *sampl= e) return true; } =20 -static void s390_pai_all_dump(struct evsel *evsel, struct perf_sample *sam= ple) +static void s390_pai_all_dump(struct perf_sample *sample) { + struct evsel *evsel =3D sample->evsel; size_t len =3D sample->raw_size, offset =3D 0; unsigned char *p =3D sample->raw_data; const char *color =3D PERF_COLOR_BLUE; @@ -332,31 +334,32 @@ void evlist__s390_sample_raw(struct evlist *evlist, u= nion perf_event *event, struct perf_sample *sample) { const char *pai_name; - struct evsel *evsel; =20 if (event->header.type !=3D PERF_RECORD_SAMPLE) return; =20 - evsel =3D evlist__event2evsel(evlist, event); - if (!evsel) - return; + if (!sample->evsel) { + sample->evsel =3D evlist__event2evsel(evlist, event); + if (!sample->evsel) + return; + } =20 /* Check for raw data in sample */ if (!sample->raw_size || !sample->raw_data) return; =20 /* Display raw data on screen */ - if (evsel->core.attr.config =3D=3D PERF_EVENT_CPUM_CF_DIAG) { - if (!evsel->pmu) - evsel->pmu =3D perf_pmus__find("cpum_cf"); + if (sample->evsel->core.attr.config =3D=3D PERF_EVENT_CPUM_CF_DIAG) { + if (!sample->evsel->pmu) + sample->evsel->pmu =3D perf_pmus__find("cpum_cf"); if (!s390_cpumcfdg_testctr(sample)) pr_err("Invalid counter set data encountered\n"); else - s390_cpumcfdg_dump(evsel->pmu, sample); + s390_cpumcfdg_dump(sample); return; } =20 - switch (evsel->core.attr.config) { + switch (sample->evsel->core.attr.config) { case PERF_EVENT_PAI_NNPA_ALL: pai_name =3D "NNPA_ALL"; break; @@ -370,8 +373,8 @@ void evlist__s390_sample_raw(struct evlist *evlist, uni= on perf_event *event, if (!s390_pai_all_test(sample)) { pr_err("Invalid %s raw data encountered\n", pai_name); } else { - if (!evsel->pmu) - evsel->pmu =3D perf_pmus__find_by_type(evsel->core.attr.type); - s390_pai_all_dump(evsel, sample); + if (!sample->evsel->pmu) + sample->evsel->pmu =3D perf_pmus__find_by_type(sample->evsel->core.attr= .type); + s390_pai_all_dump(sample); } } --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 A4C973806D3 for ; Mon, 13 Apr 2026 04:12:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053574; cv=none; b=V+nmEDK3JjeIn5JadKIWaeCc+gTsEvrdLKosQaHuvVBa7lZQzQgMHOJGqbwuGkpnS7hxsd498zJmFEAgZl3qCQvFcMDZRaLo1ORzMMiC/ndP8HJwKWffXpBopIcRCgqdChtf8TAs/igK0RDvNZuwPBvH1fFcVMJTa0L19Cuk/E0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053574; c=relaxed/simple; bh=X3d+bv/RmpzHuDPVyAZXrbt4fTvCbWhYts+FzU9xRfA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kxfyrpBA9J+aDKIA+b5je8kXLWVoNbgDTUrdyuHDpEGHOVUd/JB+kGoJSGcTmwBp9bI5cfrfz6bcgSWU3Ag5c8jrsypfSXy7EgP6GFn+IDuwMHPk1IKkmJVZXda4jkSAas3T7IHB0oekQXAg1e30RqsZQjm6Qb3HDhn/xRER0YE= 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=VXsKwcme; arc=none smtp.client-ip=74.125.82.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="VXsKwcme" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2d93379001eso1541862eec.1 for ; Sun, 12 Apr 2026 21:12:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053567; x=1776658367; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=fyJqf5DqEvyRM5sRLSS8mIeWVbUiTjGftiY+F4po8Hs=; b=VXsKwcme8XUHh78tw2vU8/AvVpk95hwbVkI6vXqutjlNoqlHMGGcFlxJi/FrM0y5l0 0sy+ucHO57Tpj4XZ+SJpQLiw5SCNy6Y8RT4d63fOgAhbyqfMUqu6bYksqADYCyQV7lb3 W4jx6cs+JrvBXmbRr62GlbrUiDOg5rARETn44gc+v87VvL5lXLiwhNP16zZLozflK/S8 f4bW3aM52eK2uTD4ME+z/qBmE79h8IS1/6xKtM23M5s/Ihqac4I0syA8szwq5NTeqDVz QjHoSYAceEgONj8bAhQQUzuEegSk7zNT9Hi0pZUqgN841ZI1g3ujaSTmJlKlXuzBz8OQ bUqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053567; x=1776658367; h=cc: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=fyJqf5DqEvyRM5sRLSS8mIeWVbUiTjGftiY+F4po8Hs=; b=bJSEPyWhAqXDcSvUjwkaIZXzhyu4/koJGYr9PNhPBBXwqnWXtYSI9bHKfLCqe/KXjt ZRXOIKXSqerzTqAKDmW9MlXdElm1Y0X/2rFWDnqEsMeFns94Fa8TChnapoXepsgGKDhq aiHn1ed0FDNS/zicb+vYuB3GzJ+NRdGbrWqLYsYtauUZBeeuRLfuPImvSd5D4Znvd0Ag +nJ4fOuhzKJFPYIn6A7kf3S7zyjk7D/DhU6q1sHUVXkDDHUUu6VC6tP/fGGti0m68fGq AwZVjZNi7V8dI6T2jKd6WwQqAsXLzl3M554WuLdv4R6/Dvpc6ER5j7jbcyWyGHaDNQxr tQ4A== X-Forwarded-Encrypted: i=1; AFNElJ8Fzet26l3kXJcu4qXcIEY7tZIyQQSJs2YQD/mX5L1OksPT7t02rA9gW4GXR/Bgc1JMGvHZzujKuorJiAA=@vger.kernel.org X-Gm-Message-State: AOJu0Yza4FTrqztcTrHDhrkwjjwICGM55GYMZBqlwfvyiLj4+eN2vjkv Auju5scIrYfOnUpQkEytinFnSf6iRoLzKxlgojt8uHgm31omK0GlhtaX85eGsObBySVdMjV0qih vVnCvc3Azfg== X-Received: from dycoz1.prod.google.com ([2002:a05:7301:fc81:b0:2d9:1564:c80c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:3212:b0:2d9:94b4:a1c7 with SMTP id 5a478bee46e88-2d994b4b427mr674902eec.15.1776053567147; Sun, 12 Apr 2026 21:12:47 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:32 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-23-irogers@google.com> Subject: [PATCH v12 22/33] perf evsel: Don't pass evsel with sample From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Arrange for the sample to contain the evsel and so it is unnecessary to pass the evsel as well. This is done for uniformity, although parsing of the sample is arguably a special case. Add bound checks in perf_evsel__parse_id_sample by switching to using an index and checking it doesn't become negative. Signed-off-by: Ian Rogers --- tools/perf/util/evsel.c | 61 +++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ee30e15af054..bb48568b8101 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -3003,52 +3003,62 @@ int evsel__open_per_thread(struct evsel *evsel, str= uct perf_thread_map *threads) return ret; } =20 -static int perf_evsel__parse_id_sample(const struct evsel *evsel, - const union perf_event *event, +static int perf_evsel__parse_id_sample(const union perf_event *event, struct perf_sample *sample) { + const struct evsel *evsel =3D sample->evsel; u64 type =3D evsel->core.attr.sample_type; const __u64 *array =3D event->sample.array; bool swapped =3D evsel->needs_swap; union u64_swap u; - - array +=3D ((event->header.size - - sizeof(event->header)) / sizeof(u64)) - 1; + int i =3D ((event->header.size - sizeof(event->header)) / sizeof(u64)) - = 1; =20 if (type & PERF_SAMPLE_IDENTIFIER) { - sample->id =3D *array; - array--; + if (i < 0) + return -EFAULT; + + sample->id =3D array[i--]; } =20 if (type & PERF_SAMPLE_CPU) { - u.val64 =3D *array; + if (i < 0) + return -EFAULT; + + u.val64 =3D array[i--]; if (swapped) { /* undo swap of u64, then swap on individual u32s */ u.val64 =3D bswap_64(u.val64); u.val32[0] =3D bswap_32(u.val32[0]); } - sample->cpu =3D u.val32[0]; - array--; } =20 if (type & PERF_SAMPLE_STREAM_ID) { - sample->stream_id =3D *array; - array--; + if (i < 0) + return -EFAULT; + + sample->stream_id =3D array[i--]; } =20 if (type & PERF_SAMPLE_ID) { - sample->id =3D *array; - array--; + if (i < 0) + return -EFAULT; + + sample->id =3D array[i--]; } =20 if (type & PERF_SAMPLE_TIME) { - sample->time =3D *array; - array--; + if (i < 0) + return -EFAULT; + + sample->time =3D array[i--]; } =20 if (type & PERF_SAMPLE_TID) { - u.val64 =3D *array; + if (i < 0) + return -EFAULT; + + u.val64 =3D array[i--]; if (swapped) { /* undo swap of u64, then swap on individual u32s */ u.val64 =3D bswap_64(u.val64); @@ -3058,7 +3068,6 @@ static int perf_evsel__parse_id_sample(const struct e= vsel *evsel, =20 sample->pid =3D u.val32[0]; sample->tid =3D u.val32[1]; - array--; } =20 return 0; @@ -3244,15 +3253,18 @@ int evsel__parse_sample(struct evsel *evsel, union = perf_event *event, =20 data->deferred_cookie =3D event->callchain_deferred.cookie; =20 - if (evsel->core.attr.sample_id_all) - perf_evsel__parse_id_sample(evsel, event, data); - + if (evsel->core.attr.sample_id_all) { + if (perf_evsel__parse_id_sample(event, data)) + goto out_efault; + } return 0; } =20 if (event->header.type !=3D PERF_RECORD_SAMPLE) { - if (evsel->core.attr.sample_id_all) - perf_evsel__parse_id_sample(evsel, event, data); + if (evsel->core.attr.sample_id_all) { + if (perf_evsel__parse_id_sample(event, data)) + goto out_efault; + } return 0; } =20 @@ -3614,12 +3626,13 @@ int evsel__parse_sample_timestamp(struct evsel *evs= el, union perf_event *event, =20 if (event->header.type !=3D PERF_RECORD_SAMPLE) { struct perf_sample data =3D { + .evsel =3D evsel, .time =3D -1ULL, }; =20 if (!evsel->core.attr.sample_id_all) return -1; - if (perf_evsel__parse_id_sample(evsel, event, &data)) + if (perf_evsel__parse_id_sample(event, &data)) return -1; =20 *timestamp =3D data.time; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 4EEEB386C09 for ; Mon, 13 Apr 2026 04:12:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053578; cv=none; b=JbaNZ7VOk+DyjqIAhDKzSJg6hT7B54OVfc/LSRUFZ4HzCrFTYlyhl1OS1dX3vvu9kzoWbIpaSq3OjtP7S70ooFiwSBQPVmUbuJuy5Fll3inPkMVumYXz4+Yh8JM5pSchoDdPImrecpTJa/IJCpwGoPfuOx3Ry/XsCZDXfSNT3cc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053578; c=relaxed/simple; bh=/TJHliXZNcJc0WMzmCn1uj85dssMOv30WvsxQWbGYts=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tXTI/r/kxkN9fKhk8AmeqpVoQPF6ievWn6buER2j7H+Kvdvk1lymWDfKZ4yTYeZuFUfM/Kmh6AeQf7sWTCZYNQveaSYJI165geAiIzkftKONFhJ6MDNfSb8Vw6pDCE51yQvcrYGLPjRHYXiTYeSLUxHahkg2WtKWXj3OGp98SxQ= 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=Djpz9qJh; arc=none smtp.client-ip=74.125.82.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="Djpz9qJh" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2bda35eab74so3376895eec.0 for ; Sun, 12 Apr 2026 21:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053570; x=1776658370; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=1ky2umPzRcxH/XBrATEo/kk5mztVaDExoaZNmlerHag=; b=Djpz9qJhHK3ZFmrHN9s7ovDPajf8WCfrT2AsKJ9vJSjtU3asvqLI8Li2YYWKBZ004e w8Ut7J40+4nyspZ3qxUuGPV4tFHT0W2yNj/TTLNUDnk43L++jXVj2phgYNl/CgoMPdE1 LFH2I7aKrBTzofYth9igT/qyOSFXFcqa6NyRNlo4Wmwi9tzjxTsmtFXHVJjT5qjEPkk+ oDQEcqzD4iPmjXoWX9KN2XZaDG/YYTFwNkNbV00TJlx8PgcgSNx1nt+0/pPjbs25Iq+9 QfhbrXY4CwjKu1u0HL/crvxS72eQ8uhMI+sJ+/YvOHAIsAphQBkylO1CHSFS4TXu2ewM OVSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053570; x=1776658370; h=cc: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=1ky2umPzRcxH/XBrATEo/kk5mztVaDExoaZNmlerHag=; b=FNXblxg+klXDwdBd4xtQbant/lHHw4crgayAkW70uhfeeGGiGGYBM9dDrg5rHwyZUx B/tKV6l6J6ehY1vpr1nZ/RyFDS5VvUL4mOJOpQXBy4OyAixY8rIx2kBlQq6j7vatt56b YaJuTzMWOjSwFRmaq0zo6Fk2773jYyYUQQz2SpKZ7SDaEdPs9MeOX0vTj9CmDnyXt4dE hZ0Y4nHLCoPWjfi1chq/dySA1Re9dihNlk8MByHyM0i3zKnWc1bRHVQJqTqA6XVM/SL1 CBKM1nG4bNUk1a8Vg7bjq+By28A3p1OVX2VyKdo9f2t1AtFo+6OW9+uJysQl2tcQs59i 7oAw== X-Forwarded-Encrypted: i=1; AFNElJ9r2TnZA/GcLT07c8OkeKVp0yJtoFJfyYtbGz87uBm9j8kCqowZxuWSF3GVHfLX/BzT1bXCwzrgPiqWyxI=@vger.kernel.org X-Gm-Message-State: AOJu0YzipdtztrAORHESWCkExlEOUqQ1rPKS2M9CZV8V9YXWjZRS+2TZ r57yfv6C3a7u1V2h1eZEqh3JwhrzMub/TFdQjYnujWeCc3ET0ckgybLbL8a71JTR/Gd3UahQTog qmOsiRORhAA== X-Received: from dybml11.prod.google.com ([2002:a05:7301:150b:b0:2d5:b23e:f5cd]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:cb0e:b0:2be:88f2:3c98 with SMTP id 5a478bee46e88-2d599799551mr4845574eec.1.1776053569593; Sun, 12 Apr 2026 21:12:49 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:33 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-24-irogers@google.com> Subject: [PATCH v12 23/33] perf lock: Constify trace_lock_handler variables From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Structs don't change and so constify. Signed-off-by: Ian Rogers --- tools/perf/builtin-lock.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index b6533483ba64..89a40d385b27 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -1179,7 +1179,7 @@ static int report_lock_contention_end_event(struct pe= rf_sample *sample) =20 /* lock oriented handlers */ /* TODO: handlers for CPU oriented, thread oriented */ -static struct trace_lock_handler report_lock_ops =3D { +static const struct trace_lock_handler report_lock_ops =3D { .acquire_event =3D report_lock_acquire_event, .acquired_event =3D report_lock_acquired_event, .contended_event =3D report_lock_contended_event, @@ -1188,13 +1188,13 @@ static struct trace_lock_handler report_lock_ops = =3D { .contention_end_event =3D report_lock_contention_end_event, }; =20 -static struct trace_lock_handler contention_lock_ops =3D { +static const struct trace_lock_handler contention_lock_ops =3D { .contention_begin_event =3D report_lock_contention_begin_event, .contention_end_event =3D report_lock_contention_end_event, }; =20 =20 -static struct trace_lock_handler *trace_handler; +static const struct trace_lock_handler *trace_handler; =20 static int evsel__process_lock_acquire(struct perf_sample *sample) { --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 9E55A37CD36 for ; Mon, 13 Apr 2026 04:12:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053578; cv=none; b=kU8WHPcvBHst+QiJLHcEq2HzWVq99J7+IsxCtNilOC6LGqg6ZGSBN9t3Tg1g0mv3SGor32uYIuKmtt7hDrgmYfdc9L6B6XJsDvV5T1YZ+0Fl95JPsoLl3ivVNK+nYGY8qnWHKlCa65etfSW0YuvlZ8UqgI2wlAks3wo5jRHa08A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053578; c=relaxed/simple; bh=+R1TjR7D/n+SVy+MvcOVgKHmNVERa5SqQsXwquU4Gqc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KxFMH3qXZ1wHahvcXIOrxtiIDIhSGEbcZfakOSbYW+/fsnF3dQFknpumTroU446vw3hzKpe6H0UJZRrqOuy2dbqe8lMvqDv9P97EqvSYnMjJw00WZRmHbrMlYl0sDOyt4ymYqEtPUGAswa4f55QiRbqk0TNJRjmpGxvJTH38ibM= 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=F66PbyzS; arc=none smtp.client-ip=74.125.82.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="F66PbyzS" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2d5de9deba9so4583396eec.0 for ; Sun, 12 Apr 2026 21:12:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053572; x=1776658372; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=I6cwCi85nL+UMzH5dHBjsjgh7zFGt951FXHMXIOHqdc=; b=F66PbyzSBcBOto9yA7GjdkP0zKpD1B2GAutHydknyV94UQRiWOAA1s6d2xgEUVDuxP 01bNFvxR2Za0KTJjZHF2aGfUQO3TDeYzshn/nUQ51e/XSoV9HR3eLVSZf4bkC8wcEq6N M74+iwPtjo9QMtq0ZPm4r2AUPqGYMH9XCouDvwtIIfCHA3bHPqV4aQ4uPpLdRR+um3ec QctDbV1cblG3SddfvJkadDhDXU2qQEjzcBsTPOvLLSJMnaZNo2QlTbAUXmwt0mBFycIj 8/x7nDAbGvWnT4kRVRWNa20b3k6BJD/jaD0NIby599PcqVNWoZhYzBmaE+IiXWp9/HNc eyoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053572; x=1776658372; h=cc: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=I6cwCi85nL+UMzH5dHBjsjgh7zFGt951FXHMXIOHqdc=; b=m46f2DbD5hCGb9vjk9KPT/O8ZjcFb+ZYQ3/c6C180tLXaHD9mNgX6ejCp9ZPtf7LHo Zr1mOsG9+J/fmO+2XDfufusAJWMkuc/LObnwuKkGHkPmyuGQgwey66fI/V95Cr0jcIUQ 2kJUDY0wcocZr6gkLTzY6VTOsHpOFaO2QPBovAU1qtehp8cky7DHeVpRRdPErbeTj0Qh ca6iZ5BCuRVGLoUNKW78UZIg+eXi65LinIQh2P21DPMUp2D8bCCYz0PXpsnThv395zOf 8hL6DV8ffU1FPCiDNCyvVimKOSkR3LBdqewKLUcoQoGgqWoW0yknRwrT+CgHqt3/yf7M xbdg== X-Forwarded-Encrypted: i=1; AJvYcCWnljtc/9j0jfJxstFF4Oq42YdDTzQDfzDA7fwDjDTw5QtMv/U66DxLQHPMqwas4ir2ekozhF54GsXyCBo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9wXPtFewqOWvllGG6MlnXi4PEUG8JKlmj49okoZyQ3VkaSgmb r6UEF8GrczgXk/jNAyhI8R1cEDd1/04uVtIdG/QsDZho3vw88IDXc+sC+7OAUUPpYhEkegWjixS ro/zDXVBekA== X-Received: from dlzz6.prod.google.com ([2002:a05:7022:486:b0:12a:ad8d:be18]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:ec07:b0:128:d4db:4478 with SMTP id a92af1059eb24-12c34efaa0emr6474927c88.24.1776053571712; Sun, 12 Apr 2026 21:12:51 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:34 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-25-irogers@google.com> Subject: [PATCH v12 24/33] perf lock: Avoid segv if event is missing a callchain From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Sashiko recognized a potential segv if a sample is missing a callchain. Return NULL for this case just as a memory allocation failure does. In the verbose pr_debug output describe the error and rather than fail the entire file just skip the event (return 0 rather than -ENOMEM). Signed-off-by: Ian Rogers --- tools/perf/builtin-lock.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index 89a40d385b27..064b3aa4bad7 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c @@ -938,9 +938,16 @@ static u64 *get_callstack(struct perf_sample *sample, = int max_stack) u64 i; int c; =20 + if (!sample->callchain) { + pr_debug("Sample unexpectedly missing callchain\n"); + return NULL; + } + callstack =3D calloc(max_stack, sizeof(*callstack)); - if (callstack =3D=3D NULL) + if (callstack =3D=3D NULL) { + pr_debug("Failed to allocate callstack\n"); return NULL; + } =20 for (i =3D 0, c =3D 0; i < sample->callchain->nr && c < max_stack; i++) { u64 ip =3D sample->callchain->ips[i]; @@ -1059,7 +1066,7 @@ static int report_lock_contention_begin_event(struct = perf_sample *sample) if (needs_callstack()) { u64 *callstack =3D get_callstack(sample, max_stack_depth); if (callstack =3D=3D NULL) - return -ENOMEM; + return 0; =20 if (!match_callstack_filter(machine, callstack, max_stack_depth)) { free(callstack); --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 9690B386427 for ; Mon, 13 Apr 2026 04:12:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053580; cv=none; b=EKPSovInDXVfA1VBau176ZdcDHWloNwb3NYXio4mgh83OrHbNs1hfJNVpnbafS6TpmS8ZIAmy+O8uiXZNevPzhavzjHqZHCAytuncl5WAeRpGB/P8wdP9pqyzbUuFnAtx/OkGm8p05Duv4gynAM/p5ZX2d4VHFLeWU7WF7QJF4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053580; c=relaxed/simple; bh=har6PWz44n64Z/nOCmGTv6uCWfmF5LTdLFTZJWF2aH0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=s2welHqUdtpAN/2vjPAZ4bzU3tScbZgl1t6+HxkGAjhj3f3QaX+eiKKoe5t9MJn2fAFbjLPfq6OTVRTUT900/0BwYv0nC/mjcpjeavE5H7BT5jR8qOyU680C9HMooKlEt6QyoM+pkmaX4IY2wABgDD0aYRD512SkBq+yftSqlBc= 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=FI5r8pAb; arc=none smtp.client-ip=74.125.82.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="FI5r8pAb" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2cc75e79b97so14279228eec.1 for ; Sun, 12 Apr 2026 21:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053574; x=1776658374; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Ua2zhmG8fqK0z5FCerxKbCIotrtAFCVPNoRET7C/8tc=; b=FI5r8pAbkTHPtwavkzl91ibuV4WpfEKEwAVCCgwg44+D7FIjcfffgWBs2VXWR6Djb6 IX1uIUYWpXIEzZ655zTEpYLZbgSVRCfI3wVXacVVtw9HvsNDw6Kr0FHNNKLV91xdgCYd V1HOy6DLZBogxJ6/SBDA+jzgZyrWQfFV9fhYBKHXo/IrgTSKNWDnaIgmt09n7sNHfM7N bGSOjBx7Tty+c7gcgw9T8kHsPAzZySFwX6fjloaIRu9C3Ob/ZphSsXhyWmeDSfZRlpe7 WwdmHzsMFOme600plcVYlHBEv9A0drQiVZecpdv5SbAuN36xyPOvJMvr2JKRtqOWKYhT Qxsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053574; x=1776658374; h=cc: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=Ua2zhmG8fqK0z5FCerxKbCIotrtAFCVPNoRET7C/8tc=; b=kDovfRQ+WyQrbADKl7CmLBKz1+VolKtGW70OP3ntpPLhy744qJMtouYLeXaw8Tk8dy yObXrmWXkQfrB6ieVXrmrIGGCPwcUxxhwPR4/0pcFvpeRMwEF7StWm0K9dTc72noTTPO VOWCVvjRbdbeOTBrxAhSkhzBvJvEM3itEb5csjFjyf458/OfSrC8AaMipyzkox+7hmqd JZe3w9mKj5MDzi4WFfOBPY2h/EXtpmBDbqeN8PXD9vw0hgyjeX2+t3BDJdAqSAm63YZ7 muWRdofP6N80jKsGTEQ0ijcS9Ohd3uMd1itC86ceRoVnd+6ix4h6kVqZjn8taBfRoQa4 3kwg== X-Forwarded-Encrypted: i=1; AFNElJ8Sj76o8MMcwQfmGvLpJh4RtOXvk+Ynjuv/AzfUP1tT4/xjj8Y4M62Hcd6XpQ9C1D1mIYf1les99V57URc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8iOzV6eC+tCOSuYEssL9qxDAL5JCnJwXWU5aphTMI2OVPq1pt pCS4XupGZ78TVKEtvLRlZ5riDSdCX9cR7QVft4PgH3jwDAI8zT8wf4QE9KCn2FGVuKVV312oxos cjJZ9FYp9nw== X-Received: from dyt12.prod.google.com ([2002:a05:693c:808c:b0:2d7:37d5:85cf]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:d70e:b0:2cb:de38:c76d with SMTP id 5a478bee46e88-2d58a39c931mr6594989eec.30.1776053573784; Sun, 12 Apr 2026 21:12:53 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:35 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-26-irogers@google.com> Subject: [PATCH v12 25/33] perf timechart: Fix memory leaks From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix missing free from cat_backtrace, which requires copies of the backtrace being made in functions that save it. Signed-off-by: Ian Rogers --- tools/perf/builtin-timechart.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 1d24d8738519..64f69bd67c6b 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -299,7 +299,7 @@ static void pid_put_sample(struct timechart *tchart, in= t pid, int type, sample->type =3D type; sample->next =3D c->samples; sample->cpu =3D cpu; - sample->backtrace =3D backtrace; + sample->backtrace =3D backtrace ? strdup(backtrace) : NULL; c->samples =3D sample; =20 if (sample->type =3D=3D TYPE_RUNNING && end > start && start > 0) { @@ -433,7 +433,7 @@ static void sched_wakeup(struct timechart *tchart, int = cpu, u64 timestamp, =20 we->time =3D timestamp; we->waker =3D waker; - we->backtrace =3D backtrace; + we->backtrace =3D backtrace ? strdup(backtrace) : NULL; =20 if ((flags & TRACE_FLAG_HARDIRQ) || (flags & TRACE_FLAG_SOFTIRQ)) we->waker =3D -1; @@ -489,9 +489,9 @@ static void sched_switch(struct timechart *tchart, int = cpu, u64 timestamp, } } =20 -static const char *cat_backtrace(union perf_event *event, - struct perf_sample *sample, - struct machine *machine) +static char *cat_backtrace(union perf_event *event, + struct perf_sample *sample, + struct machine *machine) { struct addr_location al; unsigned int i; @@ -544,8 +544,10 @@ static const char *cat_backtrace(union perf_event *eve= nt, * It seems the callchain is corrupted. * Discard all. */ - zfree(&p); - goto exit; + addr_location__exit(&al); + fclose(f); + free(p); + return NULL; } continue; } @@ -577,6 +579,7 @@ static int process_sample_event(const struct perf_tool = *tool, { struct timechart *tchart =3D container_of(tool, struct timechart, tool); struct evsel *evsel =3D sample->evsel; + int ret =3D 0; =20 if (evsel->core.attr.sample_type & PERF_SAMPLE_TIME) { if (!tchart->first_time || tchart->first_time > sample->time) @@ -587,11 +590,13 @@ static int process_sample_event(const struct perf_too= l *tool, =20 if (evsel->handler !=3D NULL) { tracepoint_handler f =3D evsel->handler; + char *backtrace =3D cat_backtrace(event, sample, machine); =20 - return f(tchart, sample, cat_backtrace(event, sample, machine)); + ret =3D f(tchart, sample, backtrace); + free(backtrace); } =20 - return 0; + return ret; } =20 static int --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.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 526CF3876D3 for ; Mon, 13 Apr 2026 04:12:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053582; cv=none; b=Nvay4AyGy3YtI4dG2nhIAyC7/g+XTPWJI5JUV1LFWEBoQ8cdEsRWtuqYPEA4D1ZpRVA9wAAObcvHboawIn3a6c6YbXx0TUnyxAqKOoDFBRFOu578Vei1emH6iZJFBjSWN36r+Y3rNavpSHpY7BQKLEi36SDYyK1z5AJTS5bJZBU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053582; c=relaxed/simple; bh=EIb6tJcKoSqkpkMiIWHT8GXSEcQ8tARRtV2V9HnrXoI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=RTQtl5E0MIf6mFeOoRDo3gw4Q4PNKgAEXvtaT+YRczVglebZelnmUl30OKwZrNxd1GDpj2ps61Ox/bbx83Viiv19k1rMtdYWxSMIuZCbCZFQJJFh55SQgda2H/w75qVH0nuFgHx5BcqgHT1/1PjQuDkbg+lgMi3zuHoeJHPhv2U= 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=TzHxaXvj; arc=none smtp.client-ip=74.125.82.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="TzHxaXvj" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12c20d5d7f4so13590891c88.1 for ; Sun, 12 Apr 2026 21:12:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053577; x=1776658377; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=k0NBhXTshGbMXUhORX+eVN1pO2rFpCDmkzuCKC25Nuc=; b=TzHxaXvjGLb14R9HOTPaprWoItAlRBG2mG+9SiUsxkJJ02jH2CAPLrD7kEcYP4sW37 3nagCRTqQXjUhBtnsD/IVNvqUa/5Y1QtLal6KuI/msHtg8p81ibowRKvy6k1hsaJMqYB Ucpycmx5lxo3RS7+G4P5pzNITLrtBi2CMXcYPuc1WFZkBzb5hs3DNUKb5NUuqv5w1DZG mJrzk1qicRf+rPcDRTSAbwJPMkXOjtD5neetiuHY3BMZF0Avh+6rtNuvyARbyqH3ISE5 dQDaAcbJq04eYMPqfqmIkAIYRIcN2oz15+ohhW5qQl5R7yeB1uGIgDBYaF/cMlEyguKl jtdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053577; x=1776658377; h=cc: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=k0NBhXTshGbMXUhORX+eVN1pO2rFpCDmkzuCKC25Nuc=; b=FsFiwEyktA5Ir2XZ6mxTKgPGL349CWv8JlFeXjUpkakYEe4Xu+XGqECUfdrnWCVUok YgeRhNJ/blQmEk7c/QC9a2Rw75ZdfTY0socV5muRXQiuW+0ATEex+NDCxS94TgvdlauJ gApdsQjJwC30nlZIXzMxA5Mg9LRHItAuWVsBL0z2XPo27zEHo63DIor69iSgLXRBvr5M YzhxpTmsEUpG/7cjWZAI7ooYU11NcB49BDf0MaF5tVfaucdexu4SYXuspLSa3qeGK41w BgyvYGt4ODA9vrgG89OntbRPtpGz1Mq6UPZlTdP4Nde0f2BWsvWv0Qgbez5qPJLtJ+hx 1GVA== X-Forwarded-Encrypted: i=1; AJvYcCXpAojFKn2DsZpUcGy9DwP2lXiD3XWL/gG4NAmkBP6RyBHl1fF5JdYpNojWlQVkdctEmYGORMUkiZ2Aqq0=@vger.kernel.org X-Gm-Message-State: AOJu0Yyv5df+ZUMqssvK2cGNtjJ6q3G6keMmRl9h0x+IlQyzvPTiyZGM gCI/tJkVkM1tGPYZYrwZEoSWqWxQAUnWQmCPJmFY11cGDMsQeg0LxlYpVFlDwNCSRg/8379XPgF zoj89qWXU1w== X-Received: from dlbsn14.prod.google.com ([2002:a05:7022:b90e:b0:128:d185:c6ff]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:f9d:b0:119:e56b:c75c with SMTP id a92af1059eb24-12c34f069edmr6642277c88.33.1776053576289; Sun, 12 Apr 2026 21:12:56 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:36 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-27-irogers@google.com> Subject: [PATCH v12 26/33] perf kmem: Fix memory leaks on error path and when skipping From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add missing frees and thread__put as necessary. An issue detected by Sashiko code review. Signed-off-by: Ian Rogers --- tools/perf/builtin-kmem.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 68a39f56204d..daf2272c7337 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -783,17 +783,21 @@ static int parse_gfp_flags(struct perf_sample *sample= , unsigned int gfp_flags) =20 new =3D realloc(gfps, (nr_gfps + 1) * sizeof(*gfps)); if (new =3D=3D NULL) - return -ENOMEM; + goto err_out; =20 gfps =3D new; - new +=3D nr_gfps++; + new +=3D nr_gfps; =20 new->flags =3D gfp_flags; new->human_readable =3D strdup(str + 10); + if (!new->human_readable) + goto err_out; new->compact_str =3D compact_gfp_flags(str + 10); - if (!new->human_readable || !new->compact_str) - return -ENOMEM; - + if (!new->compact_str) { + free(new->human_readable); + goto err_out; + } + nr_gfps++; qsort(gfps, nr_gfps, sizeof(*gfps), gfpcmp); } =20 @@ -802,6 +806,9 @@ static int parse_gfp_flags(struct perf_sample *sample, = unsigned int gfp_flags) =20 trace_seq_destroy(&seq); return 0; +err_out: + trace_seq_destroy(&seq); + return -ENOMEM; } =20 static int evsel__process_page_alloc_event(struct perf_sample *sample) @@ -971,6 +978,7 @@ static int process_sample_event(const struct perf_tool = *tool __maybe_unused, } =20 if (perf_kmem__skip_sample(sample)) { + thread__put(thread); return 0; } =20 --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 D7149388E71 for ; Mon, 13 Apr 2026 04:13:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053584; cv=none; b=SKwH86wbUHdCAoo0iZ3WsU7tacPfnyTMPFOzmq+IBsij/IRWJI34MyQ1L+6UUwkB+Jhr8rsk7yfz4oyN5BQnVj1iKmHxhO5bOTVLxFX4nzyCzu2NhV2ghDYX243r4kKwIsBEdx776O4AUzEVSwMfvxGqPIwPxLpMpQ/RzA0I8k0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053584; c=relaxed/simple; bh=bwZsKPXpFj0EagILS74wobtw3QdQZQfP3x9LOTF4xSw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OwcBMNLCDLasNpR1htwA8Y5fONxkptl+gEfTyF3r4W1PJhIBXKfddjFttkq0JqKtJ3QxLo6c8UhCNnUb0/rf6XTsCxpMfrJ8DaYGgQRYmkibFvHi8OOz5bizO+ad+0ybTPswusxtXAFOZxPXJiOt97mWtvEJrUGAOsNSv9418Eg= 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=cEGBWILj; arc=none smtp.client-ip=74.125.82.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="cEGBWILj" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2d9da2559aeso568359eec.0 for ; Sun, 12 Apr 2026 21:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053579; x=1776658379; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=KJsfPYVO08tCC/QkaQf/uBEFF+74z2Xz18vy6UCdEwM=; b=cEGBWILj9dchk5VJ4XZgp+XqHMbUtXf/d4QH45NmjuPZM2GljIQ0GW7/M3SRO5QynF UvZNgJkyWNFw+3ga4b1TDAwFqomRWFFm9L3Q+emtNjtbgaXfCJOh3a3M/5C3d7IuXYHB KC6mCFW9mkAEbWn+LfDFdhPfSMH11XmKnwoCfcWidJdxj3y7iZIvoLIlBdyT4GT/7Wcq DMk/TlqBxn9qKcxXVn8D3wq/19NT1AUQNWH7A0d+BIzg9ZsijfWJnxmmwhuF0zqwkrDU ChniBk9BpSkptlBMzihkKQ1eAcTx1Q/kfbMf4k1v1KjFr8+cgGBPNFXnLqjGFylbyMun QFqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053579; x=1776658379; h=cc: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=KJsfPYVO08tCC/QkaQf/uBEFF+74z2Xz18vy6UCdEwM=; b=hqkq80YbCW/0I+KgZL8LVtq7ncDprK2ydlOf5nwuJ8WZYhfhsWD++vVPGgGrBv45y9 xHN+jpU42cPALRAQFoaxhm230rJDJxYSLkRxdKVHH1hBhERsxkTQzbb6UxDDvWg9eM8+ ZHT8b8VD9wwtD0p3fhbvEW2PiCNuYg1m/LdzZlTJrDtqXDogTIkTPXcKsQgIgWgA4gKK Dp5bK36oXn/C0Upr262Yslp+p7jHiZE+xLcFEtK4DVfhYmPGfW9molcyctOscFhEWYJI euV4GPizwT2HtAXpMpcFUive583XD9O9/DnTcj2ZYSJRBGazVDbb0yQL03BZzNLXslOA e6Bw== X-Forwarded-Encrypted: i=1; AFNElJ99zmDEtYVFIEHndHm4B/DNUuBg1qgWupjq9EBaqBn5yU0RywBbgfbLIe3pkD1Dy6SQStbrgzlt1Y3kdDI=@vger.kernel.org X-Gm-Message-State: AOJu0YylyOvProT52/EdcrG4HpiqXagmmL64HfjFERY/o8+Twok57Rub z2NfU7mzK3ZEf6q+3NR22DsxUoOFm7gLbZjwOtBBjtY/mCpm1otSkIDN3IEMp2wbpxfhYLy0eV2 UH6wYv25WHg== X-Received: from dyhb15.prod.google.com ([2002:a05:7300:148f:b0:2d1:4dd2:72fc]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:cb0e:b0:2ce:f3d7:221 with SMTP id 5a478bee46e88-2d589463e5cmr6479369eec.17.1776053578696; Sun, 12 Apr 2026 21:12:58 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:37 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-28-irogers@google.com> Subject: [PATCH v12 27/33] perf synthetic-events: Bound check when synthesizing mmap2 and build_id events From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prompted by Sashiko code review, add bound checks when synthesize mmap2 and build_id events to make sure the filename doesn't overflow the event and lead to stack corruption. Signed-off-by: Ian Rogers --- tools/perf/util/synthetic-events.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic= -events.c index de812a2befbc..a7fef7ac3da6 100644 --- a/tools/perf/util/synthetic-events.c +++ b/tools/perf/util/synthetic-events.c @@ -2257,14 +2257,20 @@ int perf_event__synthesize_build_id(const struct pe= rf_tool *tool, const char *filename) { union perf_event ev; - size_t len; + size_t len, filename_len =3D strlen(filename); u64 sample_type =3D sample->evsel ? sample->evsel->core.attr.sample_type = : 0; void *array =3D &ev; int ret; =20 - len =3D sizeof(ev.build_id) + strlen(filename) + 1; + if (filename_len >=3D sizeof(ev.mmap2.filename)) + return -EINVAL; + + len =3D sizeof(ev.build_id) + filename_len + 1; len =3D PERF_ALIGN(len, sizeof(u64)); =20 + if (len + MAX_ID_HDR_ENTRIES * sizeof(__u64) > sizeof(ev)) + return -E2BIG; + memset(&ev, 0, len); =20 ev.build_id.size =3D bid->size; @@ -2303,14 +2309,21 @@ int perf_event__synthesize_mmap2_build_id(const str= uct perf_tool *tool, const char *filename) { union perf_event ev; + size_t filename_len =3D strlen(filename); size_t ev_len; u64 sample_type =3D sample->evsel ? sample->evsel->core.attr.sample_type = : 0; void *array; int ret; =20 - ev_len =3D sizeof(ev.mmap2) - sizeof(ev.mmap2.filename) + strlen(filename= ) + 1; + if (filename_len >=3D sizeof(ev.mmap2.filename)) + return -EINVAL; + + ev_len =3D sizeof(ev.mmap2) - sizeof(ev.mmap2.filename) + filename_len + = 1; ev_len =3D PERF_ALIGN(ev_len, sizeof(u64)); =20 + if (ev_len + MAX_ID_HDR_ENTRIES * sizeof(__u64) > sizeof(ev)) + return -E2BIG; + memset(&ev, 0, ev_len); =20 ev.mmap2.header.type =3D PERF_RECORD_MMAP2; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 C1F28386570 for ; Mon, 13 Apr 2026 04:13:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053587; cv=none; b=u842MfwK2Aaa9uod2Qw6livgKIEw01vtHGUVrp54BIUoCvMAmTeX/WkCW/Ka9FBmaWg1Yd3HijCvwY000ItGmfnb05eRpyl8CjShGdOX17yklLzOb1XfLvFWZUxejCztUg36CQGqRkrnmB+vbYsPjQh6YC48+WGj8roaKxacRzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053587; c=relaxed/simple; bh=TORHr2hwj56t1K+9uUsjLQo6KHkuVY+QoSlV3b0luUk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HPfO1IC+ULs3D4Yg5CvxA4yC7UmNDBaL8hEex0vaKETSrWGjNaioJKf6vfwbgkX4/HpqHvmau6uXeHbwJO7320dhK1+hNSXK1Sw+gkXuw3EXz0agC+pnC1np8AjmcQsq9dVhDilBzot5aQBp8m6/fRUumsTucltRYB9Gh48aw4s= 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=V2EsuqHi; arc=none smtp.client-ip=74.125.82.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="V2EsuqHi" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2c0ba59a830so5234415eec.0 for ; Sun, 12 Apr 2026 21:13:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053581; x=1776658381; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=hQS4P5hyltqhKwRzLCXyq1MWFkkdWjplTUZAMK0ialE=; b=V2EsuqHiZtAPSgAnc/RVlR5TN16VCtgoEP1M5eRpnrJos5DVQTS/3GJA11Y5/W5gsz eCKIASLlbUb6SccXOoJ6uiELlX39tzUOI3GDHsVvXl6ddPRB8zAHUYtpPMawMm5w1UPI g/E8jVtyJe3GFlkRPWOHwoz6K46T38ZkKHXYe7Gc2uXqQIog/Ee2+2BXDrdQbMSQhv62 qPVoFbKiKyRv5uT6OrVZRHoTqpQJ+A3s+OvWVs+VzhnbExGp0FBeNPScs+eLgPVvmzdO 26Mwc75HIarqoPGsNJumJkJh4WSeCXzj+a4CstjTFPygSNPLe22dzrNCzdJ6adlFhUrC fq+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053581; x=1776658381; h=cc: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=hQS4P5hyltqhKwRzLCXyq1MWFkkdWjplTUZAMK0ialE=; b=BDLn0/kGJ4WWIXlYdFNstIX2T+axNtt+lZxY8ER7M6tN6pmhHIlcDCVSMIELVYDDkf BpEtLpZkvJFgqnlxPbXRzy3YoIEeZ7PHU6SXck3l0SE7oYtbbnmMREsGP8vNGJ3fubBc ZP0wsGIEmKEfXKxPKCQS+Wp5nvJ4UXXnZolVR9bRUOCAKqGU3DI7qH0nE8Mp9jvhSaJ6 qxtV3BElzQLOGYq189VyQIUEJfJiIaeQPHTsJ3H/8Roy/Dx4RUgIe1qpkKv1Y08XNb3+ Md3H29p83Cx4Rb2AwckTHkyIUpjwEhVOxXJ8hYQr8px8dYP9B3sZ8ZSSx7qAvcGs/X3Q hQ6A== X-Forwarded-Encrypted: i=1; AFNElJ+aC1+VGuxceumQsVqINtExSQMjFzRTGPvYPZxEB0XgyX1jRz4WeNH2VQdm3N/0Z3RFkA6O/09N6BvLLQ4=@vger.kernel.org X-Gm-Message-State: AOJu0Yzi6YJCnPY9azENRfrCrEFh3ZW/uZ9DgpvLI0Va32Imrg9XLkja G4C/9Au7yfkZVDqlAlMkiY7luFHhtDd/jUREZagdxAM2puqHHHHglOHIf7RkJIwkfUP4uVuWZk1 W8VTHLoQbDg== X-Received: from dyon31.prod.google.com ([2002:a05:7300:6d1f:b0:2d4:49c9:3b10]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:a54b:b0:2da:1874:f3bb with SMTP id 5a478bee46e88-2da1874f8ccmr135985eec.23.1776053580832; Sun, 12 Apr 2026 21:13:00 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:38 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-29-irogers@google.com> Subject: [PATCH v12 28/33] perf kmem: Add bounds checks to tracepoint read values From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid out-of-bound memory accesses by bound checking order and migrate_type when coming from page_alloc_event and page_free_event. Signed-off-by: Ian Rogers --- tools/perf/builtin-kmem.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index daf2272c7337..33585e353efe 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -826,6 +826,16 @@ static int evsel__process_page_alloc_event(struct perf= _sample *sample) .migrate_type =3D migrate_type, }; =20 + if (order >=3D MAX_PAGE_ORDER) { + pr_debug("Out-of-bounds order %u\n", order); + return -1; + } + + if (migrate_type >=3D MAX_MIGRATE_TYPES) { + pr_debug("Out-of-bounds migratetype %u\n", migrate_type); + return -1; + } + if (use_pfn) page =3D perf_sample__intval(sample, "pfn"); else @@ -892,6 +902,11 @@ static int evsel__process_page_free_event(struct perf_= sample *sample) .order =3D order, }; =20 + if (order >=3D MAX_PAGE_ORDER) { + pr_debug("Out-of-bounds order %u\n", order); + return -1; + } + if (use_pfn) page =3D perf_sample__intval(sample, "pfn"); else --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 0480E3815E5 for ; Mon, 13 Apr 2026 04:13:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053590; cv=none; b=bmiLHq564+OWYPLb+6H70XHWZ+de2RbDr374agnb548FT6hczw0TT3s2RWRpa7eLJNfUcLEwB1slHgyoLapl+QMiE4MLyNEoDRMzCAMCca5Lx+B2ZH6UwXHp7zj+7X28TJlcJS51wL+upaFz9dTOt430YbCZYvXvE6vrALAPk6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053590; c=relaxed/simple; bh=efLws6CWItfMARHwLMrmTPkXaixFU5L19SyevaVhz6c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=N9H/vLNEQ2kIC9ECmIaMazQuXoOH6bxbDQNoT58yqkGLwpvcPIeDI/09J1x4iEUcIvNUespEH+NUwo/D9FYieYCMGbJpJqYuqlTAnsbiiXXdH2j2tK++k42YtocpVA7DvUvg0B/rF7oWbhxkqsaPmf4jqaWA8NVaHYCJwWksyJY= 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=qncLtZRV; arc=none smtp.client-ip=74.125.82.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="qncLtZRV" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2c16233ee11so5381374eec.1 for ; Sun, 12 Apr 2026 21:13:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053584; x=1776658384; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=7HQBeQ71sg5sqBmCvt3LAV9Ox37tWm3Hf2/nA+LCG7k=; b=qncLtZRV75F3XTY3NX43E9GEez3CeEyXXD1wk63R22H3Fx2I58VOXgWpMQHGU+NKxn 6+TAi5875ezd58EQn00HD/FgqP+vZsMpiEu8IqexbjqkxEjB/tb8witmGb5/D8Cf/jSL OvLvtLNcrxreYDcKeQvQwl3tOxNnC6eQLoSA3iyefawyOGA5Clf4fb664fPiE7wMwBy8 ClHkPcjBFYQqDhNWOTfMDyupwDSrGBOTJqGAwOmI4N4SvsJGzbu8844pgxVMetKpuG+z URtN6d+kWZO9UB2bGgaJMzSxvI1gwYWjAIA50AAbv3EFlj3LVEXg09Jk55k40zH55f0B hN8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053584; x=1776658384; h=cc: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=7HQBeQ71sg5sqBmCvt3LAV9Ox37tWm3Hf2/nA+LCG7k=; b=jYbx0b3i6L3akusg7+VRdL6fItrLKEqzAsSpWjHYcJ4+Q7NBBFHymyXTKV/FMBecDM jR7NWcGhMetiV16yOafetJK60L5nt3Gi3+c+Bw5/GN5INIBkU8p6WubFyIH44oA6NgzB nkaidJfwbU3EZcpqOHB5bcDRPqMULch1llsVoLy5hcu9UxpgcGDvFR5toH/81POJ8UcG B0vzmau3aDk9KbcrqKfB5L7Hc4PpVnGBoGIlC8EorxrqGaFGsCuPd6rJQLlyeCWLMpqZ mE1J1fOMH7r/FktyC9x8ufwSUGydcTfSzaNkJX06hGBLlaYHhsHomOi82AyM9uLstK6X shyw== X-Forwarded-Encrypted: i=1; AFNElJ8P1rWs3Z/u9ZNRnfzXWdWnFBZF2fWQyWNNKEUPn8eZG9X0g9b1keQzvcnsfFdHwTZ2SKRvAo/n9oBhD4s=@vger.kernel.org X-Gm-Message-State: AOJu0YzjvrJlLHViK85hAHVw+9WNq6wLBbuyWuA3j/TvC6ezmzTIbVps QKrlPZYEQzah3F7jgCyr4e5V3Ws/C+KIYd2aX/UDVJ4tV1ZgCAz50xh/j9u0ZENNiZYUfF9Adg9 hLgJgf2G84A== X-Received: from dygg16.prod.google.com ([2002:a05:693c:80d0:b0:2d1:13bb:389c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:4627:b0:2d7:6cbb:90ec with SMTP id 5a478bee46e88-2d76cbb93a9mr2286151eec.4.1776053583403; Sun, 12 Apr 2026 21:13:03 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:39 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-30-irogers@google.com> Subject: [PATCH v12 29/33] perf sched: Bounds check CPU in sched switch events From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prompted by Sashiko in code reviews. Ensure the CPU is within expected bounds to avoid out of bound memory accesses. Signed-off-by: Ian Rogers --- tools/perf/builtin-sched.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 45439e2af8ff..8b0526d342e3 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c @@ -1791,6 +1791,11 @@ static int process_sched_switch_event(const struct p= erf_tool *tool, u32 prev_pid =3D perf_sample__intval(sample, "prev_pid"), next_pid =3D perf_sample__intval(sample, "next_pid"); =20 + if (this_cpu < 0 || this_cpu >=3D MAX_CPUS) { + pr_warning("Out-of-bound sample CPU %d. Skipping sample\n", this_cpu); + return 0; + } + if (sched->curr_pid[this_cpu] !=3D (u32)-1) { /* * Are we trying to switch away a PID that is @@ -1813,6 +1818,11 @@ static int process_sched_runtime_event(const struct = perf_tool *tool, { struct perf_sched *sched =3D container_of(tool, struct perf_sched, tool); =20 + if (sample->cpu >=3D MAX_CPUS) { + pr_warning("Out-of-bound sample CPU %d. Skipping sample\n", sample->cpu); + return 0; + } + if (sched->tp_handler->runtime_event) return sched->tp_handler->runtime_event(sched, sample, machine); =20 @@ -2775,6 +2785,11 @@ static int timehist_sched_change_event(const struct = perf_tool *tool, int rc =3D 0; const char state =3D perf_sample__taskstate(sample, "prev_state"); =20 + if (sample->cpu >=3D MAX_CPUS) { + pr_warning("Out-of-bound sample CPU %d. Skipping sample\n", sample->cpu); + return 0; + } + addr_location__init(&al); if (machine__resolve(machine, &al, sample) < 0) { pr_err("problem processing %d event. skipping it\n", --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.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 D406A352C2B for ; Mon, 13 Apr 2026 04:13:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053592; cv=none; b=VMLciZc+FYXbIMa55vJfOtkE3/dgX2rrMAUjzVczYgYI4O2Ji0OJNpEZ5vZdibBX9g2UzEt5jxS+z86hVywq/F0O4HGmGaDYQJeI/q2etyOM5z5vxjfawQs5N+Wu/lSvd8Rb1LHnCLfLKLWkor+PEp3Crr1Yk4s9r//8ON+xGwU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053592; c=relaxed/simple; bh=dVAsi7bYYPJqnhbBpPHXGd5q5Za/B/TINrLvFtzpiD8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qFCl1nPM/A8zzH+AaC1aobmx6ZIJ2LmkS90cGTqTzupSPITVXZeuhqyWEU5ESjqWCNTI+oeUOoyD3GLH6iLAr859Y8ZZXxnMdLOaXG03N0TtUTNvsO31t5jBal9Audpbz+9FB0OHs4BPZ2iSLnrua/AhcKP+VYg+bIkJ4o+/j8o= 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=Zriw2GbD; arc=none smtp.client-ip=74.125.82.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="Zriw2GbD" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12bf9974587so5881053c88.0 for ; Sun, 12 Apr 2026 21:13:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053586; x=1776658386; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=3gAJ13cmq58H8ae4d4LEnv5+lFu4mwDfSGGPkW/FQa0=; b=Zriw2GbDLVpChKItO20J7eK/216p8N7u7/5AUV1zR4yLh2up9SC5VTTWAhNbCiAcmG rJxJB0YsdZNXqGwPV+w24OaDCzdrKFfZnYgbuKsrai0P5azS+OqcjtuCFN7u9nwZsIO/ WGx5WWHCj3tNgIB7JBcjXGZ5yMhbgmZMfM1KiAKOOehGa5BTCyrXDdU1bMYzMOmjVEJX RLnbl0FdV5k8hW0Id05QBxjQXsGM2yOnC4fiFpoFCXSuZhz6WehhMLRl3vn7DXRyy6Zl eMi/Yn2z4+INFZTBO/2Eq/uEYMJLDFDAQyN82uPQJKFf8oIfczKUDe+SBWBnn33/nAwL nsjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053586; x=1776658386; h=cc: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=3gAJ13cmq58H8ae4d4LEnv5+lFu4mwDfSGGPkW/FQa0=; b=cq6iHToxm7HaCl2MMhQPVSid+fHzIGDs8CKdgwW7UYewnkuDg6Z8B7M1i4cYJUkFko k1dOp9Nk3+nhsJmXV7D0fKfY5NojL3Pu8sJHPxn9pzfi51aVlxhqZHzX5rIv6z+azCHt +fACqmROhONfaVixL9C0XfV/JtjZJ3uMsoNuART+YNYDJclIoMMVs32n9/5twflRgdpH UXxNfEXQjYhbPqL2buJnT03YNuA75epFcifONa8QpFdc39ggkzGHWz1i0SglePYkA1yQ /uHL5sLRr9j087+NPwWGIAWT9yuVmnKDbnu/tUfuRmWdl3JrtaLUC1VOZ0GSKMxckxan BclQ== X-Forwarded-Encrypted: i=1; AJvYcCVS/xNlBoMo/qu/1m/IevqA0AiTQi08XQZn9V+Pzl1lqE7kmwyMVrOhjzV9cFlNV3xbZ55u5TIdm7gQQjE=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8z+KT9UmdjEbPSR0Fda2a13JaPBcIpK3g5nN9cWllmHiu+3y8 TVeJxNQJ+94jz3C5+ymD5HTEww0+gXDemvZMI61NnqbMIhWxUjD8c5BvNAycfWZnXThEyz2ppFI aCAWDUmUEXA== X-Received: from dlec2-n1.prod.google.com ([2002:a05:701b:4282:10b0:12c:4ced:d080]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6987:b0:12b:ee8a:19ae with SMTP id a92af1059eb24-12c34e3f4f4mr6223412c88.7.1776053585914; Sun, 12 Apr 2026 21:13:05 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:40 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-31-irogers@google.com> Subject: [PATCH v12 30/33] perf timechart: Bounds check CPU From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Ensure the CPU is within expected bounds to avoid out of bound memory accesses in arrays tracking CPU state. Signed-off-by: Ian Rogers --- tools/perf/builtin-timechart.c | 35 +++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 64f69bd67c6b..64903b54e8a7 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c @@ -607,6 +607,10 @@ process_sample_cpu_idle(struct timechart *tchart __may= be_unused, u32 state =3D perf_sample__intval(sample, "state"); u32 cpu_id =3D perf_sample__intval(sample, "cpu_id"); =20 + if (cpu_id >=3D MAX_CPUS) { + pr_debug("Out-of-bounds cpu_id %u\n", cpu_id); + return -1; + } if (state =3D=3D (u32)PWR_EVENT_EXIT) c_state_end(tchart, cpu_id, sample->time); else @@ -622,6 +626,10 @@ process_sample_cpu_frequency(struct timechart *tchart, u32 state =3D perf_sample__intval(sample, "state"); u32 cpu_id =3D perf_sample__intval(sample, "cpu_id"); =20 + if (cpu_id >=3D MAX_CPUS) { + pr_debug("Out-of-bounds cpu_id %u\n", cpu_id); + return -1; + } p_state_change(tchart, cpu_id, sample->time, state); return 0; } @@ -635,6 +643,10 @@ process_sample_sched_wakeup(struct timechart *tchart, int waker =3D perf_sample__intval(sample, "common_pid"); int wakee =3D perf_sample__intval(sample, "pid"); =20 + if (sample->cpu >=3D MAX_CPUS) { + pr_debug("Out-of-bounds cpu %u\n", sample->cpu); + return -1; + } sched_wakeup(tchart, sample->cpu, sample->time, waker, wakee, flags, back= trace); return 0; } @@ -648,6 +660,10 @@ process_sample_sched_switch(struct timechart *tchart, int next_pid =3D perf_sample__intval(sample, "next_pid"); u64 prev_state =3D perf_sample__intval(sample, "prev_state"); =20 + if (sample->cpu >=3D MAX_CPUS) { + pr_debug("Out-of-bounds cpu %u\n", sample->cpu); + return -1; + } sched_switch(tchart, sample->cpu, sample->time, prev_pid, next_pid, prev_state, backtrace); return 0; @@ -662,6 +678,10 @@ process_sample_power_start(struct timechart *tchart __= maybe_unused, u64 cpu_id =3D perf_sample__intval(sample, "cpu_id"); u64 value =3D perf_sample__intval(sample, "value"); =20 + if (cpu_id >=3D MAX_CPUS) { + pr_debug("Out-of-bounds cpu_id %llu\n", (unsigned long long)cpu_id); + return -1; + } c_state_start(cpu_id, sample->time, value); return 0; } @@ -671,6 +691,10 @@ process_sample_power_end(struct timechart *tchart, struct perf_sample *sample, const char *backtrace __maybe_unused) { + if (sample->cpu >=3D MAX_CPUS) { + pr_debug("Out-of-bounds cpu %u\n", sample->cpu); + return -1; + } c_state_end(tchart, sample->cpu, sample->time); return 0; } @@ -683,6 +707,10 @@ process_sample_power_frequency(struct timechart *tchar= t, u64 cpu_id =3D perf_sample__intval(sample, "cpu_id"); u64 value =3D perf_sample__intval(sample, "value"); =20 + if (cpu_id >=3D MAX_CPUS) { + pr_debug("Out-of-bounds cpu_id %llu\n", (unsigned long long)cpu_id); + return -1; + } p_state_change(tchart, cpu_id, sample->time, value); return 0; } @@ -694,10 +722,9 @@ process_sample_power_frequency(struct timechart *tchar= t, */ static void end_sample_processing(struct timechart *tchart) { - u64 cpu; - struct power_event *pwr; + for (u64 cpu =3D 0; cpu < tchart->numcpus; cpu++) { + struct power_event *pwr; =20 - for (cpu =3D 0; cpu <=3D tchart->numcpus; cpu++) { /* C state */ #if 0 pwr =3D zalloc(sizeof(*pwr)); @@ -1517,6 +1544,8 @@ static int process_header(struct perf_file_section *s= ection __maybe_unused, switch (feat) { case HEADER_NRCPUS: tchart->numcpus =3D ph->env.nr_cpus_avail; + if (tchart->numcpus > MAX_CPUS) + tchart->numcpus =3D MAX_CPUS; break; =20 case HEADER_CPU_TOPOLOGY: --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.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 9B2743876AC for ; Mon, 13 Apr 2026 04:13:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053594; cv=none; b=muahF1vqZ2+n1jlMnuWwKwdmE2MGQMzVV7UkB35YjpYY9eZSR5K35dbAxnk8WjqYQyyH1Qp5Y8R6NkD5YB0Kt3ag5CocPoL0v1IysPPEVkSoqlv/9cmm+52j5DlX3HlfNnG5CW+i/YohbnOagtb0shUikEES565z85NktRHrtPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053594; c=relaxed/simple; bh=g0usVRnl0CHfK4phYJ4kQUrCj6VQTusJyKz8Yi4JyAI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Wudqnt9yma60Xx3EhV/wDmrIL4a1ccI0IuVnOCzBtRAFfio8L3lHLYoj/es5nYLmTrAlxkS0pGZuSwaxoi0nykw6pHFh5s2gHfpWN+rSu/nSfmxU3+s5rmsR+05fqWjpYd4zMRWd7v3FLYVjWrySNxu8iK6urOLTjfshuumBrIQ= 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=u4MhPjB9; arc=none smtp.client-ip=74.125.82.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="u4MhPjB9" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12734af2ca4so2276490c88.0 for ; Sun, 12 Apr 2026 21:13:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053590; x=1776658390; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=hE8gZ0WlkEK0uxYEyWq3yJ8WEjn3eIh7WyTWOKO+NBk=; b=u4MhPjB9rHh7OJwUOgeDz9qi2eNmlLup3Q/H4ud7z5aOomrHLhn9gHo+N62zFOD5Oo BtT1P0FljcucpRcyzhBhPgHOeuN//RoALTalZ1XDwKbrPuzsrs2L0eqGuRC5Dm6SKwQo Pr8eOMR1QqqUfkLuVvBsQDu5uR4FXt4o7m+YCMnizp30Z8UAegclYofVeMx1hkYs0Mo0 gqlLAvXb79LqUQtdCTvpREh0VR2/X0QpxN3bFcjtve0UKswY0k6yeMI5V7PfF0ce8iQc 2FuyVAJ8YdPyV1NwLJBzYODtCtp2ZFpBsNIf27yvAbKD+Cita/nm3FG7at+ifcECh2Am AcVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053590; x=1776658390; h=cc: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=hE8gZ0WlkEK0uxYEyWq3yJ8WEjn3eIh7WyTWOKO+NBk=; b=mENRH1XTZBkTv7xmeSXgjlVdyEF44YUTexe/+EKVrvbOffjx2VoeUjVn6X9m22tj9X k/pqfnsNIL3eI5R3LDlNf6rmwDv9BWrRTqrW3G6UOvn4SSivGiDrmA3dl4+RbGyxcxMx VvkO+903T74UpUdpvZfgyenbQZqcX7iN8JjjmcRzpLd1BegIOYXYhoFwJ0LWkan4PIm3 1KkSpNd2qVLSK0t/LEgoeNNJ6S3U6CII8phJHLA1kjL+NDEtSLWO/7DYkSdb01YbOo6q QHOM94aFyjQkM2EZlCklkYQYq9S4plMPkcOgABjcdQhl1wmBRX7SLA66SjAw9NtZgoq/ YQXA== X-Forwarded-Encrypted: i=1; AJvYcCWAI87tkIQC3bEFW7JQ6ENp5LqyXSAQPoBt/qu7qFSuhnGjTpkX9Ec8pdYdI4fLrto3ru7L6uhO8XuRYm4=@vger.kernel.org X-Gm-Message-State: AOJu0YzsMZL+8MwOIqA/YgPhwhO4/4fyfqHhzt86guxlHGPFD6WtESZa 9/43wlU6KWf4yfIT7bD/vjCdGZELIn7UVh7M0p3s6lPwEZOK1zzjse4Xr9q2zAaAcYAshEUlIS6 1apsShmoeBg== X-Received: from dleb14-n1.prod.google.com ([2002:a05:701b:424e:10b0:12c:195e:1f93]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6290:b0:119:e569:f875 with SMTP id a92af1059eb24-12c353007e6mr5251798c88.18.1776053589669; Sun, 12 Apr 2026 21:13:09 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:41 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-32-irogers@google.com> Subject: [PATCH v12 31/33] perf evsel: Add bounds checking to trace point raw data accessors From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid a tracepoint field accidentally reading out of bounds by checking the size of read fits. This was prompted by Sashiko review feedback about the potential. Properly compute the size for dynamic fields using the high 16-bits. Fix handling of dynamic tracepoint fields when endianness varies by byte swapping the data. Signed-off-by: Ian Rogers --- I suspect the int field handling should also incorporate these changes, but I've stopped with just rawptr's (which also includes strings) as those are the only current fields that support dynamic and relative. --- tools/perf/util/evsel.c | 54 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index bb48568b8101..713a250c7374 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -3700,22 +3700,63 @@ struct tep_format_field *evsel__common_field(struct= evsel *evsel, const char *na return tp_format ? tep_find_common_field(tp_format, name) : NULL; } =20 +static bool out_of_bounds(const struct tep_format_field *field, int offset= , int size, u32 raw_size) +{ + if (offset < 0) { + pr_warning("Negative trace point field offset %d in %s\n", + offset, field->name); + return true; + } + if (size < 0) { + pr_warning("Negative trace point field size %d in %s\n", + size, field->name); + return true; + } + if ((u32)offset + (u32)size > raw_size) { + pr_warning("Out of bound tracepoint field (%s) offset %d size %d in %u\n= ", + field->name, offset, size, raw_size); + return true; + } + return false; +} + void *perf_sample__rawptr(struct perf_sample *sample, const char *name) { struct tep_format_field *field =3D evsel__field(sample->evsel, name); - int offset; + int offset, size; =20 if (!field) return NULL; =20 offset =3D field->offset; - + size =3D field->size; if (field->flags & TEP_FIELD_IS_DYNAMIC) { - offset =3D *(int *)(sample->raw_data + field->offset); - offset &=3D 0xffff; - if (tep_field_is_relative(field->flags)) + int dynamic_data; + + if (out_of_bounds(field, offset, 4, sample->raw_size)) + return NULL; + + dynamic_data =3D *(int *)(sample->raw_data + field->offset); + + if (sample->evsel->needs_swap) + dynamic_data =3D bswap_32(dynamic_data); + + offset =3D dynamic_data & 0xffff; + size =3D (dynamic_data >> 16) & 0xffff; + + if (tep_field_is_relative(field->flags)) { + /* + * Newer kernel feature: Relative offsets (__rel_loc). + * If the relative flag is set, the parsed offset is not + * absolute from the start of the record. Instead, it is + * relative to the *end* of the dynamic field descriptor + * itself. + */ offset +=3D field->offset + field->size; + } } + if (out_of_bounds(field, offset, size, sample->raw_size)) + return NULL; =20 return sample->raw_data + offset; } @@ -3726,6 +3767,9 @@ u64 format_field__intval(struct tep_format_field *fie= ld, struct perf_sample *sam u64 value; void *ptr =3D sample->raw_data + field->offset; =20 + if (out_of_bounds(field, field->offset, field->size, sample->raw_size)) + return 0; + switch (field->size) { case 1: return *(u8 *)ptr; --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.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 3C46E38B126 for ; Mon, 13 Apr 2026 04:13:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053598; cv=none; b=O/HCrcWOsQFO+gr56G2tPKRGZsKxS9xfNaZc6s2y/J0AcaYfmjX4jKde4RucsKrqj/DbwbxoronWcsKQihddF5wCbFePEDnkBpgBeEVI3INIbwmVFYVnS7BX92JOFYNoQdYjHJMIrG1dtFrcVhZD6VfXgF94esdnNosIqfz1DOo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053598; c=relaxed/simple; bh=66xqwU8TdrCM+0qRvoOnzdTygtIXMVEt2vWeBM6SfY0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=PsieL/76GqfXbFbXdXTiJUJGixbR1pqQUxVDZsAXRFkmBwMCg+zvKIKsL5BRqEk0ARFbxZgLcXRX5/NFtZOIVIWiPav6gdn/pAzfWwHsd84oHVnf3eNTBuOhg/b1dVzQvnj4thf5UHAkYlQkVz9muEdPhYFFe7jE5+4Ghz/VwCA= 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=H4x7/xtr; arc=none smtp.client-ip=74.125.82.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="H4x7/xtr" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12bf921cf49so13471460c88.1 for ; Sun, 12 Apr 2026 21:13:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053592; x=1776658392; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xiPToYQ7s8nRwPjlKmCIY6nHfGV8vY3NR0sUv4YSbrY=; b=H4x7/xtrNAsmKhvwq2dUkzwKrRx30NWHv93F8eQf98qaP1iEwjE5dosRPLk/S8nCLZ 1kpkuSp6LIYZSekXLd+vTUWDEG17xnCZL9nck7pqZpCIicTmLzEbI5u08a0jCK6VvjNv B2vJh1jQf0fVXOY3iFPP5zJuKP5KpQsX01mC8qOnTgYcDO76FDHUp3jH4q18IOHRZa97 b9HEV1VRMZDmoPi0nKjmGAGk/YPwLHh11g2FVqXb7a+5C317up7xGwhTJdv9UJhTHZPt m4ZK2yYTaFeSFhoQVveotuImNv1jtaJVkzebkJ/+AqeIQVIkgvx2l/Y5bGVdqKnKi53L OxiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053592; x=1776658392; h=cc: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=xiPToYQ7s8nRwPjlKmCIY6nHfGV8vY3NR0sUv4YSbrY=; b=qlojgSkcm8z/I2J8hOHZmEeJtbeEqUdCY/EO+4WbCw6EKiUM5i9EzQLcyCriwsJYfx NUdHcCNMiXRZf5eEnxMc271w4j73enFIEK0dVjbYnYEoB+F0YdfRHGJKDa/NBgWB+Kw4 j2lI9K5sr35nrrrV0HKDzlOaD1b02iiCUe5cBV5i3lJlc8STWgOujiH/KHMVWvlhN0ab h9QQAV5hDzBjBo+825Ae1xKYBA9VBAEa0Y+gcRPOyNb5XVLZDEPFf4PF1szTrjB2JNb/ AOOC3lZE7UH6D0X8CFgfbUtpfNETr8w4f0XTI322ynEIPbqwWhGhTgwM97eIwPnEXvkW 3cqg== X-Forwarded-Encrypted: i=1; AJvYcCUcJ1WlTve94Mjm17bmomwKF0JzQjVmEMUSh0kFul4rmXV/AkhXoujZ1fUDYjzgAo+8Hm+efZJNzpGhxss=@vger.kernel.org X-Gm-Message-State: AOJu0Ywrm6RB7+Ahb3VMXuTeh7u5yPGro9q8eNd8boNgyIIKuoSt2ZSA TlRdgV4oHLPyzJ86UeWEVPcuQi7IQQSnVFIppD2CJVFPLKCi1X02ufTJlmb2EamDybviZGFd2fb Mw+X6C2j9nw== X-Received: from dlbur1.prod.google.com ([2002:a05:7022:ea41:b0:12a:c5dd:73f9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:3d12:b0:128:d967:4678 with SMTP id a92af1059eb24-12c34eea0f0mr6408094c88.23.1776053591851; Sun, 12 Apr 2026 21:13:11 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:42 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-33-irogers@google.com> Subject: [PATCH v12 32/33] perf kwork: Fix address sanitizer issues From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There is a double free in the record array due to how parse_options will mutate the array. Fix by keeping an array that isn't mutated. Ensure kwork_usage is freed on all paths. Signed-off-by: Ian Rogers --- tools/perf/builtin-kwork.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index 59a54d11f7fa..a4604e152002 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -2258,7 +2258,7 @@ static void setup_event_list(struct perf_kwork *kwork, static int perf_kwork__record(struct perf_kwork *kwork, int argc, const char **argv) { - const char **rec_argv; + const char **rec_argv, **to_free =3D NULL; unsigned int rec_argc, i, j; struct kwork_class *class; int ret; @@ -2295,16 +2295,27 @@ static int perf_kwork__record(struct perf_kwork *kw= ork, =20 BUG_ON(i !=3D rec_argc); =20 + /* Save the pointers as the array will be mutated by cmd_record. */ + to_free =3D calloc(rec_argc + 1, sizeof(char *)); + if (to_free =3D=3D NULL) { + ret =3D -ENOMEM; + goto EXIT; + } + pr_debug("record comm: "); - for (j =3D 0; j < rec_argc; j++) + for (j =3D 0; j < rec_argc; j++) { pr_debug("%s ", rec_argv[j]); + to_free[j] =3D rec_argv[j]; + } pr_debug("\n"); =20 ret =3D cmd_record(i, rec_argv); =20 EXIT: for (i =3D 0; i < rec_argc; i++) - free((void *)rec_argv[i]); + free((void *)(to_free ? to_free[i] : rec_argv[i])); + + free(to_free); free(rec_argv); return ret; } @@ -2447,6 +2458,7 @@ int cmd_kwork(int argc, const char **argv) const char *const kwork_subcommands[] =3D { "record", "report", "latency", "timehist", "top", NULL }; + int ret =3D 0; =20 perf_tool__init(&kwork.tool, /*ordered_events=3D*/true); kwork.tool.mmap =3D perf_event__process_mmap; @@ -2463,7 +2475,7 @@ int cmd_kwork(int argc, const char **argv) =20 if (strlen(argv[0]) > 2 && strstarts("record", argv[0])) { setup_event_list(&kwork, kwork_options, kwork_usage); - return perf_kwork__record(&kwork, argc, argv); + ret =3D perf_kwork__record(&kwork, argc, argv); } else if (strlen(argv[0]) > 2 && strstarts("report", argv[0])) { kwork.sort_order =3D default_report_sort_order; if (argc > 1) { @@ -2474,7 +2486,7 @@ int cmd_kwork(int argc, const char **argv) kwork.report =3D KWORK_REPORT_RUNTIME; setup_sorting(&kwork, report_options, report_usage); setup_event_list(&kwork, kwork_options, kwork_usage); - return perf_kwork__report(&kwork); + ret =3D perf_kwork__report(&kwork); } else if (strlen(argv[0]) > 2 && strstarts("latency", argv[0])) { kwork.sort_order =3D default_latency_sort_order; if (argc > 1) { @@ -2485,7 +2497,7 @@ int cmd_kwork(int argc, const char **argv) kwork.report =3D KWORK_REPORT_LATENCY; setup_sorting(&kwork, latency_options, latency_usage); setup_event_list(&kwork, kwork_options, kwork_usage); - return perf_kwork__report(&kwork); + ret =3D perf_kwork__report(&kwork); } else if (strlen(argv[0]) > 2 && strstarts("timehist", argv[0])) { if (argc > 1) { argc =3D parse_options(argc, argv, timehist_options, timehist_usage, 0); @@ -2494,7 +2506,7 @@ int cmd_kwork(int argc, const char **argv) } kwork.report =3D KWORK_REPORT_TIMEHIST; setup_event_list(&kwork, kwork_options, kwork_usage); - return perf_kwork__timehist(&kwork); + ret =3D perf_kwork__timehist(&kwork); } else if (strlen(argv[0]) > 2 && strstarts("top", argv[0])) { kwork.sort_order =3D default_top_sort_order; if (argc > 1) { @@ -2507,12 +2519,12 @@ int cmd_kwork(int argc, const char **argv) kwork.event_list_str =3D "sched, irq, softirq"; setup_event_list(&kwork, kwork_options, kwork_usage); setup_sorting(&kwork, top_options, top_usage); - return perf_kwork__top(&kwork); + ret =3D perf_kwork__top(&kwork); } else usage_with_options(kwork_usage, kwork_options); =20 /* free usage string allocated by parse_options_subcommand */ free((void *)kwork_usage[0]); =20 - return 0; + return ret; } --=20 2.53.0.1213.gd9a14994de-goog From nobody Sat Apr 18 06:51:43 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 D91E038C43A for ; Mon, 13 Apr 2026 04:13:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053599; cv=none; b=CKNjs7xjWvT/JwCCp55Fr+1eZ20DHBog/agzHKizndFcpSHcoYCu6OKMHXzkoHUILUfwvu8GlIOwes6F/+y6N0KRtM5LSnjy8xBJgo/8gRY0OyX5MN/4xvzNCTwMdKLkpVcidL5yXMlAfD7W3kPUpTnY0Po5UHQVadDlvexPYZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776053599; c=relaxed/simple; bh=o+libGjGGnh0PZHJw+kVOgmbQh9zxpxsvn3EuaHS1hA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=V9hjoQgBb4u8cn59ik7GyvOR7MAj2ztuA/RD5HbuzjLFXMXRDyDWbWVUQU3mAGD+LFlEd769GkncBeBKsAyZrA23LW0ytNqpmeiw7hGn6UuZY49QHrU/spqx0O55cuOXPmN/l5BsBeIxwJZD/Zrxoq2LWrv0UXDfp/fUWXMToNc= 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=ZemXixf3; arc=none smtp.client-ip=74.125.82.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="ZemXixf3" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2bdf75bc88fso5650647eec.0 for ; Sun, 12 Apr 2026 21:13:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776053595; x=1776658395; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=qTdwOD5MvJj+i4G9bVPQNL0PRv4ibjmw6Xi5PZQFnqk=; b=ZemXixf3AusxeI6TcDjaQG0VYd0yiFtUt55nfWORzxWukp0AC58zFeZVi6liMXOzjQ upR28Q74QItrD3K7Vxw+Q5PSmk7Bfp0MJYvnHnXWVCF7LX5IutxJK4Kiidg+bMd1u7Lm 8gxgjm9HXvSfF5J/+RXHnQdT3gQlbxGI54gLoQY6SjUqAuWWMAJKaePRUWMkzg/M5kaO t9TmIaoPZ2P1ZmXrMFYYKF4Zn3hJ7wjjcVymT5FhhHaGr1Py1sk6BcwjLrX5wcqBiyfj Om5HaFq2wHg48ffo8q1XzQmQON6tnZpPZy8RBUsuVXTqVibaD77OqAJcVChVCFWYPhxG D55A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776053595; x=1776658395; h=cc: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=qTdwOD5MvJj+i4G9bVPQNL0PRv4ibjmw6Xi5PZQFnqk=; b=qy1wvHq6xvpIhDjHp7nhtWz4f8jlHp0HvBwXNk0RnIpSRAHVEUWWgyFkVx2xwq0SF9 RwEPxPssEiyueVIhno4m+Z5rSytpV955nWFuOnoeLugjXMBmUIZSQ7YXzxx7dNBf2BZY E0tdovQ3C6QSi3ZUacJZvJPzVa+WyXilIiRBEJO1aC9VTlGFiBsFLSPu4ureyajR7KJ1 ObdhllJ9fFnBoMLHDO6ei2aq0PV1bHnEspjVn7EwT8OiTn4e4pm27cBe37LZ9pttjCOG m/GJzRl4Cf8Yz7tf9S6AZBUaTozl8hb5jvIT6eqvlSRbMq4JM2oKVlBLosDsg2OmkVXa jazg== X-Forwarded-Encrypted: i=1; AFNElJ8GAgWCDF01dB/LI26lsUWyFCWUDMO3LdccQup4iBZ+bNWaKxLqawYUVHpN7Blw1F3czHwx2CHpXq77lRE=@vger.kernel.org X-Gm-Message-State: AOJu0Yypehavwa1b3PVSleMJhloUNxxuLgddgMYNTOucsbRats43L8Wl h5z9s9SYCkNEHMW/aP3XKt6xBqyC6qQQAfMAItJ0Lzi+vuMlcECj+anZMvuUXcGAKcCXaddHcc0 g2Q6Znk7Yvg== X-Received: from dykp36.prod.google.com ([2002:a05:7300:ca4:b0:2d1:54d:3d96]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:693c:2c84:b0:2c5:d833:a4f3 with SMTP id 5a478bee46e88-2d58907b4admr6687484eec.18.1776053594645; Sun, 12 Apr 2026 21:13:14 -0700 (PDT) Date: Sun, 12 Apr 2026 21:11:43 -0700 In-Reply-To: <20260413041143.1736055-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: <20260413012227.1089445-1-irogers@google.com> <20260413041143.1736055-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260413041143.1736055-34-irogers@google.com> Subject: [PATCH v12 33/33] perf kwork: Fix memory management of kwork_work From: Ian Rogers To: namhyung@kernel.org Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit addresses several memory management issues in builtin-kwork.c: 1. Implements a global cleanup function perf_kwork__exit to free all kwork_work and kwork_atom_page objects at the end of the command. 2. Ensures all 'name' fields in struct kwork_work are malloc-ed (or NULL) and properly freed by using strdup and zfree. 3. Fixes memory leaks in top_merge_tasks where kwork_work objects were dropped without being freed. 4. Adds robustness with NULL checks for name fields. 5. Fixes workqueue_work_init to correctly resolve and strdup kernel function names, preventing bad-free errors. Signed-off-by: Ian Rogers --- tools/perf/builtin-kwork.c | 125 ++++++++++++++++++++++++++++-------- tools/perf/util/bpf_kwork.c | 14 ++-- tools/perf/util/kwork.h | 2 + 3 files changed, 112 insertions(+), 29 deletions(-) diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index a4604e152002..75c50073c350 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -323,8 +323,8 @@ static struct kwork_work *work_search(struct rb_root_ca= ched *root, else if (cmp < 0) node =3D node->rb_right; else { - if (work->name =3D=3D NULL) - work->name =3D key->name; + if (work->name =3D=3D NULL && key->name !=3D NULL) + work->name =3D strdup(key->name); return work; } } @@ -371,11 +371,58 @@ static struct kwork_work *work_new(struct kwork_work = *key) =20 work->id =3D key->id; work->cpu =3D key->cpu; - work->name =3D key->name; + work->name =3D key->name ? strdup(key->name) : NULL; work->class =3D key->class; return work; } =20 +void work_exit(struct kwork_work *work) +{ + zfree(&work->name); +} + +static void work_delete(struct kwork_work *work) +{ + if (work) { + work_exit(work); + free(work); + } +} + +static void kwork_work__free_root(struct rb_root_cached *root) +{ + struct rb_node *next; + struct kwork_work *work; + + while ((next =3D rb_first_cached(root))) { + work =3D rb_entry(next, struct kwork_work, node); + rb_erase_cached(next, root); + work_delete(work); + } +} + +static void perf_kwork__exit(struct perf_kwork *kwork) +{ + struct kwork_class *class; + struct kwork_atom_page *page, *tmp_page; + + list_for_each_entry(class, &kwork->class_list, list) { + kwork_work__free_root(&class->work_root); + } + + kwork_work__free_root(&kwork->sorted_work_root); + + list_for_each_entry_safe(page, tmp_page, &kwork->atom_page_list, list) { + list_del_init(&page->list); + free(page); + } + + INIT_LIST_HEAD(&kwork->class_list); + INIT_LIST_HEAD(&kwork->atom_page_list); + INIT_LIST_HEAD(&kwork->sort_list); + INIT_LIST_HEAD(&kwork->cmp_id); +} + static struct kwork_work *work_findnew(struct rb_root_cached *root, struct kwork_work *key, struct list_head *sort_list) @@ -453,25 +500,29 @@ static int work_push_atom(struct perf_kwork *kwork, struct kwork_work **ret_work, bool overwrite) { - struct kwork_atom *atom, *dst_atom, *last_atom; + struct kwork_atom *atom =3D NULL, *dst_atom, *last_atom; struct kwork_work *work, key; + int ret =3D 0; =20 BUG_ON(class->work_init =3D=3D NULL); class->work_init(kwork, class, &key, src_type, sample, machine); =20 atom =3D atom_new(kwork, sample); - if (atom =3D=3D NULL) - return -1; + if (atom =3D=3D NULL) { + ret =3D -1; + goto out; + } =20 work =3D work_findnew(&class->work_root, &key, &kwork->cmp_id); if (work =3D=3D NULL) { atom_free(atom); - return -1; + ret =3D -1; + goto out; } =20 if (!profile_event_match(kwork, work, sample)) { atom_free(atom); - return 0; + goto out; } =20 if (dst_type < KWORK_TRACE_MAX) { @@ -498,8 +549,9 @@ static int work_push_atom(struct perf_kwork *kwork, } =20 list_add_tail(&atom->list, &work->atom_list[src_type]); - - return 0; +out: + work_exit(&key); + return ret; } =20 static struct kwork_atom *work_pop_atom(struct perf_kwork *kwork, @@ -510,7 +562,7 @@ static struct kwork_atom *work_pop_atom(struct perf_kwo= rk *kwork, struct machine *machine, struct kwork_work **ret_work) { - struct kwork_atom *atom, *src_atom; + struct kwork_atom *atom =3D NULL, *src_atom; struct kwork_work *work, key; =20 BUG_ON(class->work_init =3D=3D NULL); @@ -521,15 +573,15 @@ static struct kwork_atom *work_pop_atom(struct perf_k= work *kwork, *ret_work =3D work; =20 if (work =3D=3D NULL) - return NULL; + goto out; =20 if (!profile_event_match(kwork, work, sample)) - return NULL; + goto out; =20 atom =3D list_last_entry_or_null(&work->atom_list[dst_type], struct kwork_atom, list); if (atom !=3D NULL) - return atom; + goto out; =20 src_atom =3D atom_new(kwork, sample); if (src_atom !=3D NULL) @@ -538,8 +590,9 @@ static struct kwork_atom *work_pop_atom(struct perf_kwo= rk *kwork, if (ret_work !=3D NULL) *ret_work =3D NULL; } - - return NULL; +out: + work_exit(&key); + return atom; } =20 static struct kwork_work *find_work_by_id(struct rb_root_cached *root, @@ -1002,13 +1055,16 @@ static void irq_work_init(struct perf_kwork *kwork, work->name =3D NULL; } else { work->id =3D perf_sample__intval(sample, "irq"); - work->name =3D perf_sample__strval(sample, "name"); + work->name =3D strdup(perf_sample__strval(sample, "name") ?: ""= ); } } =20 static void irq_work_name(struct kwork_work *work, char *buf, int len) { - snprintf(buf, len, "%s:%" PRIu64 "", work->name, work->id); + if (work->name !=3D NULL) + snprintf(buf, len, "%s:%" PRIu64 "", work->name, work->id); + else + snprintf(buf, len, "%" PRIu64 "", work->id); } =20 static struct kwork_class kwork_irq =3D { @@ -1135,7 +1191,10 @@ static void softirq_work_init(struct perf_kwork *kwo= rk, =20 static void softirq_work_name(struct kwork_work *work, char *buf, int len) { - snprintf(buf, len, "(s)%s:%" PRIu64 "", work->name, work->id); + if (work->name !=3D NULL) + snprintf(buf, len, "(s)%s:%" PRIu64 "", work->name, work->id); + else + snprintf(buf, len, "(s)%" PRIu64 "", work->id); } =20 static struct kwork_class kwork_softirq =3D { @@ -1220,8 +1279,14 @@ static void workqueue_work_init(struct perf_kwork *k= work __maybe_unused, work->class =3D class; work->cpu =3D sample->cpu; work->id =3D perf_sample__intval(sample, "work"); - work->name =3D function_addr =3D=3D 0 ? NULL : - machine__resolve_kernel_addr(machine, &function_addr, &modp); + work->name =3D NULL; + + if (function_addr !=3D 0) { + const char *name =3D machine__resolve_kernel_addr(machine, &function_add= r, &modp); + + if (name) + work->name =3D strdup(name); + } } =20 static void workqueue_work_name(struct kwork_work *work, char *buf, int le= n) @@ -1284,16 +1349,16 @@ static void sched_work_init(struct perf_kwork *kwor= k __maybe_unused, =20 if (src_type =3D=3D KWORK_TRACE_EXIT) { work->id =3D perf_sample__intval(sample, "prev_pid"); - work->name =3D strdup(perf_sample__strval(sample, "prev_comm")); + work->name =3D strdup(perf_sample__strval(sample, "prev_comm") ?: ""); } else if (src_type =3D=3D KWORK_TRACE_ENTRY) { work->id =3D perf_sample__intval(sample, "next_pid"); - work->name =3D strdup(perf_sample__strval(sample, "next_comm")); + work->name =3D strdup(perf_sample__strval(sample, "next_comm") ?: ""); } } =20 static void sched_work_name(struct kwork_work *work, char *buf, int len) { - snprintf(buf, len, "%s", work->name); + snprintf(buf, len, "%s", work->name ?: ""); } =20 static struct kwork_class kwork_sched =3D { @@ -2100,8 +2165,10 @@ static void top_merge_tasks(struct perf_kwork *kwork) rb_erase_cached(node, &class->work_root); data =3D rb_entry(node, struct kwork_work, node); =20 - if (!profile_name_match(kwork, data)) + if (!profile_name_match(kwork, data)) { + work_delete(data); continue; + } =20 cpu =3D data->cpu; merged_work =3D find_work_by_id(&merged_root, data->id, @@ -2109,11 +2176,17 @@ static void top_merge_tasks(struct perf_kwork *kwor= k) if (!merged_work) { work_insert(&merged_root, data, &kwork->cmp_id); } else { + if (merged_work->name =3D=3D NULL && data->name !=3D NULL) + merged_work->name =3D strdup(data->name); + merged_work->total_runtime +=3D data->total_runtime; merged_work->cpu_usage +=3D data->cpu_usage; } =20 top_calc_load_runtime(kwork, data); + + if (merged_work) + work_delete(data); } =20 work_sort(kwork, class, &merged_root); @@ -2523,6 +2596,8 @@ int cmd_kwork(int argc, const char **argv) } else usage_with_options(kwork_usage, kwork_options); =20 + perf_kwork__exit(&kwork); + /* free usage string allocated by parse_options_subcommand */ free((void *)kwork_usage[0]); =20 diff --git a/tools/perf/util/bpf_kwork.c b/tools/perf/util/bpf_kwork.c index d3a2e548f2b6..2248f462a847 100644 --- a/tools/perf/util/bpf_kwork.c +++ b/tools/perf/util/bpf_kwork.c @@ -273,6 +273,7 @@ static int add_work(struct perf_kwork *kwork, .cpu =3D key->cpu, }; enum kwork_class_type type =3D key->type; + int ret =3D 0; =20 if (!valid_kwork_class_type(type)) { pr_debug("Invalid class type %d to add work\n", type); @@ -287,8 +288,10 @@ static int add_work(struct perf_kwork *kwork, return -1; =20 work =3D kwork->add_work(kwork, tmp.class, &tmp); - if (work =3D=3D NULL) - return -1; + if (work =3D=3D NULL) { + ret =3D -1; + goto out; + } =20 if (kwork->report =3D=3D KWORK_REPORT_RUNTIME) { work->nr_atoms =3D data->nr; @@ -304,13 +307,16 @@ static int add_work(struct perf_kwork *kwork, work->max_latency_end =3D data->max_time_end; } else { pr_debug("Invalid bpf report type %d\n", kwork->report); - return -1; + ret =3D -1; + goto out; } =20 kwork->timestart =3D (u64)ts_start.tv_sec * NSEC_PER_SEC + ts_start.tv_ns= ec; kwork->timeend =3D (u64)ts_end.tv_sec * NSEC_PER_SEC + ts_end.tv_nsec; =20 - return 0; +out: + work_exit(&tmp); + return ret; } =20 int perf_kwork__report_read_bpf(struct perf_kwork *kwork) diff --git a/tools/perf/util/kwork.h b/tools/perf/util/kwork.h index abf637d44794..c96f388b3159 100644 --- a/tools/perf/util/kwork.h +++ b/tools/perf/util/kwork.h @@ -164,6 +164,8 @@ struct kwork_class { char *buf, int len); }; =20 +void work_exit(struct kwork_work *work); + struct trace_kwork_handler { int (*raise_event)(struct perf_kwork *kwork, struct kwork_class *class, --=20 2.53.0.1213.gd9a14994de-goog