diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c index e084005d..75038f91 100644 --- a/lib/sbi/sbi_pmu.c +++ b/lib/sbi/sbi_pmu.c @@ -448,6 +448,8 @@ static int pmu_ctr_start_fw(struct sbi_pmu_hart_state *phs, uint64_t event_data, uint64_t ival, bool ival_update) { + int ret; + if ((event_code >= SBI_PMU_FW_MAX && event_code <= SBI_PMU_FW_RESERVED_MAX) || event_code > SBI_PMU_FW_PLATFORM) @@ -468,9 +470,11 @@ static int pmu_ctr_start_fw(struct sbi_pmu_hart_state *phs, cidx - num_hw_ctrs, ival); - return pmu_dev->fw_counter_start(phs->hartid, + ret = pmu_dev->fw_counter_start(phs->hartid, cidx - num_hw_ctrs, event_data); + if (ret) + return ret; } else { if (ival_update) phs->fw_counters_data[cidx - num_hw_ctrs] = ival;