[PATCH v6 3/7] lib: sbi_domain: make is_region_subset public

Anup Patel anup at brainfault.org
Thu Dec 18 06:38:51 PST 2025


On Thu, Dec 18, 2025 at 4:14 PM Bo Gan <ganboing at gmail.com> wrote:
>
> The helper function is renamed as sbi_domain_memregion_is_subset,
> and made public in header file.
>
> Also add a convenient helper of sbi_domain_for_each_memregion_idx.
>
> Signed-off-by: Bo Gan <ganboing at gmail.com>

LGTM.

Reviewed-by: Anup Patel <anup at brainfault.org>

Regards,
Anup

> ---
>  include/sbi/sbi_domain.h | 22 ++++++++++++++++++++++
>  lib/sbi/sbi_domain.c     | 23 +++--------------------
>  2 files changed, 25 insertions(+), 20 deletions(-)
>
> diff --git a/include/sbi/sbi_domain.h b/include/sbi/sbi_domain.h
> index 3360e090..c8a6da99 100644
> --- a/include/sbi/sbi_domain.h
> +++ b/include/sbi/sbi_domain.h
> @@ -164,6 +164,25 @@ struct sbi_domain_memregion {
>         unsigned long flags;
>  };
>
> +/** Check if regionA is sub-region of regionB */
> +static inline bool sbi_domain_memregion_is_subset(
> +                               const struct sbi_domain_memregion *regA,
> +                               const struct sbi_domain_memregion *regB)
> +{
> +       ulong regA_start = regA->base;
> +       ulong regA_end = regA->base + (BIT(regA->order) - 1);
> +       ulong regB_start = regB->base;
> +       ulong regB_end = regB->base + (BIT(regB->order) - 1);
> +
> +       if ((regB_start <= regA_start) &&
> +           (regA_start < regB_end) &&
> +           (regB_start < regA_end) &&
> +           (regA_end <= regB_end))
> +               return true;
> +
> +       return false;
> +}
> +
>  /** Representation of OpenSBI domain */
>  struct sbi_domain {
>         /** Node in linked list of domains */
> @@ -222,6 +241,9 @@ extern struct sbi_dlist domain_list;
>  #define sbi_domain_for_each_memregion(__d, __r) \
>         for ((__r) = (__d)->regions; (__r)->order; (__r)++)
>
> +#define sbi_domain_for_each_memregion_idx(__d, __r, __i) \
> +       for ((__r) = (__d)->regions, (__i) = 0; (__r)->order; (__r)++, (__i)++)
> +
>  /**
>   * Check whether given HART is assigned to specified domain
>   * @param dom pointer to domain
> diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c
> index 74cc1e3f..a19bf25b 100644
> --- a/lib/sbi/sbi_domain.c
> +++ b/lib/sbi/sbi_domain.c
> @@ -285,29 +285,12 @@ static bool is_region_valid(const struct sbi_domain_memregion *reg)
>         return true;
>  }
>
> -/** Check if regionA is sub-region of regionB */
> -static bool is_region_subset(const struct sbi_domain_memregion *regA,
> -                            const struct sbi_domain_memregion *regB)
> -{
> -       ulong regA_start = regA->base;
> -       ulong regA_end = regA->base + (BIT(regA->order) - 1);
> -       ulong regB_start = regB->base;
> -       ulong regB_end = regB->base + (BIT(regB->order) - 1);
> -
> -       if ((regB_start <= regA_start) &&
> -           (regA_start < regB_end) &&
> -           (regB_start < regA_end) &&
> -           (regA_end <= regB_end))
> -               return true;
> -
> -       return false;
> -}
> -
>  /** Check if regionA can be replaced by regionB */
>  static bool is_region_compatible(const struct sbi_domain_memregion *regA,
>                                  const struct sbi_domain_memregion *regB)
>  {
> -       if (is_region_subset(regA, regB) && regA->flags == regB->flags)
> +       if (sbi_domain_memregion_is_subset(regA, regB) &&
> +           regA->flags == regB->flags)
>                 return true;
>
>         return false;
> @@ -367,7 +350,7 @@ static const struct sbi_domain_memregion *find_next_subset_region(
>
>         sbi_domain_for_each_memregion(dom, sreg) {
>                 if (sreg == reg || (sreg->base <= addr) ||
> -                   !is_region_subset(sreg, reg))
> +                   !sbi_domain_memregion_is_subset(sreg, reg))
>                         continue;
>
>                 if (!ret || (sreg->base < ret->base) ||
> --
> 2.34.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list