summaryrefslogtreecommitdiff
path: root/drivers/perf
diff options
context:
space:
mode:
authorShifrin Dmitry <dmitry.shifrin@syntacore.com>2024-07-29 15:58:58 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-08-11 12:47:23 +0200
commitfa12277fa2181c513c47b1b95ebb6b051e976e90 (patch)
tree21a7a68e706b7553304b0909eba4f0eed40f734e /drivers/perf
parent10b26868bfb2722cbfdb496a56aa0904dcf918b3 (diff)
downloadlinux-fa12277fa2181c513c47b1b95ebb6b051e976e90.tar.gz
linux-fa12277fa2181c513c47b1b95ebb6b051e976e90.tar.bz2
linux-fa12277fa2181c513c47b1b95ebb6b051e976e90.zip
perf: riscv: Fix selecting counters in legacy mode
[ Upstream commit 941a8e9b7a86763ac52d5bf6ccc9986d37fde628 ] It is required to check event type before checking event config. Events with the different types can have the same config. This check is missed for legacy mode code For such perf usage: sysctl -w kernel.perf_user_access=2 perf stat -e cycles,L1-dcache-loads -- driver will try to force both events to CYCLE counter. This commit implements event type check before forcing events on the special counters. Signed-off-by: Shifrin Dmitry <dmitry.shifrin@syntacore.com> Reviewed-by: Atish Patra <atishp@rivosinc.com> Fixes: cc4c07c89aad ("drivers: perf: Implement perf event mmap support in the SBI backend") Link: https://lore.kernel.org/r/20240729125858.630653-1-dmitry.shifrin@syntacore.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'drivers/perf')
-rw-r--r--drivers/perf/riscv_pmu_sbi.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c
index ae16ecb15f2d..901da688ea3f 100644
--- a/drivers/perf/riscv_pmu_sbi.c
+++ b/drivers/perf/riscv_pmu_sbi.c
@@ -355,7 +355,7 @@ static int pmu_sbi_ctr_get_idx(struct perf_event *event)
* but not in the user access mode as we want to use the other counters
* that support sampling/filtering.
*/
- if (hwc->flags & PERF_EVENT_FLAG_LEGACY) {
+ if ((hwc->flags & PERF_EVENT_FLAG_LEGACY) && (event->attr.type == PERF_TYPE_HARDWARE)) {
if (event->attr.config == PERF_COUNT_HW_CPU_CYCLES) {
cflags |= SBI_PMU_CFG_FLAG_SKIP_MATCH;
cmask = 1;