diff mbox series

[v2] lib: sbi: Add missing sscrind and sscfg extensions in sbi_hart_ext[]

Message ID 20240320154531.1496553-1-cleger@rivosinc.com
State Accepted
Headers show
Series [v2] lib: sbi: Add missing sscrind and sscfg extensions in sbi_hart_ext[] | expand

Commit Message

Clément Léger March 20, 2024, 3:45 p.m. UTC
The sbi_hart_ext[] array is missing these two extensions ids. It is
expected that this array contains all the extensions declaration at the
same index of the SBI_HART_EXT_* define. Without this, when adding a new
extension, there is a mismatch between ids and extension names and it
can even display corrupted extension names.

Signed-off-by: Clément Léger <cleger@rivosinc.com>

---

Changes in v2:
 - Add _Static_assert() to check sbi_hart_ext[] array size

---
 lib/sbi/sbi_hart.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Atish Patra March 25, 2024, 9:22 p.m. UTC | #1
On Wed, Mar 20, 2024 at 8:45 AM Clément Léger <cleger@rivosinc.com> wrote:
>
> The sbi_hart_ext[] array is missing these two extensions ids. It is
> expected that this array contains all the extensions declaration at the
> same index of the SBI_HART_EXT_* define. Without this, when adding a new
> extension, there is a mismatch between ids and extension names and it
> can even display corrupted extension names.
>
> Signed-off-by: Clément Léger <cleger@rivosinc.com>
>
> ---
>
> Changes in v2:
>  - Add _Static_assert() to check sbi_hart_ext[] array size
>
> ---
>  lib/sbi/sbi_hart.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> index 3d13694..80efeaa 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -666,8 +666,13 @@ const struct sbi_hart_ext_data sbi_hart_ext[] = {
>         __SBI_HART_EXT_DATA(sdtrig, SBI_HART_EXT_SDTRIG),
>         __SBI_HART_EXT_DATA(smcsrind, SBI_HART_EXT_SMCSRIND),
>         __SBI_HART_EXT_DATA(smcdeleg, SBI_HART_EXT_SMCDELEG),
> +       __SBI_HART_EXT_DATA(sscsrind, SBI_HART_EXT_SSCSRIND),
> +       __SBI_HART_EXT_DATA(ssccfg, SBI_HART_EXT_SSCCFG),
>  };
>

Good catch. I had this included in an earlier version of the patch.
But I was in two minds whether to
add S-mode only extensions  which M-mode doesn't control any states.
I removed it here but forgot to remove it from the SBI_HART_EXT_* defines.

@Anup:
As a general rule, should we include these types of extensions? I just
fear it may blow up in the future.

> +_Static_assert(array_size(sbi_hart_ext) == SBI_HART_EXT_MAX,
> +              "sbi_hart_ext[] array should contain all extensions ids");
> +
>  /**
>   * Get the hart extensions in string format
>   *
> --
> 2.43.0
>
>
> --
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
Heinrich Schuchardt April 8, 2024, 2:55 p.m. UTC | #2
On 20.03.24 16:45, Clément Léger wrote:
> The sbi_hart_ext[] array is missing these two extensions ids. It is
> expected that this array contains all the extensions declaration at the
> same index of the SBI_HART_EXT_* define. Without this, when adding a new
> extension, there is a mismatch between ids and extension names and it
> can even display corrupted extension names.
> 
> Signed-off-by: Clément Léger <cleger@rivosinc.com>
> ---
> 
> Changes in v2:
>   - Add _Static_assert() to check sbi_hart_ext[] array size
> 
> ---
>   lib/sbi/sbi_hart.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> index 3d13694..80efeaa 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -666,8 +666,13 @@ const struct sbi_hart_ext_data sbi_hart_ext[] = {
>   	__SBI_HART_EXT_DATA(sdtrig, SBI_HART_EXT_SDTRIG),
>   	__SBI_HART_EXT_DATA(smcsrind, SBI_HART_EXT_SMCSRIND),
>   	__SBI_HART_EXT_DATA(smcdeleg, SBI_HART_EXT_SMCDELEG),
> +	__SBI_HART_EXT_DATA(sscsrind, SBI_HART_EXT_SSCSRIND),
> +	__SBI_HART_EXT_DATA(ssccfg, SBI_HART_EXT_SSCCFG),
>   };
>   
> +_Static_assert(array_size(sbi_hart_ext) == SBI_HART_EXT_MAX,
> +	       "sbi_hart_ext[] array should contain all extensions ids");
> +
>   /**
>    * Get the hart extensions in string format
>    *

Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
diff mbox series

Patch

diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
index 3d13694..80efeaa 100644
--- a/lib/sbi/sbi_hart.c
+++ b/lib/sbi/sbi_hart.c
@@ -666,8 +666,13 @@  const struct sbi_hart_ext_data sbi_hart_ext[] = {
 	__SBI_HART_EXT_DATA(sdtrig, SBI_HART_EXT_SDTRIG),
 	__SBI_HART_EXT_DATA(smcsrind, SBI_HART_EXT_SMCSRIND),
 	__SBI_HART_EXT_DATA(smcdeleg, SBI_HART_EXT_SMCDELEG),
+	__SBI_HART_EXT_DATA(sscsrind, SBI_HART_EXT_SSCSRIND),
+	__SBI_HART_EXT_DATA(ssccfg, SBI_HART_EXT_SSCCFG),
 };
 
+_Static_assert(array_size(sbi_hart_ext) == SBI_HART_EXT_MAX,
+	       "sbi_hart_ext[] array should contain all extensions ids");
+
 /**
  * Get the hart extensions in string format
  *