diff mbox series

[RFC,1/3] riscv: Correctly print supported extensions

Message ID 2d536b65-e6fd-873f-ed34-4aab7cca4771@irq.a4lg.com (mailing list archive)
State New, archived
Headers show
Series [RFC,1/3] riscv: Correctly print supported extensions | expand

Commit Message

Tsukasa OI Nov. 20, 2021, 8:53 a.m. UTC
This commit replaces BITS_PER_LONG with magic number 26.

Current ISA pretty-printing code expects extension 'a' (bit 0) through
'z' (bit 25).  Although bit 26 and higher is not currently used (thus never
cause an issue in practice), it will be an annoying problem if we start to
use those in the future.

This commit disables printing high bits for now.

Signed-off-by: Tsukasa OI <research_trasio@irq.a4lg.com>
---
 arch/riscv/kernel/cpufeature.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Ben Dooks Nov. 22, 2021, 12:14 p.m. UTC | #1
On 20/11/2021 08:53, Tsukasa OI wrote:
> This commit replaces BITS_PER_LONG with magic number 26.
> 
> Current ISA pretty-printing code expects extension 'a' (bit 0) through
> 'z' (bit 25).  Although bit 26 and higher is not currently used (thus never
> cause an issue in practice), it will be an annoying problem if we start to
> use those in the future.
> 
> This commit disables printing high bits for now.
> 
> Signed-off-by: Tsukasa OI <research_trasio@irq.a4lg.com>
> ---
>   arch/riscv/kernel/cpufeature.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
> index d959d207a40d..6f2bf6ae4ae2 100644
> --- a/arch/riscv/kernel/cpufeature.c
> +++ b/arch/riscv/kernel/cpufeature.c
> @@ -63,7 +63,7 @@ void __init riscv_fill_hwcap(void)
>   {
>   	struct device_node *node;
>   	const char *isa;
> -	char print_str[BITS_PER_LONG + 1];
> +	char print_str[26 + 1];
>   	size_t i, j, isa_len;
>   	static unsigned long isa2hwcap[256] = {0};
>   
> @@ -133,13 +133,13 @@ void __init riscv_fill_hwcap(void)
>   	}
>   
>   	memset(print_str, 0, sizeof(print_str));
> -	for (i = 0, j = 0; i < BITS_PER_LONG; i++)
> +	for (i = 0, j = 0; i < 26; i++)
>   		if (riscv_isa[0] & BIT_MASK(i))
>   			print_str[j++] = (char)('a' + i);
>   	pr_info("riscv: ISA extensions %s\n", print_str);
>   
>   	memset(print_str, 0, sizeof(print_str));
> -	for (i = 0, j = 0; i < BITS_PER_LONG; i++)
> +	for (i = 0, j = 0; i < 26; i++)
>   		if (elf_hwcap & BIT_MASK(i))
>   			print_str[j++] = (char)('a' + i);
>   	pr_info("riscv: ELF capabilities %s\n", print_str);
> 

Maybe add a warn on if there are bits set between 26 and BITS_PER_LONG ?
Andreas Schwab Nov. 22, 2021, 12:35 p.m. UTC | #2
On Nov 20 2021, Tsukasa OI wrote:

> This commit replaces BITS_PER_LONG with magic number 26.
>
> Current ISA pretty-printing code expects extension 'a' (bit 0) through
> 'z' (bit 25).  Although bit 26 and higher is not currently used (thus never
> cause an issue in practice), it will be an annoying problem if we start to
> use those in the future.

Perhaps replace 26 by 'z' - 'a' + 1?

Andreas.
Tsukasa OI Nov. 23, 2021, 1:25 a.m. UTC | #3
On 2021/11/22 21:35, Andreas Schwab wrote:
> On Nov 20 2021, Tsukasa OI wrote:
> 
>> This commit replaces BITS_PER_LONG with magic number 26.
>>
>> Current ISA pretty-printing code expects extension 'a' (bit 0) through
>> 'z' (bit 25).  Although bit 26 and higher is not currently used (thus never
>> cause an issue in practice), it will be an annoying problem if we start to
>> use those in the future.
> 
> Perhaps replace 26 by 'z' - 'a' + 1?

That's not bad. Possibly I can define:
#define NUM_ALPHA_EXTS ('z' - 'a' + 1)

I will submit RFC PATCH v2 by end of this week (I found several minor bugs in 
"riscv,isa" parser [patch 2,3] anyway) so I'll rewrite it.

Thanks!
Tsukasa,

> 
> Andreas.
>
Tsukasa OI Nov. 23, 2021, 1:32 a.m. UTC | #4
On 2021/11/22 21:14, Ben Dooks wrote:
> 
> Maybe add a warn on if there are bits set between 26 and BITS_PER_LONG ?
> 

I think that's not necessary  because riscv_isa[0] and elf_hwcap on the
current parser will not have higher bits.  This commit is just for future-
proofing (not to break anything when we extend feature bits) and adding
warning message now feels a bit ... too much.
diff mbox series

Patch

diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c
index d959d207a40d..6f2bf6ae4ae2 100644
--- a/arch/riscv/kernel/cpufeature.c
+++ b/arch/riscv/kernel/cpufeature.c
@@ -63,7 +63,7 @@  void __init riscv_fill_hwcap(void)
 {
 	struct device_node *node;
 	const char *isa;
-	char print_str[BITS_PER_LONG + 1];
+	char print_str[26 + 1];
 	size_t i, j, isa_len;
 	static unsigned long isa2hwcap[256] = {0};
 
@@ -133,13 +133,13 @@  void __init riscv_fill_hwcap(void)
 	}
 
 	memset(print_str, 0, sizeof(print_str));
-	for (i = 0, j = 0; i < BITS_PER_LONG; i++)
+	for (i = 0, j = 0; i < 26; i++)
 		if (riscv_isa[0] & BIT_MASK(i))
 			print_str[j++] = (char)('a' + i);
 	pr_info("riscv: ISA extensions %s\n", print_str);
 
 	memset(print_str, 0, sizeof(print_str));
-	for (i = 0, j = 0; i < BITS_PER_LONG; i++)
+	for (i = 0, j = 0; i < 26; i++)
 		if (elf_hwcap & BIT_MASK(i))
 			print_str[j++] = (char)('a' + i);
 	pr_info("riscv: ELF capabilities %s\n", print_str);