aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtish Patra <atishp@rivosinc.com>2024-12-04 16:43:47 -0800
committerAnup Patel <anup@brainfault.org>2024-12-15 14:13:12 +0530
commit51dbc57fc7f0d6da5e43fac8a49f63fb110d527b (patch)
tree2636b7caab7af044c9ee2f681a96ea7641af4481
parent0928ca21bcbdcc925e500b99a046e736d9792e5c (diff)
downloadopensbi-51dbc57fc7f0d6da5e43fac8a49f63fb110d527b.zip
opensbi-51dbc57fc7f0d6da5e43fac8a49f63fb110d527b.tar.gz
opensbi-51dbc57fc7f0d6da5e43fac8a49f63fb110d527b.tar.bz2
lib: sbi_pmu: Verify the raw events first during event info
The raw events have same event_idx. Thus, the event info sanity check only relies on the select mask. The raw event check should be done first so that regular hardware events can be verified using event idx range check. Fixes: e4345842168b ("lib: sbi_pmu: Implement SBI PMU event info function") Signed-off-by: Atish Patra <atishp@rivosinc.com> Reviewed-by: Anup Patel <anup@brainfault.org>
-rw-r--r--lib/sbi/sbi_pmu.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c
index dca52eb..73ef0ca 100644
--- a/lib/sbi/sbi_pmu.c
+++ b/lib/sbi/sbi_pmu.c
@@ -1014,20 +1014,19 @@ int sbi_pmu_event_get_info(unsigned long shmem_phys_lo, unsigned long shmem_phys
} else {
for (j = 0; j < num_hw_events; j++) {
temp = &hw_event_map[j];
- if (temp->start_idx <= event_idx && event_idx <= temp->end_idx) {
- found = true;
- break;
- }
/* For raw events, event data is used as the select value */
if (event_idx == SBI_PMU_EVENT_RAW_IDX ||
event_idx == SBI_PMU_EVENT_RAW_V2_IDX) {
- uint64_t select_mask = temp->select_mask;
-
/* just match the selector */
- if (temp->select == (einfo[i].event_data & select_mask)) {
+ if (temp->select == (einfo[i].event_data &
+ temp->select_mask)) {
found = true;
break;
}
+ } else if (temp->start_idx <= event_idx &&
+ event_idx <= temp->end_idx) {
+ found = true;
+ break;
}
}
if (found)