RISC-V: vector: export VLENB csr in __sc_riscv_v_state
authorAndy Chiu <andy.chiu@sifive.com>
Wed, 16 Aug 2023 15:54:49 +0000 (15:54 +0000)
committerPalmer Dabbelt <palmer@rivosinc.com>
Tue, 22 Aug 2023 20:55:12 +0000 (13:55 -0700)
VLENB is critical for callers of ptrace to reconstruct Vector register
files from the register dump of NT_RISCV_VECTOR. Also, future systems
may will have a writable VLENB, so add it now to potentially save future
compatibility issue.

Fixes: 0c59922c769a ("riscv: Add ptrace vector support")
Signed-off-by: Andy Chiu <andy.chiu@sifive.com>
Link: https://lore.kernel.org/r/20230816155450.26200-3-andy.chiu@sifive.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/include/asm/vector.h
arch/riscv/include/uapi/asm/ptrace.h

index 3d78930cab51381ef7c7fd853049957e285801c7..c5ee07b3df071d16ad956fd62e6981403d9bf133 100644 (file)
@@ -70,8 +70,9 @@ static __always_inline void __vstate_csr_save(struct __riscv_v_ext_state *dest)
                "csrr   %1, " __stringify(CSR_VTYPE) "\n\t"
                "csrr   %2, " __stringify(CSR_VL) "\n\t"
                "csrr   %3, " __stringify(CSR_VCSR) "\n\t"
+               "csrr   %4, " __stringify(CSR_VLENB) "\n\t"
                : "=r" (dest->vstart), "=r" (dest->vtype), "=r" (dest->vl),
-                 "=r" (dest->vcsr) : :);
+                 "=r" (dest->vcsr), "=r" (dest->vlenb) : :);
 }
 
 static __always_inline void __vstate_csr_restore(struct __riscv_v_ext_state *src)
index e17c550986a696bdc19651afaa42d2e91b55c659..283800130614ba4bc98900231641869b376ab059 100644 (file)
@@ -97,6 +97,7 @@ struct __riscv_v_ext_state {
        unsigned long vl;
        unsigned long vtype;
        unsigned long vcsr;
+       unsigned long vlenb;
        void *datap;
        /*
         * In signal handler, datap will be set a correct user stack offset