Skip to content

Commit 77ba646

Browse files
committed
RISC-V: KVM: Use ncsr_xyz() in kvm_riscv_vcpu_trap_redirect()
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>
1 parent ca539ba commit 77ba646

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

arch/riscv/kvm/vcpu_exit.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <linux/kvm_host.h>
1010
#include <asm/csr.h>
1111
#include <asm/insn-def.h>
12+
#include <asm/kvm_nacl.h>
1213

1314
static int gstage_page_fault(struct kvm_vcpu *vcpu, struct kvm_run *run,
1415
struct kvm_cpu_trap *trap)
@@ -135,7 +136,7 @@ unsigned long kvm_riscv_vcpu_unpriv_read(struct kvm_vcpu *vcpu,
135136
void kvm_riscv_vcpu_trap_redirect(struct kvm_vcpu *vcpu,
136137
struct kvm_cpu_trap *trap)
137138
{
138-
unsigned long vsstatus = csr_read(CSR_VSSTATUS);
139+
unsigned long vsstatus = ncsr_read(CSR_VSSTATUS);
139140

140141
/* Change Guest SSTATUS.SPP bit */
141142
vsstatus &= ~SR_SPP;
@@ -151,15 +152,15 @@ void kvm_riscv_vcpu_trap_redirect(struct kvm_vcpu *vcpu,
151152
vsstatus &= ~SR_SIE;
152153

153154
/* Update Guest SSTATUS */
154-
csr_write(CSR_VSSTATUS, vsstatus);
155+
ncsr_write(CSR_VSSTATUS, vsstatus);
155156

156157
/* Update Guest SCAUSE, STVAL, and SEPC */
157-
csr_write(CSR_VSCAUSE, trap->scause);
158-
csr_write(CSR_VSTVAL, trap->stval);
159-
csr_write(CSR_VSEPC, trap->sepc);
158+
ncsr_write(CSR_VSCAUSE, trap->scause);
159+
ncsr_write(CSR_VSTVAL, trap->stval);
160+
ncsr_write(CSR_VSEPC, trap->sepc);
160161

161162
/* Set Guest PC to Guest exception vector */
162-
vcpu->arch.guest_context.sepc = csr_read(CSR_VSTVEC);
163+
vcpu->arch.guest_context.sepc = ncsr_read(CSR_VSTVEC);
163164

164165
/* Set Guest privilege mode to supervisor */
165166
vcpu->arch.guest_context.sstatus |= SR_SPP;

0 commit comments

Comments
 (0)