]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RISC-V: KVM: Use ncsr_xyz() in kvm_riscv_vcpu_trap_redirect()
authorAnup Patel <apatel@ventanamicro.com>
Wed, 18 Jun 2025 11:35:27 +0000 (17:05 +0530)
committerAnup Patel <anup@brainfault.org>
Mon, 28 Jul 2025 16:57:20 +0000 (22:27 +0530)
The H-extension CSRs accessed by kvm_riscv_vcpu_trap_redirect() will
trap when KVM RISC-V is running as Guest/VM hence remove these traps
by using ncsr_xyz() instead of csr_xyz().

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Tested-by: Atish Patra <atishp@rivosinc.com>
Reviewed-by: Nutty Liu <liujingqi@lanxincomputing.com>
Link: https://lore.kernel.org/r/20250618113532.471448-8-apatel@ventanamicro.com
Signed-off-by: Anup Patel <anup@brainfault.org>
arch/riscv/kvm/vcpu_exit.c

index 6e0c184127956208413d97e8c78735af99295e09..85c43c83e3b97b46c4074a581189282c7d808542 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/kvm_host.h>
 #include <asm/csr.h>
 #include <asm/insn-def.h>
+#include <asm/kvm_nacl.h>
 
 static int gstage_page_fault(struct kvm_vcpu *vcpu, struct kvm_run *run,
                             struct kvm_cpu_trap *trap)
@@ -135,7 +136,7 @@ unsigned long kvm_riscv_vcpu_unpriv_read(struct kvm_vcpu *vcpu,
 void kvm_riscv_vcpu_trap_redirect(struct kvm_vcpu *vcpu,
                                  struct kvm_cpu_trap *trap)
 {
-       unsigned long vsstatus = csr_read(CSR_VSSTATUS);
+       unsigned long vsstatus = ncsr_read(CSR_VSSTATUS);
 
        /* Change Guest SSTATUS.SPP bit */
        vsstatus &= ~SR_SPP;
@@ -151,15 +152,15 @@ void kvm_riscv_vcpu_trap_redirect(struct kvm_vcpu *vcpu,
        vsstatus &= ~SR_SIE;
 
        /* Update Guest SSTATUS */
-       csr_write(CSR_VSSTATUS, vsstatus);
+       ncsr_write(CSR_VSSTATUS, vsstatus);
 
        /* Update Guest SCAUSE, STVAL, and SEPC */
-       csr_write(CSR_VSCAUSE, trap->scause);
-       csr_write(CSR_VSTVAL, trap->stval);
-       csr_write(CSR_VSEPC, trap->sepc);
+       ncsr_write(CSR_VSCAUSE, trap->scause);
+       ncsr_write(CSR_VSTVAL, trap->stval);
+       ncsr_write(CSR_VSEPC, trap->sepc);
 
        /* Set Guest PC to Guest exception vector */
-       vcpu->arch.guest_context.sepc = csr_read(CSR_VSTVEC);
+       vcpu->arch.guest_context.sepc = ncsr_read(CSR_VSTVEC);
 
        /* Set Guest privilege mode to supervisor */
        vcpu->arch.guest_context.sstatus |= SR_SPP;