Skip to content

Commit f074158

Browse files
committed
Merge tag 'kvm-riscv-6.9-1' of https://github.com/kvm-riscv/linux into HEAD
KVM/riscv changes for 6.9 - Exception and interrupt handling for selftests - Sstc (aka arch_timer) selftest - Forward seed CSR access to KVM userspace - Ztso extension support for Guest/VM - Zacas extension support for Guest/VM
2 parents 961e2bf + d8c0831 commit f074158

File tree

18 files changed

+1380
-307
lines changed

18 files changed

+1380
-307
lines changed

arch/riscv/include/uapi/asm/kvm.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ enum KVM_RISCV_ISA_EXT_ID {
165165
KVM_RISCV_ISA_EXT_ZVFH,
166166
KVM_RISCV_ISA_EXT_ZVFHMIN,
167167
KVM_RISCV_ISA_EXT_ZFA,
168+
KVM_RISCV_ISA_EXT_ZTSO,
169+
KVM_RISCV_ISA_EXT_ZACAS,
168170
KVM_RISCV_ISA_EXT_MAX,
169171
};
170172

arch/riscv/kvm/vcpu_insn.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <linux/bitops.h>
88
#include <linux/kvm_host.h>
99

10+
#include <asm/cpufeature.h>
11+
1012
#define INSN_OPCODE_MASK 0x007c
1113
#define INSN_OPCODE_SHIFT 2
1214
#define INSN_OPCODE_SYSTEM 28
@@ -213,9 +215,20 @@ struct csr_func {
213215
unsigned long wr_mask);
214216
};
215217

218+
static int seed_csr_rmw(struct kvm_vcpu *vcpu, unsigned int csr_num,
219+
unsigned long *val, unsigned long new_val,
220+
unsigned long wr_mask)
221+
{
222+
if (!riscv_isa_extension_available(vcpu->arch.isa, ZKR))
223+
return KVM_INSN_ILLEGAL_TRAP;
224+
225+
return KVM_INSN_EXIT_TO_USER_SPACE;
226+
}
227+
216228
static const struct csr_func csr_funcs[] = {
217229
KVM_RISCV_VCPU_AIA_CSR_FUNCS
218230
KVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS
231+
{ .base = CSR_SEED, .count = 1, .func = seed_csr_rmw },
219232
};
220233

221234
/**

arch/riscv/kvm/vcpu_onereg.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ static const unsigned long kvm_isa_ext_arr[] = {
4040
KVM_ISA_EXT_ARR(SVINVAL),
4141
KVM_ISA_EXT_ARR(SVNAPOT),
4242
KVM_ISA_EXT_ARR(SVPBMT),
43+
KVM_ISA_EXT_ARR(ZACAS),
4344
KVM_ISA_EXT_ARR(ZBA),
4445
KVM_ISA_EXT_ARR(ZBB),
4546
KVM_ISA_EXT_ARR(ZBC),
@@ -66,6 +67,7 @@ static const unsigned long kvm_isa_ext_arr[] = {
6667
KVM_ISA_EXT_ARR(ZKSED),
6768
KVM_ISA_EXT_ARR(ZKSH),
6869
KVM_ISA_EXT_ARR(ZKT),
70+
KVM_ISA_EXT_ARR(ZTSO),
6971
KVM_ISA_EXT_ARR(ZVBB),
7072
KVM_ISA_EXT_ARR(ZVBC),
7173
KVM_ISA_EXT_ARR(ZVFH),
@@ -117,6 +119,7 @@ static bool kvm_riscv_vcpu_isa_disable_allowed(unsigned long ext)
117119
case KVM_RISCV_ISA_EXT_SSTC:
118120
case KVM_RISCV_ISA_EXT_SVINVAL:
119121
case KVM_RISCV_ISA_EXT_SVNAPOT:
122+
case KVM_RISCV_ISA_EXT_ZACAS:
120123
case KVM_RISCV_ISA_EXT_ZBA:
121124
case KVM_RISCV_ISA_EXT_ZBB:
122125
case KVM_RISCV_ISA_EXT_ZBC:
@@ -141,6 +144,7 @@ static bool kvm_riscv_vcpu_isa_disable_allowed(unsigned long ext)
141144
case KVM_RISCV_ISA_EXT_ZKSED:
142145
case KVM_RISCV_ISA_EXT_ZKSH:
143146
case KVM_RISCV_ISA_EXT_ZKT:
147+
case KVM_RISCV_ISA_EXT_ZTSO:
144148
case KVM_RISCV_ISA_EXT_ZVBB:
145149
case KVM_RISCV_ISA_EXT_ZVBC:
146150
case KVM_RISCV_ISA_EXT_ZVFH:

0 commit comments

Comments
 (0)