diff mbox series

lib: sbi: improve the definition of SBI_IPI_EVENT_MAX

Message ID 20230821141145.23695-1-wxjstz@126.com
State Accepted
Headers show
Series lib: sbi: improve the definition of SBI_IPI_EVENT_MAX | expand

Commit Message

Xiang W Aug. 21, 2023, 2:11 p.m. UTC
The previous definition had the assumption that the machine word length
is equal to the word length of LONG. Remove this assumption and add a
static check to prevent errors in subsequent modifications.

Signed-off-by: Xiang W <wxjstz@126.com>
---
 include/sbi/sbi_ipi.h | 2 +-
 lib/sbi/sbi_ipi.c     | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

Comments

Anup Patel Sept. 6, 2023, 11:43 a.m. UTC | #1
On Mon, Aug 21, 2023 at 7:44 PM Xiang W <wxjstz@126.com> wrote:
>
> The previous definition had the assumption that the machine word length
> is equal to the word length of LONG. Remove this assumption and add a
> static check to prevent errors in subsequent modifications.
>
> Signed-off-by: Xiang W <wxjstz@126.com>

Looks good to me.

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

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  include/sbi/sbi_ipi.h | 2 +-
>  lib/sbi/sbi_ipi.c     | 5 +++++
>  2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/include/sbi/sbi_ipi.h b/include/sbi/sbi_ipi.h
> index c64f422..6b5e260 100644
> --- a/include/sbi/sbi_ipi.h
> +++ b/include/sbi/sbi_ipi.h
> @@ -14,7 +14,7 @@
>
>  /* clang-format off */
>
> -#define SBI_IPI_EVENT_MAX                      __riscv_xlen
> +#define SBI_IPI_EVENT_MAX                      (8 * __SIZEOF_LONG__)
>
>  /* clang-format on */
>
> diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c
> index ad09154..0d8edab 100644
> --- a/lib/sbi/sbi_ipi.c
> +++ b/lib/sbi/sbi_ipi.c
> @@ -27,6 +27,11 @@ struct sbi_ipi_data {
>         unsigned long ipi_type;
>  };
>
> +_Static_assert(
> +       8 * sizeof(((struct sbi_ipi_data*)0)->ipi_type) == SBI_IPI_EVENT_MAX,
> +       "type of sbi_ipi_data.ipi_type has changed, please redefine SBI_IPI_EVENT_MAX"
> +       );
> +
>  static unsigned long ipi_data_off;
>  static const struct sbi_ipi_device *ipi_dev = NULL;
>  static const struct sbi_ipi_event_ops *ipi_ops_array[SBI_IPI_EVENT_MAX];
> --
> 2.40.1
>
>
> --
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
diff mbox series

Patch

diff --git a/include/sbi/sbi_ipi.h b/include/sbi/sbi_ipi.h
index c64f422..6b5e260 100644
--- a/include/sbi/sbi_ipi.h
+++ b/include/sbi/sbi_ipi.h
@@ -14,7 +14,7 @@ 
 
 /* clang-format off */
 
-#define SBI_IPI_EVENT_MAX			__riscv_xlen
+#define SBI_IPI_EVENT_MAX			(8 * __SIZEOF_LONG__)
 
 /* clang-format on */
 
diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c
index ad09154..0d8edab 100644
--- a/lib/sbi/sbi_ipi.c
+++ b/lib/sbi/sbi_ipi.c
@@ -27,6 +27,11 @@  struct sbi_ipi_data {
 	unsigned long ipi_type;
 };
 
+_Static_assert(
+	8 * sizeof(((struct sbi_ipi_data*)0)->ipi_type) == SBI_IPI_EVENT_MAX,
+	"type of sbi_ipi_data.ipi_type has changed, please redefine SBI_IPI_EVENT_MAX"
+	);
+
 static unsigned long ipi_data_off;
 static const struct sbi_ipi_device *ipi_dev = NULL;
 static const struct sbi_ipi_event_ops *ipi_ops_array[SBI_IPI_EVENT_MAX];