riscv: Fix riscv_online_cpu_vec
authorAndrew Jones <ajones@ventanamicro.com>
Tue, 4 Mar 2025 12:00:17 +0000 (13:00 +0100)
committerAlexandre Ghiti <alexghiti@rivosinc.com>
Wed, 19 Mar 2025 14:23:29 +0000 (14:23 +0000)
We shouldn't probe when we already know vector is unsupported and
we should probe when we see we don't yet know whether it's supported.
Furthermore, we should ensure we've set the access type to
unsupported when we don't have vector at all.

Fixes: e7c9d66e313b ("RISC-V: Report vector unaligned access speed hwprobe")
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
Link: https://lore.kernel.org/r/20250304120014.143628-12-ajones@ventanamicro.com
Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
arch/riscv/kernel/unaligned_access_speed.c

index b7a8ff7ba6df43d77aa198e23c0ae22a09907025..161964cf2abce015638976ce9202a96469333c28 100644 (file)
@@ -367,10 +367,12 @@ static void check_vector_unaligned_access(struct work_struct *work __always_unus
 
 static int riscv_online_cpu_vec(unsigned int cpu)
 {
-       if (!has_vector())
+       if (!has_vector()) {
+               per_cpu(vector_misaligned_access, cpu) = RISCV_HWPROBE_MISALIGNED_VECTOR_UNSUPPORTED;
                return 0;
+       }
 
-       if (per_cpu(vector_misaligned_access, cpu) != RISCV_HWPROBE_MISALIGNED_VECTOR_UNSUPPORTED)
+       if (per_cpu(vector_misaligned_access, cpu) != RISCV_HWPROBE_MISALIGNED_VECTOR_UNKNOWN)
                return 0;
 
        check_vector_unaligned_access_emulated(NULL);