[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