[PATCH 1/2] lib: sbi_pmu: ensure update hpm counter before starting counting

Guo Ren guoren at kernel.org
Sat Aug 12 05:05:27 PDT 2023


Hi Junqiang,

Could you help test this patch series on unmatched?

On Sat, Aug 12, 2023 at 1:06 PM Inochi Amaoto <inochiama at outlook.com> wrote:
>
> From: "haijiao.liu at sophgo.com" <haijiao.liu at sophgo.com>
>
> When detecting features of PMU, the hpm counter may be written to some
> value, this will cause some unexpected behavior in some cases. So ensure
> the hpm counter is updated before starting the counter.
>
> Signed-off-by: haijiao.liu at sophgo.com <haijiao.liu at sophgo.com>
> ---
>  lib/sbi/sbi_pmu.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c
> index adb9f18..f5507f2 100644
> --- a/lib/sbi/sbi_pmu.c
> +++ b/lib/sbi/sbi_pmu.c
> @@ -353,8 +353,11 @@ static int pmu_ctr_start_hw(uint32_t cidx, uint64_t ival, bool ival_update)
>         if (cidx >= num_hw_ctrs || cidx == 1)
>                 return SBI_EINVAL;
>
> -       if (sbi_hart_priv_version(scratch) < SBI_HART_PRIV_VER_1_11)
> -               goto skip_inhibit_update;
> +       if (sbi_hart_priv_version(scratch) < SBI_HART_PRIV_VER_1_11) {
> +               if (ival_update)
> +                       pmu_ctr_write_hw(cidx, ival);
> +               return 0;
> +       }
>
>         /*
>          * Some of the hardware may not support mcountinhibit but perf stat
> @@ -370,12 +373,12 @@ static int pmu_ctr_start_hw(uint32_t cidx, uint64_t ival, bool ival_update)
>                 pmu_ctr_enable_irq_hw(cidx);
>         if (pmu_dev && pmu_dev->hw_counter_enable_irq)
>                 pmu_dev->hw_counter_enable_irq(cidx);
> -       csr_write(CSR_MCOUNTINHIBIT, mctr_inhbt);
>
> -skip_inhibit_update:
>         if (ival_update)
>                 pmu_ctr_write_hw(cidx, ival);
>
> +       csr_write(CSR_MCOUNTINHIBIT, mctr_inhbt);
> +
>         return 0;
>  }
>
> --
> 2.34.1
>


-- 
Best Regards
 Guo Ren



More information about the opensbi mailing list