From: Adrian Hunter <adrian.hunter@intel.com>
To: Anup Patel <anup.patel@oss.qualcomm.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Walmsley <pjw@kernel.org>,
Greg KH <gregkh@linuxfoundation.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Ian Rogers <irogers@google.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Namhyung Kim <namhyung@kernel.org>,
"Mark Rutland" <mark.rutland@arm.com>,
Jiri Olsa <jolsa@kernel.org>,
"Mayuresh Chitale" <mchitale@gmail.com>,
Anup Patel <anup@brainfault.org>,
Atish Patra <atish.patra@linux.dev>,
Andrew Jones <andrew.jones@oss.qualcomm.com>,
"Sunil V L" <sunilvl@oss.qualcomm.com>,
<linux-riscv@lists.infradead.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
"Mayuresh Chitale" <mayuresh.chitale@oss.qualcomm.com>
Subject: Re: [PATCH v4 11/12] perf tools: Initial support for RISC-V trace decoder
Date: Wed, 20 May 2026 14:32:15 +0300 [thread overview]
Message-ID: <c6c8ce84-bb47-4761-962a-e506a393f2b7@intel.com> (raw)
In-Reply-To: <20260429125135.1983498-12-anup.patel@oss.qualcomm.com>
On 29/04/2026 15:51, Anup Patel wrote:
> From: Mayuresh Chitale <mayuresh.chitale@oss.qualcomm.com>
>
> Add bare bones support for RISC-V trace decoder so that the data received
> from the hardware by the RISC-V trace perf driver can be written to the
> perf record output file.
>
> Co-developed-by: Anup Patel <anup.patel@oss.qualcomm.com>
> Signed-off-by: Anup Patel <anup.patel@oss.qualcomm.com>
> Signed-off-by: Mayuresh Chitale <mayuresh.chitale@oss.qualcomm.com>
Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
> tools/perf/util/Build | 1 +
> tools/perf/util/auxtrace.c | 3 +
> tools/perf/util/rvtrace-decoder.c | 91 +++++++++++++++++++++++++++++++
> tools/perf/util/rvtrace.h | 1 +
> 4 files changed, 96 insertions(+)
> create mode 100644 tools/perf/util/rvtrace-decoder.c
>
> diff --git a/tools/perf/util/Build b/tools/perf/util/Build
> index 70cc91d00804..1cd1491f93c8 100644
> --- a/tools/perf/util/Build
> +++ b/tools/perf/util/Build
> @@ -147,6 +147,7 @@ perf-util-y += cs-etm.o
> perf-util-y += cs-etm-decoder/
> endif
> perf-util-y += cs-etm-base.o
> +perf-util-y += rvtrace-decoder.o
>
> perf-util-y += parse-branch-options.o
> perf-util-y += parse-regs-options.o
> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> index 944a43d48739..c6bd6642ce05 100644
> --- a/tools/perf/util/auxtrace.c
> +++ b/tools/perf/util/auxtrace.c
> @@ -54,6 +54,7 @@
> #include "arm-spe.h"
> #include "hisi-ptt.h"
> #include "s390-cpumsf.h"
> +#include "rvtrace.h"
> #include "util/mmap.h"
> #include "powerpc-vpadtl.h"
>
> @@ -1412,6 +1413,8 @@ int perf_event__process_auxtrace_info(const struct perf_tool *tool __maybe_unuse
> err = powerpc_vpadtl_process_auxtrace_info(event, session);
> break;
> case PERF_AUXTRACE_RISCV_TRACE:
> + err = rvtrace__process_auxtrace_info(event, session);
> + break;
> case PERF_AUXTRACE_UNKNOWN:
> default:
> return -EINVAL;
> diff --git a/tools/perf/util/rvtrace-decoder.c b/tools/perf/util/rvtrace-decoder.c
> new file mode 100644
> index 000000000000..58db5ca62c1a
> --- /dev/null
> +++ b/tools/perf/util/rvtrace-decoder.c
> @@ -0,0 +1,91 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * RISC-V trace Decoder
> + */
> +
> +#include <errno.h>
> +#include <inttypes.h>
> +#include "evlist.h"
> +#include <internal/lib.h>
> +#include "rvtrace.h"
> +
> +struct rvtrace_decoder {
> + struct auxtrace auxtrace;
> + u32 auxtrace_type;
> + struct perf_session *session;
> + struct machine *machine;
> + u32 pmu_type;
> +};
> +
> +static int rvtrace_process_event(struct perf_session *session __maybe_unused,
> + union perf_event *event __maybe_unused,
> + struct perf_sample *sample __maybe_unused,
> + const struct perf_tool *tool __maybe_unused)
> +{
> + return 0;
> +}
> +
> +static int rvtrace_process_auxtrace_event(struct perf_session *session __maybe_unused,
> + union perf_event *event __maybe_unused,
> + const struct perf_tool *tool __maybe_unused)
> +{
> + return 0;
> +}
> +
> +static int rvtrace_flush(struct perf_session *session __maybe_unused,
> + const struct perf_tool *tool __maybe_unused)
> +{
> + return 0;
> +}
> +
> +static void rvtrace_free_events(struct perf_session *session __maybe_unused)
> +{
> +}
> +
> +static void rvtrace_free(struct perf_session *session)
> +{
> + struct rvtrace_decoder *ptr = container_of(session->auxtrace, struct rvtrace_decoder,
> + auxtrace);
> +
> + session->auxtrace = NULL;
> + free(ptr);
> +}
> +
> +static bool rvtrace_evsel_is_auxtrace(struct perf_session *session,
> + struct evsel *evsel)
> +{
> + struct rvtrace_decoder *ptr = container_of(session->auxtrace,
> + struct rvtrace_decoder, auxtrace);
> +
> + return evsel->core.attr.type == ptr->pmu_type;
> +}
> +
> +int rvtrace__process_auxtrace_info(union perf_event *event,
> + struct perf_session *session)
> +{
> + struct perf_record_auxtrace_info *auxtrace_info = &event->auxtrace_info;
> + struct rvtrace_decoder *ptr;
> +
> + if (auxtrace_info->header.size < RVTRACE_AUXTRACE_PRIV_SIZE +
> + sizeof(struct perf_record_auxtrace_info))
> + return -EINVAL;
> +
> + ptr = zalloc(sizeof(*ptr));
> + if (!ptr)
> + return -ENOMEM;
> +
> + ptr->session = session;
> + ptr->machine = &session->machines.host;
> + ptr->auxtrace_type = auxtrace_info->type;
> + ptr->pmu_type = auxtrace_info->priv[0];
> +
> + ptr->auxtrace.process_event = rvtrace_process_event;
> + ptr->auxtrace.process_auxtrace_event = rvtrace_process_auxtrace_event;
> + ptr->auxtrace.flush_events = rvtrace_flush;
> + ptr->auxtrace.free_events = rvtrace_free_events;
> + ptr->auxtrace.free = rvtrace_free;
> + ptr->auxtrace.evsel_is_auxtrace = rvtrace_evsel_is_auxtrace;
> + session->auxtrace = &ptr->auxtrace;
> +
> + return 0;
> +}
> diff --git a/tools/perf/util/rvtrace.h b/tools/perf/util/rvtrace.h
> index 24b32947fb4c..8e3eb4d681a7 100644
> --- a/tools/perf/util/rvtrace.h
> +++ b/tools/perf/util/rvtrace.h
> @@ -15,4 +15,5 @@
>
> #define RVTRACE_AUXTRACE_PRIV_SIZE sizeof(u64)
>
> +int rvtrace__process_auxtrace_info(union perf_event *event, struct perf_session *session);
> #endif
next prev parent reply other threads:[~2026-05-20 11:32 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-29 12:51 [PATCH v4 00/12] Linux RISC-V trace framework and drivers Anup Patel
2026-04-29 12:51 ` [PATCH v4 01/12] dt-bindings: Add RISC-V trace component bindings Anup Patel
2026-05-13 17:17 ` Rob Herring (Arm)
2026-04-29 12:51 ` [PATCH v4 02/12] rvtrace: Initial implementation of driver framework Anup Patel
2026-04-29 12:51 ` [PATCH v4 03/12] rvtrace: Add functions to create/destroy a trace component path Anup Patel
2026-05-22 19:55 ` Sergey Matyukevich
2026-04-29 12:51 ` [PATCH v4 04/12] rvtrace: Add functions to start/stop tracing on a " Anup Patel
2026-04-29 12:51 ` [PATCH v4 05/12] rvtrace: Add trace encoder driver Anup Patel
2026-05-22 18:46 ` Sergey Matyukevich
2026-04-29 12:51 ` [PATCH v4 06/12] rvtrace: Add function to copy into perf AUX buffer Anup Patel
2026-04-29 12:51 ` [PATCH v4 07/12] rvtrace: Add trace ramsink driver Anup Patel
2026-05-22 18:48 ` Sergey Matyukevich
2026-05-22 20:04 ` Sergey Matyukevich
2026-04-29 12:51 ` [PATCH v4 08/12] riscv: Enable DMA_RESTRICTED_POOL in defconfig Anup Patel
2026-04-29 12:51 ` [PATCH v4 09/12] rvtrace: Add perf driver for tracing using perf tool Anup Patel
2026-04-29 12:51 ` [PATCH v4 10/12] perf tools: Add RISC-V trace PMU record capabilities Anup Patel
2026-05-20 11:30 ` Adrian Hunter
2026-04-29 12:51 ` [PATCH v4 11/12] perf tools: Initial support for RISC-V trace decoder Anup Patel
2026-05-20 11:32 ` Adrian Hunter [this message]
2026-04-29 12:51 ` [PATCH v4 12/12] MAINTAINERS: Add entry for RISC-V trace framework Anup Patel
2026-05-19 8:21 ` [PATCH v4 00/12] Linux RISC-V trace framework and drivers Anup Patel
2026-05-21 8:32 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c6c8ce84-bb47-4761-962a-e506a393f2b7@intel.com \
--to=adrian.hunter@intel.com \
--cc=alex@ghiti.fr \
--cc=alexander.shishkin@linux.intel.com \
--cc=andrew.jones@oss.qualcomm.com \
--cc=anup.patel@oss.qualcomm.com \
--cc=anup@brainfault.org \
--cc=atish.patra@linux.dev \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=mayuresh.chitale@oss.qualcomm.com \
--cc=mchitale@gmail.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=palmer@dabbelt.com \
--cc=peterz@infradead.org \
--cc=pjw@kernel.org \
--cc=robh@kernel.org \
--cc=sunilvl@oss.qualcomm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox