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

Anup Patel apatel at ventanamicro.com
Fri Jun 12 06:23:19 PDT 2026


On Fri, May 22, 2026 at 8:16 PM David E. Garcia Porras
<david.garcia at aheadcomputing.com> 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 <david.garcia at aheadcomputing.com>

LGTM.

Reviewed-by: Anup Patel <anup at brainfault.org>

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
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list