Commit 941a8e9b authored by Shifrin Dmitry's avatar Shifrin Dmitry Committed by Palmer Dabbelt

perf: riscv: Fix selecting counters in legacy mode

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: default avatarShifrin Dmitry <dmitry.shifrin@syntacore.com>
Reviewed-by: default avatarAtish Patra <atishp@rivosinc.com>
Fixes: cc4c07c8 ("drivers: perf: Implement perf event mmap support in the SBI backend")
Link: https://lore.kernel.org/r/20240729125858.630653-1-dmitry.shifrin@syntacore.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent 57e5c814
...@@ -416,7 +416,7 @@ static int pmu_sbi_ctr_get_idx(struct perf_event *event) ...@@ -416,7 +416,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 * but not in the user access mode as we want to use the other counters
* that support sampling/filtering. * 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) { if (event->attr.config == PERF_COUNT_HW_CPU_CYCLES) {
cflags |= SBI_PMU_CFG_FLAG_SKIP_MATCH; cflags |= SBI_PMU_CFG_FLAG_SKIP_MATCH;
cmask = 1; cmask = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment