[PATCH] lib: sbi_pmu: Honor CLEAR_VALUE/AUTO_START for all hardware event types
David E. Garcia Porras
david.garcia at aheadcomputing.com
Fri May 22 07:46:07 PDT 2026
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>
---
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
More information about the opensbi
mailing list