[RFC PATCH] lib: sbi_hart: Retrun zero lenght of mhpmcounter when probing failed
Anup Patel
anup at brainfault.org
Tue Oct 27 08:29:13 PDT 2026
On Thu, Sep 10, 2026 at 11:50 PM Evgenii Prokopiev
<eestelle0626 at gmail.com> wrote:
>
> If writing access is not allowed, it will raise a trap, but we increase
> the number of allowed bits to 32 in this approach, which isn't right.
> There must be a write of 0.
>
> Move the operation of increasing allowed bits into the 'if' condition.
>
> Signed-off-by: Evgenii Prokopiev <eestelle0626 at gmail.com>
Good catch!
Reviewed-by: Anup Patel <anup at brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
> lib/sbi/sbi_hart.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> index bee88557..3a9b6c8f 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -450,16 +450,18 @@ static int hart_mhpm_get_allowed_bits(void)
> val = csr_read_allowed(CSR_MHPMCOUNTER3, &trap);
> if (trap.cause)
> return 0;
> +
> + num_bits = sbi_fls(val) + 1;
> }
> - num_bits = sbi_fls(val) + 1;
> #if __riscv_xlen == 32
> csr_write_allowed(CSR_MHPMCOUNTER3H, &trap, val);
> if (!trap.cause) {
> val = csr_read_allowed(CSR_MHPMCOUNTER3H, &trap);
> if (trap.cause)
> return num_bits;
> +
> + num_bits += sbi_fls(val) + 1;
> }
> - num_bits += sbi_fls(val) + 1;
>
> #endif
>
> --
> 2.50.1 (Apple Git-155)
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list