From 3d29f380a66c2b5608faf7e4f4b0ff3c945d0d64 Mon Sep 17 00:00:00 2001 From: "David E. Garcia Porras" Date: Fri, 22 May 2026 08:46:07 -0600 Subject: [PATCH] lib: sbi_pmu: Honor CLEAR_VALUE/AUTO_START for all hardware event types 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 Reviewed-by: Anup Patel Link: https://lore.kernel.org/r/20260522144608.3433470-1-david.garcia@aheadcomputing.com Signed-off-by: Anup Patel --- 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)