From: Alexandre Ghiti Date: Thu, 13 Apr 2023 14:02:19 +0000 (+0200) Subject: lib: sbi: Fix counter index calculation for SBI_PMU_CFG_FLAG_SKIP_MATCH X-Git-Tag: v1.3~44 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=674e0199b23effebfc5311d09b636ca9b46cde7e;p=platform%2Fkernel%2Fopensbi.git lib: sbi: Fix counter index calculation for SBI_PMU_CFG_FLAG_SKIP_MATCH As per the SBI specification, we should "unconditionally select the first counter from the set of counters specified by the counter_idx_base and counter_idx_mask", so implement this behaviour. Suggested-by: Atish Patra Signed-off-by: Alexandre Ghiti Reviewed-by: Atish Patra --- diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c index f28c9f5..939f29d 100644 --- a/lib/sbi/sbi_pmu.c +++ b/lib/sbi/sbi_pmu.c @@ -736,10 +736,15 @@ int sbi_pmu_ctr_cfg_match(unsigned long cidx_base, unsigned long cidx_mask, /* The caller wants to skip the match because it already knows the * counter idx for the given event. Verify that the counter idx * is still valid. + * As per the specification, we should "unconditionally select + * the first counter from the set of counters specified by the + * counter_idx_base and counter_idx_mask". */ - if (active_events[hartid][cidx_base] == SBI_PMU_EVENT_IDX_INVALID) + unsigned long cidx_first = cidx_base + sbi_ffs(cidx_mask); + + if (active_events[hartid][cidx_first] == SBI_PMU_EVENT_IDX_INVALID) return SBI_EINVAL; - ctr_idx = cidx_base; + ctr_idx = cidx_first; goto skip_match; }