Message ID | 20240503-dev-charlie-support_thead_vector_6_9-v6-6-cb7624e65d82@rivosinc.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | riscv: Support vendor extensions and xtheadvector | expand |
On Fri, May 3, 2024 at 11:18 AM Charlie Jenkins <charlie@rivosinc.com> wrote: > > All of the supported vendor extensions that have been listed in > riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo. > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> Reviewed-by: Evan Green <evan@rivosinc.com>
On Fri, May 03, 2024 at 11:18:21AM -0700, Charlie Jenkins wrote: > All of the supported vendor extensions that have been listed in > riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo. > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> This seems fine, thanks for updating this interface :) Reviewed-by: Conor Dooley <conor.dooley@microchip.com> Cheers, Conor.
On Tue, May 07, 2024 at 06:03:19PM +0100, Conor Dooley wrote: > On Fri, May 03, 2024 at 11:18:21AM -0700, Charlie Jenkins wrote: > > All of the supported vendor extensions that have been listed in > > riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo. > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > This seems fine, thanks for updating this interface :) > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com> Hmm, actually the automation on patchwork is complaining a bunch about the series, but I think that's mostly false positives except for this patch. The nommu defconfigs are prob the easiest way to reproduce this: /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:41:55: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'vendor_bitmap' /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:42:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'per_hart_vendor_bitmap'; did you mean 'per_hart_isa_bitmap'? /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:43:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'bitmap_size' Cheers, Conor.
On Fri, May 10, 2024 at 09:50:32PM +0100, Conor Dooley wrote: > On Tue, May 07, 2024 at 06:03:19PM +0100, Conor Dooley wrote: > > On Fri, May 03, 2024 at 11:18:21AM -0700, Charlie Jenkins wrote: > > > All of the supported vendor extensions that have been listed in > > > riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo. > > > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > > > This seems fine, thanks for updating this interface :) > > > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com> > > Hmm, actually the automation on patchwork is complaining a bunch about > the series, but I think that's mostly false positives except for this > patch. The nommu defconfigs are prob the easiest way to reproduce this: > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:41:55: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'vendor_bitmap' > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:42:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'per_hart_vendor_bitmap'; did you mean 'per_hart_isa_bitmap'? > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:43:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'bitmap_size' > > Cheers, > Conor. The false negatives always throw me off. The errors are also offset by one patch. This was actually introduced in the following patch "riscv: Introduce vendor variants of extension helpers" because I accidentally fixed this issue in the patch "riscv: cpufeature: Extract common elements from extension checking" instead of the one it was introduced in. - Charlie
On Fri, May 10, 2024 at 02:25:26PM -0700, Charlie Jenkins wrote: > On Fri, May 10, 2024 at 09:50:32PM +0100, Conor Dooley wrote: > > On Tue, May 07, 2024 at 06:03:19PM +0100, Conor Dooley wrote: > > > On Fri, May 03, 2024 at 11:18:21AM -0700, Charlie Jenkins wrote: > > > > All of the supported vendor extensions that have been listed in > > > > riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo. > > > > > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > > > > > This seems fine, thanks for updating this interface :) > > > > > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com> > > > > Hmm, actually the automation on patchwork is complaining a bunch about > > the series, but I think that's mostly false positives except for this > > patch. The nommu defconfigs are prob the easiest way to reproduce this: > > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:41:55: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'vendor_bitmap' > > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:42:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'per_hart_vendor_bitmap'; did you mean 'per_hart_isa_bitmap'? > > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:43:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'bitmap_size' > > > > Cheers, > > Conor. > > The false negatives always throw me off. Aye, it's pretty frustrating for me trying to report anything. Any time a bunch of headers change produces a bunch of file rebuilds and therefore warnings. That should in theory be caught by the fact that we apply the patch & build, jump back to HEAD~1, build that & grab the "before" warning state and then jump forward, rebuild the patch and gather the "after" state. The idea is that that is an apples:apples comparison as the same files will need to be rebuilt for both but it is falling over somewhere. Maybe I'll have time to look into that soonTM. > The errors are also offset by > one patch. Ye, that's my bad I think. In a rush off to another patch before the thought I had on it left my brain and just pressed reply on the wrong email. Sorry bout that :) > This was actually introduced in the following patch "riscv: > Introduce vendor variants of extension helpers" because I accidentally > fixed this issue in the patch "riscv: cpufeature: Extract common > elements from extension checking" instead of the one it was introduced > in.
On Fri, May 10, 2024 at 10:32:19PM +0100, Conor Dooley wrote: > On Fri, May 10, 2024 at 02:25:26PM -0700, Charlie Jenkins wrote: > > On Fri, May 10, 2024 at 09:50:32PM +0100, Conor Dooley wrote: > > > On Tue, May 07, 2024 at 06:03:19PM +0100, Conor Dooley wrote: > > > > On Fri, May 03, 2024 at 11:18:21AM -0700, Charlie Jenkins wrote: > > > > > All of the supported vendor extensions that have been listed in > > > > > riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo. > > > > > > > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > > > > > > > This seems fine, thanks for updating this interface :) > > > > > > > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com> > > > > > > Hmm, actually the automation on patchwork is complaining a bunch about > > > the series, but I think that's mostly false positives except for this > > > patch. The nommu defconfigs are prob the easiest way to reproduce this: > > > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:41:55: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'vendor_bitmap' > > > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:42:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'per_hart_vendor_bitmap'; did you mean 'per_hart_isa_bitmap'? > > > /build/tmp.QPMRM3oUNu/arch/riscv/kernel/vendor_extensions.c:43:60: error: 'struct riscv_isa_vendor_ext_data_list' has no member named 'bitmap_size' > > > > > > Cheers, > > > Conor. > > > > The false negatives always throw me off. > > Aye, it's pretty frustrating for me trying to report anything. Any time > a bunch of headers change produces a bunch of file rebuilds and > therefore warnings. That should in theory be caught by the fact that we > apply the patch & build, jump back to HEAD~1, build that & grab the > "before" warning state and then jump forward, rebuild the patch and > gather the "after" state. The idea is that that is an apples:apples > comparison as the same files will need to be rebuilt for both but it is > falling over somewhere. Maybe I'll have time to look into that soonTM. > > > The errors are also offset by > > one patch. > > Ye, that's my bad I think. In a rush off to another patch before the > thought I had on it left my brain and just pressed reply on the wrong > email. Sorry bout that :) > The error message in full is: Patch 7/17: Test 2/12: .github/scripts/patches/tests/build_rv64_clang_allmodconfig.sh Redirect to /build/tmp.OCcmyhkGEw and /build/tmp.TsjyVLqMfy Tree base: fefb1e9ecc34 ("riscv: Add vendor extensions to /proc/cpuinfo") Building the whole tree with the patch ../arch/riscv/kernel/vendor_extensions.c:41:42: error: no member named 'vendor_bitmap' in 'struct riscv_isa_vendor_ext_data_list' ../arch/riscv/kernel/vendor_extensions.c:42:46: error: no member named 'per_hart_vendor_bitmap' in 'struct riscv_isa_vendor_ext_data_list'; did you mean 'per_hart_isa_bitmap'? ../arch/riscv/kernel/vendor_extensions.c:43:47: error: no member named 'bitmap_size' in 'struct riscv_isa_vendor_ext_data_list' It knows it's on patch 7 but then it prints the title of patch 6. - Charlie > > This was actually introduced in the following patch "riscv: > > Introduce vendor variants of extension helpers" because I accidentally > > fixed this issue in the patch "riscv: cpufeature: Extract common > > elements from extension checking" instead of the one it was introduced > > in. >
diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c index d11d6320fb0d..2a7924dd809b 100644 --- a/arch/riscv/kernel/cpu.c +++ b/arch/riscv/kernel/cpu.c @@ -16,6 +16,7 @@ #include <asm/sbi.h> #include <asm/smp.h> #include <asm/pgtable.h> +#include <asm/vendor_extensions.h> bool arch_match_cpu_phys_id(int cpu, u64 phys_id) { @@ -203,7 +204,33 @@ arch_initcall(riscv_cpuinfo_init); #ifdef CONFIG_PROC_FS -static void print_isa(struct seq_file *f, const unsigned long *isa_bitmap) +#define ALL_CPUS -1 + +static void print_vendor_isa(struct seq_file *f, int cpu) +{ + struct riscv_isavendorinfo *vendor_bitmap; + struct riscv_isa_vendor_ext_data_list *ext_list; + const struct riscv_isa_ext_data *ext_data; + + for (int i = 0; i < riscv_isa_vendor_ext_list_size; i++) { + ext_list = riscv_isa_vendor_ext_list[i]; + ext_data = riscv_isa_vendor_ext_list[i]->ext_data; + + if (cpu == ALL_CPUS) + vendor_bitmap = &ext_list->all_harts_isa_bitmap; + else + vendor_bitmap = &ext_list->per_hart_isa_bitmap[cpu]; + + for (int j = 0; j < ext_list->ext_data_count; j++) { + if (!__riscv_isa_extension_available(vendor_bitmap->isa, ext_data[j].id)) + continue; + + seq_printf(f, "_%s", ext_data[j].name); + } + } +} + +static void print_isa(struct seq_file *f, const unsigned long *isa_bitmap, int cpu) { if (IS_ENABLED(CONFIG_32BIT)) @@ -222,6 +249,8 @@ static void print_isa(struct seq_file *f, const unsigned long *isa_bitmap) seq_printf(f, "%s", riscv_isa_ext[i].name); } + print_vendor_isa(f, cpu); + seq_puts(f, "\n"); } @@ -284,7 +313,7 @@ static int c_show(struct seq_file *m, void *v) * line. */ seq_puts(m, "isa\t\t: "); - print_isa(m, NULL); + print_isa(m, NULL, ALL_CPUS); print_mmu(m); if (acpi_disabled) { @@ -306,7 +335,7 @@ static int c_show(struct seq_file *m, void *v) * additional extensions not present across all harts. */ seq_puts(m, "hart isa\t: "); - print_isa(m, hart_isa[cpu_id].isa); + print_isa(m, hart_isa[cpu_id].isa, cpu_id); seq_puts(m, "\n"); return 0;
All of the supported vendor extensions that have been listed in riscv_isa_vendor_ext_list can be exported through /proc/cpuinfo. Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> --- arch/riscv/kernel/cpu.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-)