Re: [PATCH] lib: sbi_pmu: Honor CLEAR_VALUE/AUTO_START for all hardware event types

Anup Patel <[email protected]> Fri, 12 Jun 2026 18:53:19 +0530
Newsgroups org.infradead.lists.opensbi
Message-ID <CAK9=C2V_At9_+0nUO8jhqnam7heXkQfe_ykhMhNjBvT=+MOFsQ@mail.gmail.com>
On Fri, May 22, 2026 at 8:16 PM David E. Garcia Porras
<[email protected]> wrote:
>
> sbi_pmu_ctr_cfg_match() only acts on SBI_PMU_CFG_FLAG_CLEAR_VALUE and
> SBI_PMU_CFG_FLAG_AUTO_START when the event type is SBI_PMU_EVENT_TYPE_HW.
> However, pmu_ctr_find_hw() allocates a hardware counter from the same
> hw_event_map for SBI_PMU_EVENT_TYPE_HW_CACHE, SBI_PMU_EVENT_TYPE_HW_RAW,
> and SBI_PMU_EVENT_TYPE_HW_RAW_V2 as well, and the start/clear helpers
> (pmu_ctr_start_hw, pmu_ctr_write_hw) operate on the counter index alone
> and are agnostic to the event type. As a result, when a supervisor
> configures a HW_CACHE/HW_RAW/HW_RAW_V2 event with these flags, the
> counter is programmed and recorded in active_events[] but is never
> cleared or started, requiring an extra SBI call to make it count.
>
> Extend the check to cover all hardware-counter event types so that the
> configuration flags take effect for HW_CACHE and raw events too.
>
> Deliberately avoiding using "not FW" logic to be explicit about HW-backed events only.
>
> Fixes: 13d40f21 ("lib: sbi: Add PMU support")
> Signed-off-by: David E. Garcia Porras <[email protected]>

LGTM.

Reviewed-by: Anup Patel <[email protected]>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  lib/sbi/sbi_pmu.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c
> index 8a9021e2..480a9723 100644
> --- a/lib/sbi/sbi_pmu.c
> +++ b/lib/sbi/sbi_pmu.c
> @@ -946,7 +946,10 @@ int sbi_pmu_ctr_cfg_match(unsigned long cidx_base, unsigned long cidx_mask,
>
>         phs->active_events[ctr_idx] = event_idx;
>  skip_match:
> -       if (event_type == SBI_PMU_EVENT_TYPE_HW) {
> +       if (event_type == SBI_PMU_EVENT_TYPE_HW ||
> +           event_type == SBI_PMU_EVENT_TYPE_HW_CACHE ||
> +           event_type == SBI_PMU_EVENT_TYPE_HW_RAW ||
> +           event_type == SBI_PMU_EVENT_TYPE_HW_RAW_V2) {
>                 if (flags & SBI_PMU_CFG_FLAG_CLEAR_VALUE)
>                         pmu_ctr_write_hw(ctr_idx, 0);
>                 if (flags & SBI_PMU_CFG_FLAG_AUTO_START)
> --
> 2.43.0
>
>
> --
> opensbi mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/opensbi

-- 
opensbi mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/opensbi