[PATCH 1/2] lib: utils/timer: Optimize current hart scratch access
Anup Patel
anup at brainfault.org
Tue Mar 19 22:36:52 PDT 2024
On Mon, Mar 18, 2024 at 8:19 PM Samuel Holland
<samuel.holland at sifive.com> wrote:
>
> The address of the local scratch area is stored in each hart's mscratch
> CSR. It is more efficient to read the CSR than to compute the address
> from the hart ID.
>
> Signed-off-by: Samuel Holland <samuel.holland at sifive.com>
LGTM.
Reviewed-by: Anup Patel <anup at brainfault.org>
Regards,
Anup
> ---
>
> lib/utils/timer/aclint_mtimer.c | 18 +++---------------
> 1 file changed, 3 insertions(+), 15 deletions(-)
>
> diff --git a/lib/utils/timer/aclint_mtimer.c b/lib/utils/timer/aclint_mtimer.c
> index 271e6252..9acb26eb 100644
> --- a/lib/utils/timer/aclint_mtimer.c
> +++ b/lib/utils/timer/aclint_mtimer.c
> @@ -72,14 +72,10 @@ static u64 mtimer_value(void)
> static void mtimer_event_stop(void)
> {
> u32 target_hart = current_hartid();
> - struct sbi_scratch *scratch;
> + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
> struct aclint_mtimer_data *mt;
> u64 *time_cmp;
>
> - scratch = sbi_hartid_to_scratch(target_hart);
> - if (!scratch)
> - return;
> -
> mt = mtimer_get_hart_data_ptr(scratch);
> if (!mt)
> return;
> @@ -92,14 +88,10 @@ static void mtimer_event_stop(void)
> static void mtimer_event_start(u64 next_event)
> {
> u32 target_hart = current_hartid();
> - struct sbi_scratch *scratch;
> + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
> struct aclint_mtimer_data *mt;
> u64 *time_cmp;
>
> - scratch = sbi_hartid_to_scratch(target_hart);
> - if (!scratch)
> - return;
> -
> mt = mtimer_get_hart_data_ptr(scratch);
> if (!mt)
> return;
> @@ -155,13 +147,9 @@ int aclint_mtimer_warm_init(void)
> {
> u64 *mt_time_cmp;
> u32 target_hart = current_hartid();
> - struct sbi_scratch *scratch;
> + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
> struct aclint_mtimer_data *mt;
>
> - scratch = sbi_hartid_to_scratch(target_hart);
> - if (!scratch)
> - return SBI_ENOENT;
> -
> mt = mtimer_get_hart_data_ptr(scratch);
> if (!mt)
> return SBI_ENODEV;
> --
> 2.43.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list