[PATCH] lib: pmu: Fix race on pmu_ctr_write_hw

Jakub Janeczko kuba at ev1.pl
Sat Oct 24 12:57:31 PDT 2026


On platforms where a bit of mcountinhibit cannot be set to 1,
and when on rv32, pmu_ctr_write_hw() was given value whose lower
bits were close to 2^32, the write could miss the lower bit overflow.

Signed-off-by: Jakub Janeczko <kuba at ev1.pl>
---
 lib/sbi/sbi_pmu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c
index e79f6b60..7dbc9407 100644
--- a/lib/sbi/sbi_pmu.c
+++ b/lib/sbi/sbi_pmu.c
@@ -393,8 +393,8 @@ static void pmu_ctr_write_hw(uint32_t cidx, uint64_t ival)
 {
 #if __riscv_xlen == 32
 	csr_write_num(CSR_MCYCLE + cidx, 0);
-	csr_write_num(CSR_MCYCLE + cidx, ival & 0xFFFFFFFF);
 	csr_write_num(CSR_MCYCLEH + cidx, ival >> BITS_PER_LONG);
+	csr_write_num(CSR_MCYCLE + cidx, ival & 0xFFFFFFFF);
 #else
 	csr_write_num(CSR_MCYCLE + cidx, ival);
 #endif
-- 
2.56.0




More information about the opensbi mailing list