From: Atish Patra <atishp@rivosinc.com>
To: linux-kernel@vger.kernel.org
Cc: "Atish Patra" <atishp@rivosinc.com>,
"Adrian Hunter" <adrian.hunter@intel.com>,
"Alexander Shishkin" <alexander.shishkin@linux.intel.com>,
"Alexandre Ghiti" <alexghiti@rivosinc.com>,
"Andrew Jones" <ajones@ventanamicro.com>,
"Anup Patel" <anup@brainfault.org>,
"Arnaldo Carvalho de Melo" <acme@kernel.org>,
"Atish Patra" <atishp@atishpatra.org>,
"Christian Brauner" <brauner@kernel.org>,
"Clément Léger" <cleger@rivosinc.com>,
"Conor Dooley" <conor@kernel.org>,
devicetree@vger.kernel.org, "Evan Green" <evan@rivosinc.com>,
"Guo Ren" <guoren@kernel.org>, "Heiko Stuebner" <heiko@sntech.de>,
"Ian Rogers" <irogers@google.com>,
"Ingo Molnar" <mingo@redhat.com>,
"James Clark" <james.clark@arm.com>,
"Jing Zhang" <renyu.zj@linux.alibaba.com>,
"Jiri Olsa" <jolsa@kernel.org>,
"Ji Sheng Teoh" <jisheng.teoh@starfivetech.com>,
"John Garry" <john.g.garry@oracle.com>,
"Jonathan Corbet" <corbet@lwn.net>,
"Kan Liang" <kan.liang@linux.intel.com>,
"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
kvm-riscv@lists.infradead.org, kvm@vger.kernel.org,
"Ley Foon Tan" <leyfoon.tan@starfivetech.com>,
linux-doc@vger.kernel.org, linux-perf-users@vger.kernel.org,
linux-riscv@lists.infradead.org,
"Mark Rutland" <mark.rutland@arm.com>,
"Namhyung Kim" <namhyung@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Rob Herring" <robh+dt@kernel.org>,
"Samuel Holland" <samuel.holland@sifive.com>,
"Weilin Wang" <weilin.wang@intel.com>,
"Will Deacon" <will@kernel.org>,
kaiwenxue1@gmail.com, "Yang Jihong" <yangjihong1@huawei.com>
Subject: [PATCH RFC 20/20] tools/perf: Detect if platform supports counter delegation
Date: Fri, 16 Feb 2024 16:57:38 -0800 [thread overview]
Message-ID: <20240217005738.3744121-21-atishp@rivosinc.com> (raw)
In-Reply-To: <20240217005738.3744121-1-atishp@rivosinc.com>
The perf tool currently remap the standard events to the encoding
specified by the platform in the json file. We need that only if
the counter delegation extension is present. Otherwise, SBI PMU
interface is used which defines the encoding for all standard
events.
The hwprobe mechanism can be used to detect the presence of these
extensions and remap the encoding space only in that case.
Signed-off-by: Atish Patra <atishp@rivosinc.com>
---
tools/perf/arch/riscv/util/Build | 1 +
tools/perf/arch/riscv/util/evlist.c | 3 ++-
tools/perf/arch/riscv/util/pmu.c | 41 +++++++++++++++++++++++++++++
tools/perf/arch/riscv/util/pmu.h | 11 ++++++++
4 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 tools/perf/arch/riscv/util/pmu.c
create mode 100644 tools/perf/arch/riscv/util/pmu.h
diff --git a/tools/perf/arch/riscv/util/Build b/tools/perf/arch/riscv/util/Build
index b581fb3d8677..2358f0666e8d 100644
--- a/tools/perf/arch/riscv/util/Build
+++ b/tools/perf/arch/riscv/util/Build
@@ -1,6 +1,7 @@
perf-y += perf_regs.o
perf-y += header.o
perf-y += evlist.o
+perf-y += pmu.o
perf-$(CONFIG_DWARF) += dwarf-regs.o
perf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
diff --git a/tools/perf/arch/riscv/util/evlist.c b/tools/perf/arch/riscv/util/evlist.c
index 9ad287c6f396..aa7eef7280ca 100644
--- a/tools/perf/arch/riscv/util/evlist.c
+++ b/tools/perf/arch/riscv/util/evlist.c
@@ -6,6 +6,7 @@
#include "util/parse-events.h"
#include "util/event.h"
#include "evsel.h"
+#include "pmu.h"
static int pmu_update_cpu_stdevents_callback(const struct pmu_event *pe,
const struct pmu_events_table *table __maybe_unused,
@@ -41,7 +42,7 @@ int arch_evlist__override_default_attrs(struct evlist *evlist, const char *pmu_n
"iTLB-load-misses"};
unsigned int i, len = sizeof(overriden_event_arr) / sizeof(char *);
- if (!pmu)
+ if (!pmu || !perf_pmu_riscv_cdeleg_present())
return 0;
for (i = 0; i < len; i++) {
diff --git a/tools/perf/arch/riscv/util/pmu.c b/tools/perf/arch/riscv/util/pmu.c
new file mode 100644
index 000000000000..79f0974e27f8
--- /dev/null
+++ b/tools/perf/arch/riscv/util/pmu.c
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/*
+ * Copyright Rivos Inc 2024
+ * Author(s): Atish Patra <atishp@rivosinc.com>
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <asm/hwprobe.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#include "pmu.h"
+
+static bool counter_deleg_present;
+
+bool perf_pmu_riscv_cdeleg_present(void)
+{
+ return counter_deleg_present;
+}
+
+void perf_pmu__arch_init(struct perf_pmu *pmu __maybe_unused)
+{
+ struct riscv_hwprobe isa_ext;
+ int ret;
+
+ isa_ext.key = RISCV_HWPROBE_KEY_IMA_EXT_0;
+
+ ret = syscall(__NR_riscv_hwprobe, &isa_ext, 1, 0, NULL, 0);
+ if (ret)
+ return;
+
+ if (isa_ext.key < 0)
+ return;
+
+ if ((isa_ext.value & RISCV_HWPROBE_EXT_SSCSRIND) &&
+ (isa_ext.value & RISCV_HWPROBE_EXT_SMCDELEG) &&
+ (isa_ext.value & RISCV_HWPROBE_EXT_SSCCFG))
+ counter_deleg_present = true;
+}
diff --git a/tools/perf/arch/riscv/util/pmu.h b/tools/perf/arch/riscv/util/pmu.h
new file mode 100644
index 000000000000..21f33f7d323d
--- /dev/null
+++ b/tools/perf/arch/riscv/util/pmu.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __RISCV_UTIL_PMU_H
+#define __RISCV_UTIL_PMU_H
+
+#include "../../../util/pmu.h"
+
+
+bool perf_pmu_riscv_cdeleg_present(void);
+
+#endif
--
2.34.1
next prev parent reply other threads:[~2024-02-17 0:59 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-17 0:57 [PATCH RFC 00/20] Add Counter delegation ISA extension support Atish Patra
2024-02-17 0:57 ` [PATCH RFC 01/20] perf pmu-events: Add functions in jevent.py to parse counter and event info for hardware aware grouping Atish Patra
2024-02-17 0:57 ` [PATCH RFC 02/20] RISC-V: Add Sxcsrind ISA extension CSR definitions Atish Patra
2024-02-17 0:57 ` [PATCH RFC 03/20] RISC-V: Add Sxcsrind ISA extension definition and parsing Atish Patra
2024-02-17 0:57 ` [PATCH RFC 04/20] dt-bindings: riscv: add Sxcsrind ISA extension description Atish Patra
2024-02-18 12:47 ` Conor Dooley
2024-02-17 0:57 ` [PATCH RFC 05/20] RISC-V: Define indirect CSR access helpers Atish Patra
2024-02-17 0:57 ` [PATCH RFC 06/20] RISC-V: Add Sscfg extension CSR definition Atish Patra
2024-02-17 0:57 ` [PATCH RFC 07/20] RISC-V: Add Ssccfg ISA extension definition and parsing Atish Patra
2024-02-17 0:57 ` [PATCH RFC 08/20] dt-bindings: riscv: add Ssccfg ISA extension description Atish Patra
2024-02-17 2:33 ` Rob Herring
2024-02-17 0:57 ` [PATCH RFC 09/20] RISC-V: Add Smcntrpmf extension parsing Atish Patra
2024-02-18 12:50 ` Conor Dooley
2024-02-17 0:57 ` [PATCH RFC 10/20] dt-bindings: riscv: add Smcntrpmf ISA extension description Atish Patra
2024-02-17 2:33 ` Rob Herring
2024-02-17 0:57 ` [PATCH RFC 11/20] RISC-V: perf: Restructure the SBI PMU code Atish Patra
2024-02-17 0:57 ` [PATCH RFC 12/20] RISC-V: perf: Modify the counter discovery mechanism Atish Patra
2024-02-17 0:57 ` [PATCH RFC 13/20] RISC-V: perf: Implement supervisor counter delegation support Atish Patra
2024-02-17 0:57 ` [PATCH RFC 14/20] RISC-V: perf: Use config2 for event to counter mapping Atish Patra
2024-02-17 0:57 ` [PATCH RFC 15/20] tools/perf: Add arch hooks to override perf standard events Atish Patra
2024-02-17 0:57 ` [PATCH RFC 16/20] tools/perf: Pass the Counter constraint values in the pmu events Atish Patra
2024-02-17 0:57 ` [PATCH RFC 17/20] perf: Add json file for virt machine supported events Atish Patra
2024-02-17 0:57 ` [PATCH RFC 18/20] tools arch uapi: Sync the uinstd.h header file for RISC-V Atish Patra
2024-02-17 0:57 ` [PATCH RFC 19/20] RISC-V: Add hwprobe support for Counter delegation extensions Atish Patra
2024-02-17 0:57 ` Atish Patra [this message]
2024-02-17 20:28 ` [PATCH RFC 00/20] Add Counter delegation ISA extension support Ian Rogers
2024-02-29 1:25 ` Atish Patra
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=20240217005738.3744121-21-atishp@rivosinc.com \
--to=atishp@rivosinc.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ajones@ventanamicro.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexghiti@rivosinc.com \
--cc=anup@brainfault.org \
--cc=atishp@atishpatra.org \
--cc=brauner@kernel.org \
--cc=cleger@rivosinc.com \
--cc=conor@kernel.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=evan@rivosinc.com \
--cc=guoren@kernel.org \
--cc=heiko@sntech.de \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--cc=jisheng.teoh@starfivetech.com \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--cc=kaiwenxue1@gmail.com \
--cc=kan.liang@linux.intel.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kvm-riscv@lists.infradead.org \
--cc=kvm@vger.kernel.org \
--cc=leyfoon.tan@starfivetech.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=peterz@infradead.org \
--cc=renyu.zj@linux.alibaba.com \
--cc=robh+dt@kernel.org \
--cc=samuel.holland@sifive.com \
--cc=weilin.wang@intel.com \
--cc=will@kernel.org \
--cc=yangjihong1@huawei.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;
as well as URLs for NNTP newsgroup(s).