[PATCH 10/12] lib: sbi: Update sbi_domain_is_assigned_hart() to take a hart index
Anup Patel
anup at brainfault.org
Thu Sep 26 05:54:23 PDT 2024
On Fri, Aug 30, 2024 at 9:19 PM Samuel Holland
<samuel.holland at sifive.com> wrote:
>
> This removes redundant hartid to hartindex conversions from four call
> sites and provides a net reduction in code size.
>
> Signed-off-by: Samuel Holland <samuel.holland at sifive.com>
LGTM.
Reviewed-by: Anup Patel <anup at brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
>
> include/sbi/sbi_domain.h | 4 ++--
> lib/sbi/sbi_dbtr.c | 3 +--
> lib/sbi/sbi_domain.c | 6 +++---
> lib/sbi/sbi_hsm.c | 9 +++++----
> lib/sbi/sbi_sse.c | 5 +++--
> lib/utils/fdt/fdt_fixup.c | 5 +++--
> 6 files changed, 17 insertions(+), 15 deletions(-)
>
> diff --git a/include/sbi/sbi_domain.h b/include/sbi/sbi_domain.h
> index 639f9e57..306783e7 100644
> --- a/include/sbi/sbi_domain.h
> +++ b/include/sbi/sbi_domain.h
> @@ -231,10 +231,10 @@ extern struct sbi_domain *domidx_to_domain_table[];
> /**
> * Check whether given HART is assigned to specified domain
> * @param dom pointer to domain
> - * @param hartid the HART ID
> + * @param hartindex the HART index
> * @return true if HART is assigned to domain otherwise false
> */
> -bool sbi_domain_is_assigned_hart(const struct sbi_domain *dom, u32 hartid);
> +bool sbi_domain_is_assigned_hart(const struct sbi_domain *dom, u32 hartindex);
>
> /**
> * Get the assigned HART mask for given domain
> diff --git a/lib/sbi/sbi_dbtr.c b/lib/sbi/sbi_dbtr.c
> index 5ca29c70..f0e91285 100644
> --- a/lib/sbi/sbi_dbtr.c
> +++ b/lib/sbi/sbi_dbtr.c
> @@ -243,10 +243,9 @@ int sbi_dbtr_setup_shmem(const struct sbi_domain *dom, unsigned long smode,
> unsigned long shmem_phys_lo,
> unsigned long shmem_phys_hi)
> {
> - u32 hartid = current_hartid();
> struct sbi_dbtr_hart_triggers_state *hart_state;
>
> - if (dom && !sbi_domain_is_assigned_hart(dom, hartid)) {
> + if (dom && !sbi_domain_is_assigned_hart(dom, current_hartindex())) {
> sbi_dprintf("%s: calling hart not assigned to this domain\n",
> __func__);
> return SBI_ERR_DENIED;
> diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c
> index 58cd9aaa..92be334d 100644
> --- a/lib/sbi/sbi_domain.c
> +++ b/lib/sbi/sbi_domain.c
> @@ -62,7 +62,7 @@ void sbi_update_hartindex_to_domain(u32 hartindex, struct sbi_domain *dom)
> sbi_scratch_write_type(scratch, void *, domain_hart_ptr_offset, dom);
> }
>
> -bool sbi_domain_is_assigned_hart(const struct sbi_domain *dom, u32 hartid)
> +bool sbi_domain_is_assigned_hart(const struct sbi_domain *dom, u32 hartindex)
> {
> bool ret;
> struct sbi_domain *tdom = (struct sbi_domain *)dom;
> @@ -71,7 +71,7 @@ bool sbi_domain_is_assigned_hart(const struct sbi_domain *dom, u32 hartid)
> return false;
>
> spin_lock(&tdom->assigned_harts_lock);
> - ret = sbi_hartmask_test_hartid(hartid, &tdom->assigned_harts);
> + ret = sbi_hartmask_test_hartindex(hartindex, &tdom->assigned_harts);
> spin_unlock(&tdom->assigned_harts_lock);
>
> return ret;
> @@ -448,7 +448,7 @@ void sbi_domain_dump(const struct sbi_domain *dom, const char *suffix)
> sbi_hartmask_for_each_hartindex(i, dom->possible_harts) {
> j = sbi_hartindex_to_hartid(i);
> sbi_printf("%s%d%s", (k++) ? "," : "",
> - j, sbi_domain_is_assigned_hart(dom, j) ? "*" : "");
> + j, sbi_domain_is_assigned_hart(dom, i) ? "*" : "");
> }
> sbi_printf("\n");
>
> diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c
> index e25dd161..e7e31ad5 100644
> --- a/lib/sbi/sbi_hsm.c
> +++ b/lib/sbi/sbi_hsm.c
> @@ -77,7 +77,7 @@ int sbi_hsm_hart_get_state(const struct sbi_domain *dom, u32 hartid)
> {
> u32 hartindex = sbi_hartid_to_hartindex(hartid);
>
> - if (!sbi_domain_is_assigned_hart(dom, hartid))
> + if (!sbi_domain_is_assigned_hart(dom, hartindex))
> return SBI_EINVAL;
>
> return __sbi_hsm_hart_get_state(hartindex);
> @@ -300,6 +300,7 @@ int sbi_hsm_hart_start(struct sbi_scratch *scratch,
> const struct sbi_domain *dom,
> u32 hartid, ulong saddr, ulong smode, ulong arg1)
> {
> + u32 hartindex = sbi_hartid_to_hartindex(hartid);
> unsigned long init_count, entry_count;
> unsigned int hstate;
> struct sbi_scratch *rscratch;
> @@ -309,13 +310,13 @@ int sbi_hsm_hart_start(struct sbi_scratch *scratch,
> /* For now, we only allow start mode to be S-mode or U-mode. */
> if (smode != PRV_S && smode != PRV_U)
> return SBI_EINVAL;
> - if (dom && !sbi_domain_is_assigned_hart(dom, hartid))
> + if (dom && !sbi_domain_is_assigned_hart(dom, hartindex))
> return SBI_EINVAL;
> if (dom && !sbi_domain_check_addr(dom, saddr, smode,
> SBI_DOMAIN_EXECUTE))
> return SBI_EINVALID_ADDR;
>
> - rscratch = sbi_hartid_to_scratch(hartid);
> + rscratch = sbi_hartindex_to_scratch(hartindex);
> if (!rscratch)
> return SBI_EINVAL;
>
> @@ -355,7 +356,7 @@ int sbi_hsm_hart_start(struct sbi_scratch *scratch,
> (hsm_device_has_hart_secondary_boot() && !init_count)) {
> rc = hsm_device_hart_start(hartid, scratch->warmboot_addr);
> } else {
> - rc = sbi_ipi_raw_send(sbi_hartid_to_hartindex(hartid));
> + rc = sbi_ipi_raw_send(hartindex);
> }
>
> if (!rc)
> diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c
> index 365a878f..ab03b9c7 100644
> --- a/lib/sbi/sbi_sse.c
> +++ b/lib/sbi/sbi_sse.c
> @@ -323,7 +323,7 @@ static int sse_event_set_hart_id_check(struct sbi_sse_event *e,
> if (!sse_event_is_global(e))
> return SBI_EBAD_RANGE;
>
> - if (!sbi_domain_is_assigned_hart(hd, new_hartid))
> + if (!sbi_domain_is_assigned_hart(hd, sbi_hartid_to_hartindex(hartid)))
> return SBI_EINVAL;
>
> hstate = sbi_hsm_hart_get_state(hd, hartid);
> @@ -810,7 +810,8 @@ int sbi_sse_disable(uint32_t event_id)
> int sbi_sse_inject_from_ecall(uint32_t event_id, unsigned long hartid,
> struct sbi_ecall_return *out)
> {
> - if (!sbi_domain_is_assigned_hart(sbi_domain_thishart_ptr(), hartid))
> + if (!sbi_domain_is_assigned_hart(sbi_domain_thishart_ptr(),
> + sbi_hartid_to_hartindex(hartid)))
> return SBI_EINVAL;
>
> return sse_inject_event(event_id, hartid);
> diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c
> index 974b1b88..9e013dfa 100644
> --- a/lib/utils/fdt/fdt_fixup.c
> +++ b/lib/utils/fdt/fdt_fixup.c
> @@ -110,7 +110,7 @@ void fdt_cpu_fixup(void *fdt)
> struct sbi_domain *dom = sbi_domain_thishart_ptr();
> int err, cpu_offset, cpus_offset, len;
> const char *mmu_type;
> - u32 hartid;
> + u32 hartid, hartindex;
>
> err = fdt_open_into(fdt, fdt, fdt_totalsize(fdt) + 32);
> if (err < 0)
> @@ -134,8 +134,9 @@ void fdt_cpu_fixup(void *fdt)
> * 2. MMU is not available for the HART
> */
>
> + hartindex = sbi_hartid_to_hartindex(hartid);
> mmu_type = fdt_getprop(fdt, cpu_offset, "mmu-type", &len);
> - if (!sbi_domain_is_assigned_hart(dom, hartid) ||
> + if (!sbi_domain_is_assigned_hart(dom, hartindex) ||
> !mmu_type || !len)
> fdt_setprop_string(fdt, cpu_offset, "status",
> "disabled");
> --
> 2.45.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list