[PATCH] sbi: Prevent modification of struct sbi_platform from affecting SBI_PLATFORM_xxx_OFFSET

Anup Patel anup at brainfault.org
Sat Mar 26 21:27:56 PDT 2022


On Wed, Mar 16, 2022 at 7:15 AM Xiang W <wxjstz at 126.com> wrote:
>
> Add static detection to prevent the modification of struct sbi_platform
> from forgetting the modification of SBI_PLATFORM_xxx_OFFSET
>
> Signed-off-by: Xiang W <wxjstz at 126.com>

Please use a shorter patch subject and "include: " prefix.

> ---
>  include/sbi/sbi_platform.h | 48 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 48 insertions(+)
>
> diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h
> index 0b5ae4b..87b582e 100644
> --- a/include/sbi/sbi_platform.h
> +++ b/include/sbi/sbi_platform.h
> @@ -175,6 +175,54 @@ struct sbi_platform {
>         const u32 *hart_index2id;
>  };
>
> +/** Prevent modification of struct sbi_platform from affecting
> + * SBI_PLATFORM_xxx_OFFSET */

This comment block should follow multi-line comment block style
/**
 *  __ xyz __
 */

> +_Static_assert(
> +       offsetof(struct sbi_platform, opensbi_version)
> +               == SBI_PLATFORM_OPENSBI_VERSION_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_OPENSBI_VERSION_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, platform_version)
> +               == SBI_PLATFORM_VERSION_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_VERSION_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, name)
> +               == SBI_PLATFORM_NAME_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_NAME_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, features)
> +               == SBI_PLATFORM_FEATURES_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_FEATURES_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, hart_count)
> +               == SBI_PLATFORM_HART_COUNT_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_HART_COUNT_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, hart_stack_size)
> +               == SBI_PLATFORM_HART_STACK_SIZE_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_HART_STACK_SIZE_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, platform_ops_addr)
> +               == SBI_PLATFORM_OPS_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_OPS_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, firmware_context)
> +               == SBI_PLATFORM_FIRMWARE_CONTEXT_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_FIRMWARE_CONTEXT_OFFSET");
> +_Static_assert(
> +       offsetof(struct sbi_platform, hart_index2id)
> +               == SBI_PLATFORM_HART_INDEX2ID_OFFSET,
> +       "struct sbi_platform definition has changed, please redefine "
> +       "SBI_PLATFORM_HART_INDEX2ID_OFFSET");
> +
>  /** Get pointer to sbi_platform for sbi_scratch pointer */
>  #define sbi_platform_ptr(__s) \
>         ((const struct sbi_platform *)((__s)->platform_addr))
> --
> 2.30.2
>

Otherwise, this looks good to me.

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

I have taken care of the above comments at the time of merging
this patch.

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup



More information about the opensbi mailing list