mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 05:04:09 +08:00
x86 guest:
* Avoid false positive for check that only matters on AMD processors x86: * Give a hint when Win2016 might fail to boot due to XSAVES && !XSAVEC configuration * Do not allow creating an in-kernel PIT unless an IOAPIC already exists RISC-V: * Allow ISA extensions that were enabled for bare metal in 6.8 (Zbc, scalar and vector crypto, Zfh[min], Zihintntl, Zvfh[min], Zfa) S390: * fix CC for successful PQAP instruction * fix a race when creating a shadow page -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmXB9EIUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroNF6Qf/VbNzzntY2BBNL6ZReqH+7GqMCMo7 Q8OYsP+B7TWc0C84JNBTmvC5lwY0FmXEV+i9XFUnyMt/eEHEfr/rko1McRf+byAM vcfbTAz8t24bFSfojg7QJGM+pfUTrqjGmWqHwke/DuARsGB8Zntgtb50m966+xso kDtcsrfGOlpHbnnWZQLLQKJ6tVv7Z2/clFlf4gCT/Quex4Jo76Uq08MA9BFS9iw1 e1oftwuXe6pCUcyt1M/AwOe8FnkP+Xm8oVmW0eJgO0TVDwob0Msx2LpVS2N/+/Oj 1mtBSz4rUQyDdI1j6D0+HkdAlNnwEWSV6eQb+qtjXbhIWBOHUpFXNpQWkg== =LVAr -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm Pull kvm fixes from Paolo Bonzini: "x86 guest: - Avoid false positive for check that only matters on AMD processors x86: - Give a hint when Win2016 might fail to boot due to XSAVES && !XSAVEC configuration - Do not allow creating an in-kernel PIT unless an IOAPIC already exists RISC-V: - Allow ISA extensions that were enabled for bare metal in 6.8 (Zbc, scalar and vector crypto, Zfh[min], Zihintntl, Zvfh[min], Zfa) S390: - fix CC for successful PQAP instruction - fix a race when creating a shadow page" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: x86/coco: Define cc_vendor without CONFIG_ARCH_HAS_CC_PLATFORM x86/kvm: Fix SEV check in sev_map_percpu_data() KVM: x86: Give a hint when Win2016 might fail to boot due to XSAVES erratum KVM: x86: Check irqchip mode before create PIT KVM: riscv: selftests: Add Zfa extension to get-reg-list test RISC-V: KVM: Allow Zfa extension for Guest/VM KVM: riscv: selftests: Add Zvfh[min] extensions to get-reg-list test RISC-V: KVM: Allow Zvfh[min] extensions for Guest/VM KVM: riscv: selftests: Add Zihintntl extension to get-reg-list test RISC-V: KVM: Allow Zihintntl extension for Guest/VM KVM: riscv: selftests: Add Zfh[min] extensions to get-reg-list test RISC-V: KVM: Allow Zfh[min] extensions for Guest/VM KVM: riscv: selftests: Add vector crypto extensions to get-reg-list test RISC-V: KVM: Allow vector crypto extensions for Guest/VM KVM: riscv: selftests: Add scaler crypto extensions to get-reg-list test RISC-V: KVM: Allow scalar crypto extensions for Guest/VM KVM: riscv: selftests: Add Zbc extension to get-reg-list test RISC-V: KVM: Allow Zbc extension for Guest/VM KVM: s390: fix cc for successful PQAP KVM: s390: vsie: fix race during shadow creation
This commit is contained in:
commit
5c24ba2055
@ -139,6 +139,33 @@ enum KVM_RISCV_ISA_EXT_ID {
|
||||
KVM_RISCV_ISA_EXT_ZIHPM,
|
||||
KVM_RISCV_ISA_EXT_SMSTATEEN,
|
||||
KVM_RISCV_ISA_EXT_ZICOND,
|
||||
KVM_RISCV_ISA_EXT_ZBC,
|
||||
KVM_RISCV_ISA_EXT_ZBKB,
|
||||
KVM_RISCV_ISA_EXT_ZBKC,
|
||||
KVM_RISCV_ISA_EXT_ZBKX,
|
||||
KVM_RISCV_ISA_EXT_ZKND,
|
||||
KVM_RISCV_ISA_EXT_ZKNE,
|
||||
KVM_RISCV_ISA_EXT_ZKNH,
|
||||
KVM_RISCV_ISA_EXT_ZKR,
|
||||
KVM_RISCV_ISA_EXT_ZKSED,
|
||||
KVM_RISCV_ISA_EXT_ZKSH,
|
||||
KVM_RISCV_ISA_EXT_ZKT,
|
||||
KVM_RISCV_ISA_EXT_ZVBB,
|
||||
KVM_RISCV_ISA_EXT_ZVBC,
|
||||
KVM_RISCV_ISA_EXT_ZVKB,
|
||||
KVM_RISCV_ISA_EXT_ZVKG,
|
||||
KVM_RISCV_ISA_EXT_ZVKNED,
|
||||
KVM_RISCV_ISA_EXT_ZVKNHA,
|
||||
KVM_RISCV_ISA_EXT_ZVKNHB,
|
||||
KVM_RISCV_ISA_EXT_ZVKSED,
|
||||
KVM_RISCV_ISA_EXT_ZVKSH,
|
||||
KVM_RISCV_ISA_EXT_ZVKT,
|
||||
KVM_RISCV_ISA_EXT_ZFH,
|
||||
KVM_RISCV_ISA_EXT_ZFHMIN,
|
||||
KVM_RISCV_ISA_EXT_ZIHINTNTL,
|
||||
KVM_RISCV_ISA_EXT_ZVFH,
|
||||
KVM_RISCV_ISA_EXT_ZVFHMIN,
|
||||
KVM_RISCV_ISA_EXT_ZFA,
|
||||
KVM_RISCV_ISA_EXT_MAX,
|
||||
};
|
||||
|
||||
|
@ -42,15 +42,42 @@ static const unsigned long kvm_isa_ext_arr[] = {
|
||||
KVM_ISA_EXT_ARR(SVPBMT),
|
||||
KVM_ISA_EXT_ARR(ZBA),
|
||||
KVM_ISA_EXT_ARR(ZBB),
|
||||
KVM_ISA_EXT_ARR(ZBC),
|
||||
KVM_ISA_EXT_ARR(ZBKB),
|
||||
KVM_ISA_EXT_ARR(ZBKC),
|
||||
KVM_ISA_EXT_ARR(ZBKX),
|
||||
KVM_ISA_EXT_ARR(ZBS),
|
||||
KVM_ISA_EXT_ARR(ZFA),
|
||||
KVM_ISA_EXT_ARR(ZFH),
|
||||
KVM_ISA_EXT_ARR(ZFHMIN),
|
||||
KVM_ISA_EXT_ARR(ZICBOM),
|
||||
KVM_ISA_EXT_ARR(ZICBOZ),
|
||||
KVM_ISA_EXT_ARR(ZICNTR),
|
||||
KVM_ISA_EXT_ARR(ZICOND),
|
||||
KVM_ISA_EXT_ARR(ZICSR),
|
||||
KVM_ISA_EXT_ARR(ZIFENCEI),
|
||||
KVM_ISA_EXT_ARR(ZIHINTNTL),
|
||||
KVM_ISA_EXT_ARR(ZIHINTPAUSE),
|
||||
KVM_ISA_EXT_ARR(ZIHPM),
|
||||
KVM_ISA_EXT_ARR(ZKND),
|
||||
KVM_ISA_EXT_ARR(ZKNE),
|
||||
KVM_ISA_EXT_ARR(ZKNH),
|
||||
KVM_ISA_EXT_ARR(ZKR),
|
||||
KVM_ISA_EXT_ARR(ZKSED),
|
||||
KVM_ISA_EXT_ARR(ZKSH),
|
||||
KVM_ISA_EXT_ARR(ZKT),
|
||||
KVM_ISA_EXT_ARR(ZVBB),
|
||||
KVM_ISA_EXT_ARR(ZVBC),
|
||||
KVM_ISA_EXT_ARR(ZVFH),
|
||||
KVM_ISA_EXT_ARR(ZVFHMIN),
|
||||
KVM_ISA_EXT_ARR(ZVKB),
|
||||
KVM_ISA_EXT_ARR(ZVKG),
|
||||
KVM_ISA_EXT_ARR(ZVKNED),
|
||||
KVM_ISA_EXT_ARR(ZVKNHA),
|
||||
KVM_ISA_EXT_ARR(ZVKNHB),
|
||||
KVM_ISA_EXT_ARR(ZVKSED),
|
||||
KVM_ISA_EXT_ARR(ZVKSH),
|
||||
KVM_ISA_EXT_ARR(ZVKT),
|
||||
};
|
||||
|
||||
static unsigned long kvm_riscv_vcpu_base2isa_ext(unsigned long base_ext)
|
||||
@ -92,13 +119,40 @@ static bool kvm_riscv_vcpu_isa_disable_allowed(unsigned long ext)
|
||||
case KVM_RISCV_ISA_EXT_SVNAPOT:
|
||||
case KVM_RISCV_ISA_EXT_ZBA:
|
||||
case KVM_RISCV_ISA_EXT_ZBB:
|
||||
case KVM_RISCV_ISA_EXT_ZBC:
|
||||
case KVM_RISCV_ISA_EXT_ZBKB:
|
||||
case KVM_RISCV_ISA_EXT_ZBKC:
|
||||
case KVM_RISCV_ISA_EXT_ZBKX:
|
||||
case KVM_RISCV_ISA_EXT_ZBS:
|
||||
case KVM_RISCV_ISA_EXT_ZFA:
|
||||
case KVM_RISCV_ISA_EXT_ZFH:
|
||||
case KVM_RISCV_ISA_EXT_ZFHMIN:
|
||||
case KVM_RISCV_ISA_EXT_ZICNTR:
|
||||
case KVM_RISCV_ISA_EXT_ZICOND:
|
||||
case KVM_RISCV_ISA_EXT_ZICSR:
|
||||
case KVM_RISCV_ISA_EXT_ZIFENCEI:
|
||||
case KVM_RISCV_ISA_EXT_ZIHINTNTL:
|
||||
case KVM_RISCV_ISA_EXT_ZIHINTPAUSE:
|
||||
case KVM_RISCV_ISA_EXT_ZIHPM:
|
||||
case KVM_RISCV_ISA_EXT_ZKND:
|
||||
case KVM_RISCV_ISA_EXT_ZKNE:
|
||||
case KVM_RISCV_ISA_EXT_ZKNH:
|
||||
case KVM_RISCV_ISA_EXT_ZKR:
|
||||
case KVM_RISCV_ISA_EXT_ZKSED:
|
||||
case KVM_RISCV_ISA_EXT_ZKSH:
|
||||
case KVM_RISCV_ISA_EXT_ZKT:
|
||||
case KVM_RISCV_ISA_EXT_ZVBB:
|
||||
case KVM_RISCV_ISA_EXT_ZVBC:
|
||||
case KVM_RISCV_ISA_EXT_ZVFH:
|
||||
case KVM_RISCV_ISA_EXT_ZVFHMIN:
|
||||
case KVM_RISCV_ISA_EXT_ZVKB:
|
||||
case KVM_RISCV_ISA_EXT_ZVKG:
|
||||
case KVM_RISCV_ISA_EXT_ZVKNED:
|
||||
case KVM_RISCV_ISA_EXT_ZVKNHA:
|
||||
case KVM_RISCV_ISA_EXT_ZVKNHB:
|
||||
case KVM_RISCV_ISA_EXT_ZVKSED:
|
||||
case KVM_RISCV_ISA_EXT_ZVKSH:
|
||||
case KVM_RISCV_ISA_EXT_ZVKT:
|
||||
return false;
|
||||
/* Extensions which can be disabled using Smstateen */
|
||||
case KVM_RISCV_ISA_EXT_SSAIA:
|
||||
|
@ -676,8 +676,12 @@ static int handle_pqap(struct kvm_vcpu *vcpu)
|
||||
if (vcpu->kvm->arch.crypto.pqap_hook) {
|
||||
pqap_hook = *vcpu->kvm->arch.crypto.pqap_hook;
|
||||
ret = pqap_hook(vcpu);
|
||||
if (!ret && vcpu->run->s.regs.gprs[1] & 0x00ff0000)
|
||||
kvm_s390_set_psw_cc(vcpu, 3);
|
||||
if (!ret) {
|
||||
if (vcpu->run->s.regs.gprs[1] & 0x00ff0000)
|
||||
kvm_s390_set_psw_cc(vcpu, 3);
|
||||
else
|
||||
kvm_s390_set_psw_cc(vcpu, 0);
|
||||
}
|
||||
up_read(&vcpu->kvm->arch.crypto.pqap_hook_rwsem);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1235,7 +1235,6 @@ static int acquire_gmap_shadow(struct kvm_vcpu *vcpu,
|
||||
gmap = gmap_shadow(vcpu->arch.gmap, asce, edat);
|
||||
if (IS_ERR(gmap))
|
||||
return PTR_ERR(gmap);
|
||||
gmap->private = vcpu->kvm;
|
||||
vcpu->kvm->stat.gmap_shadow_create++;
|
||||
WRITE_ONCE(vsie_page->gmap, gmap);
|
||||
return 0;
|
||||
|
@ -1691,6 +1691,7 @@ struct gmap *gmap_shadow(struct gmap *parent, unsigned long asce,
|
||||
return ERR_PTR(-ENOMEM);
|
||||
new->mm = parent->mm;
|
||||
new->parent = gmap_get(parent);
|
||||
new->private = parent->private;
|
||||
new->orig_asce = asce;
|
||||
new->edat_level = edat_level;
|
||||
new->initialized = false;
|
||||
|
@ -10,13 +10,14 @@ enum cc_vendor {
|
||||
CC_VENDOR_INTEL,
|
||||
};
|
||||
|
||||
extern enum cc_vendor cc_vendor;
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_CC_PLATFORM
|
||||
extern enum cc_vendor cc_vendor;
|
||||
void cc_set_mask(u64 mask);
|
||||
u64 cc_mkenc(u64 val);
|
||||
u64 cc_mkdec(u64 val);
|
||||
#else
|
||||
#define cc_vendor (CC_VENDOR_NONE)
|
||||
|
||||
static inline u64 cc_mkenc(u64 val)
|
||||
{
|
||||
return val;
|
||||
|
@ -1145,6 +1145,8 @@ struct kvm_hv {
|
||||
unsigned int synic_auto_eoi_used;
|
||||
|
||||
struct kvm_hv_syndbg hv_syndbg;
|
||||
|
||||
bool xsaves_xsavec_checked;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -434,7 +434,8 @@ static void __init sev_map_percpu_data(void)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
if (!cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
|
||||
if (cc_vendor != CC_VENDOR_AMD ||
|
||||
!cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
|
||||
return;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
|
@ -1322,6 +1322,56 @@ static bool hv_check_msr_access(struct kvm_vcpu_hv *hv_vcpu, u32 msr)
|
||||
return false;
|
||||
}
|
||||
|
||||
#define KVM_HV_WIN2016_GUEST_ID 0x1040a00003839
|
||||
#define KVM_HV_WIN2016_GUEST_ID_MASK (~GENMASK_ULL(23, 16)) /* mask out the service version */
|
||||
|
||||
/*
|
||||
* Hyper-V enabled Windows Server 2016 SMP VMs fail to boot in !XSAVES && XSAVEC
|
||||
* configuration.
|
||||
* Such configuration can result from, for example, AMD Erratum 1386 workaround.
|
||||
*
|
||||
* Print a notice so users aren't left wondering what's suddenly gone wrong.
|
||||
*/
|
||||
static void __kvm_hv_xsaves_xsavec_maybe_warn(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm *kvm = vcpu->kvm;
|
||||
struct kvm_hv *hv = to_kvm_hv(kvm);
|
||||
|
||||
/* Check again under the hv_lock. */
|
||||
if (hv->xsaves_xsavec_checked)
|
||||
return;
|
||||
|
||||
if ((hv->hv_guest_os_id & KVM_HV_WIN2016_GUEST_ID_MASK) !=
|
||||
KVM_HV_WIN2016_GUEST_ID)
|
||||
return;
|
||||
|
||||
hv->xsaves_xsavec_checked = true;
|
||||
|
||||
/* UP configurations aren't affected */
|
||||
if (atomic_read(&kvm->online_vcpus) < 2)
|
||||
return;
|
||||
|
||||
if (guest_cpuid_has(vcpu, X86_FEATURE_XSAVES) ||
|
||||
!guest_cpuid_has(vcpu, X86_FEATURE_XSAVEC))
|
||||
return;
|
||||
|
||||
pr_notice_ratelimited("Booting SMP Windows KVM VM with !XSAVES && XSAVEC. "
|
||||
"If it fails to boot try disabling XSAVEC in the VM config.\n");
|
||||
}
|
||||
|
||||
void kvm_hv_xsaves_xsavec_maybe_warn(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_hv *hv = to_kvm_hv(vcpu->kvm);
|
||||
|
||||
if (!vcpu->arch.hyperv_enabled ||
|
||||
hv->xsaves_xsavec_checked)
|
||||
return;
|
||||
|
||||
mutex_lock(&hv->hv_lock);
|
||||
__kvm_hv_xsaves_xsavec_maybe_warn(vcpu);
|
||||
mutex_unlock(&hv->hv_lock);
|
||||
}
|
||||
|
||||
static int kvm_hv_set_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 data,
|
||||
bool host)
|
||||
{
|
||||
|
@ -182,6 +182,8 @@ void kvm_hv_setup_tsc_page(struct kvm *kvm,
|
||||
struct pvclock_vcpu_time_info *hv_clock);
|
||||
void kvm_hv_request_tsc_page_update(struct kvm *kvm);
|
||||
|
||||
void kvm_hv_xsaves_xsavec_maybe_warn(struct kvm_vcpu *vcpu);
|
||||
|
||||
void kvm_hv_init_vm(struct kvm *kvm);
|
||||
void kvm_hv_destroy_vm(struct kvm *kvm);
|
||||
int kvm_hv_vcpu_init(struct kvm_vcpu *vcpu);
|
||||
@ -267,6 +269,7 @@ int kvm_hv_vcpu_flush_tlb(struct kvm_vcpu *vcpu);
|
||||
static inline void kvm_hv_setup_tsc_page(struct kvm *kvm,
|
||||
struct pvclock_vcpu_time_info *hv_clock) {}
|
||||
static inline void kvm_hv_request_tsc_page_update(struct kvm *kvm) {}
|
||||
static inline void kvm_hv_xsaves_xsavec_maybe_warn(struct kvm_vcpu *vcpu) {}
|
||||
static inline void kvm_hv_init_vm(struct kvm *kvm) {}
|
||||
static inline void kvm_hv_destroy_vm(struct kvm *kvm) {}
|
||||
static inline int kvm_hv_vcpu_init(struct kvm_vcpu *vcpu)
|
||||
|
@ -1782,6 +1782,10 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||
if ((efer ^ old_efer) & KVM_MMU_EFER_ROLE_BITS)
|
||||
kvm_mmu_reset_context(vcpu);
|
||||
|
||||
if (!static_cpu_has(X86_FEATURE_XSAVES) &&
|
||||
(efer & EFER_SVME))
|
||||
kvm_hv_xsaves_xsavec_maybe_warn(vcpu);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -7016,6 +7020,9 @@ set_identity_unlock:
|
||||
r = -EEXIST;
|
||||
if (kvm->arch.vpit)
|
||||
goto create_pit_unlock;
|
||||
r = -ENOENT;
|
||||
if (!pic_in_kernel(kvm))
|
||||
goto create_pit_unlock;
|
||||
r = -ENOMEM;
|
||||
kvm->arch.vpit = kvm_create_pit(kvm, u.pit_config.flags);
|
||||
if (kvm->arch.vpit)
|
||||
|
@ -49,15 +49,42 @@ bool filter_reg(__u64 reg)
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SVPBMT:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZBA:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZBB:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZBC:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZBKB:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZBKC:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZBKX:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZBS:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZFA:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZFH:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZFHMIN:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICBOM:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICBOZ:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICNTR:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICOND:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICSR:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZIFENCEI:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZIHINTNTL:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZIHINTPAUSE:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZIHPM:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZKND:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZKNE:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZKNH:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZKR:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZKSED:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZKSH:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZKT:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVBB:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVBC:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVFH:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVFHMIN:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKB:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKG:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKNED:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKNHA:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKNHB:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKSED:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKSH:
|
||||
case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZVKT:
|
||||
/*
|
||||
* Like ISA_EXT registers, SBI_EXT registers are only visible when the
|
||||
* host supports them and disabling them does not affect the visibility
|
||||
@ -394,15 +421,42 @@ static const char *isa_ext_single_id_to_str(__u64 reg_off)
|
||||
KVM_ISA_EXT_ARR(SVPBMT),
|
||||
KVM_ISA_EXT_ARR(ZBA),
|
||||
KVM_ISA_EXT_ARR(ZBB),
|
||||
KVM_ISA_EXT_ARR(ZBC),
|
||||
KVM_ISA_EXT_ARR(ZBKB),
|
||||
KVM_ISA_EXT_ARR(ZBKC),
|
||||
KVM_ISA_EXT_ARR(ZBKX),
|
||||
KVM_ISA_EXT_ARR(ZBS),
|
||||
KVM_ISA_EXT_ARR(ZFA),
|
||||
KVM_ISA_EXT_ARR(ZFH),
|
||||
KVM_ISA_EXT_ARR(ZFHMIN),
|
||||
KVM_ISA_EXT_ARR(ZICBOM),
|
||||
KVM_ISA_EXT_ARR(ZICBOZ),
|
||||
KVM_ISA_EXT_ARR(ZICNTR),
|
||||
KVM_ISA_EXT_ARR(ZICOND),
|
||||
KVM_ISA_EXT_ARR(ZICSR),
|
||||
KVM_ISA_EXT_ARR(ZIFENCEI),
|
||||
KVM_ISA_EXT_ARR(ZIHINTNTL),
|
||||
KVM_ISA_EXT_ARR(ZIHINTPAUSE),
|
||||
KVM_ISA_EXT_ARR(ZIHPM),
|
||||
KVM_ISA_EXT_ARR(ZKND),
|
||||
KVM_ISA_EXT_ARR(ZKNE),
|
||||
KVM_ISA_EXT_ARR(ZKNH),
|
||||
KVM_ISA_EXT_ARR(ZKR),
|
||||
KVM_ISA_EXT_ARR(ZKSED),
|
||||
KVM_ISA_EXT_ARR(ZKSH),
|
||||
KVM_ISA_EXT_ARR(ZKT),
|
||||
KVM_ISA_EXT_ARR(ZVBB),
|
||||
KVM_ISA_EXT_ARR(ZVBC),
|
||||
KVM_ISA_EXT_ARR(ZVFH),
|
||||
KVM_ISA_EXT_ARR(ZVFHMIN),
|
||||
KVM_ISA_EXT_ARR(ZVKB),
|
||||
KVM_ISA_EXT_ARR(ZVKG),
|
||||
KVM_ISA_EXT_ARR(ZVKNED),
|
||||
KVM_ISA_EXT_ARR(ZVKNHA),
|
||||
KVM_ISA_EXT_ARR(ZVKNHB),
|
||||
KVM_ISA_EXT_ARR(ZVKSED),
|
||||
KVM_ISA_EXT_ARR(ZVKSH),
|
||||
KVM_ISA_EXT_ARR(ZVKT),
|
||||
};
|
||||
|
||||
if (reg_off >= ARRAY_SIZE(kvm_isa_ext_reg_name))
|
||||
@ -888,15 +942,42 @@ KVM_ISA_EXT_SIMPLE_CONFIG(svnapot, SVNAPOT);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(svpbmt, SVPBMT);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zba, ZBA);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zbb, ZBB);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zbc, ZBC);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zbkb, ZBKB);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zbkc, ZBKC);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zbkx, ZBKX);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zbs, ZBS);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zfa, ZFA);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zfh, ZFH);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zfhmin, ZFHMIN);
|
||||
KVM_ISA_EXT_SUBLIST_CONFIG(zicbom, ZICBOM);
|
||||
KVM_ISA_EXT_SUBLIST_CONFIG(zicboz, ZICBOZ);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zicntr, ZICNTR);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zicond, ZICOND);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zicsr, ZICSR);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zifencei, ZIFENCEI);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zihintntl, ZIHINTNTL);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zihintpause, ZIHINTPAUSE);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zihpm, ZIHPM);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zknd, ZKND);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zkne, ZKNE);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zknh, ZKNH);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zkr, ZKR);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zksed, ZKSED);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zksh, ZKSH);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zkt, ZKT);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvbb, ZVBB);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvbc, ZVBC);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvfh, ZVFH);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvfhmin, ZVFHMIN);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvkb, ZVKB);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvkg, ZVKG);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvkned, ZVKNED);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvknha, ZVKNHA);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvknhb, ZVKNHB);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvksed, ZVKSED);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvksh, ZVKSH);
|
||||
KVM_ISA_EXT_SIMPLE_CONFIG(zvkt, ZVKT);
|
||||
|
||||
struct vcpu_reg_list *vcpu_configs[] = {
|
||||
&config_sbi_base,
|
||||
@ -914,14 +995,41 @@ struct vcpu_reg_list *vcpu_configs[] = {
|
||||
&config_svpbmt,
|
||||
&config_zba,
|
||||
&config_zbb,
|
||||
&config_zbc,
|
||||
&config_zbkb,
|
||||
&config_zbkc,
|
||||
&config_zbkx,
|
||||
&config_zbs,
|
||||
&config_zfa,
|
||||
&config_zfh,
|
||||
&config_zfhmin,
|
||||
&config_zicbom,
|
||||
&config_zicboz,
|
||||
&config_zicntr,
|
||||
&config_zicond,
|
||||
&config_zicsr,
|
||||
&config_zifencei,
|
||||
&config_zihintntl,
|
||||
&config_zihintpause,
|
||||
&config_zihpm,
|
||||
&config_zknd,
|
||||
&config_zkne,
|
||||
&config_zknh,
|
||||
&config_zkr,
|
||||
&config_zksed,
|
||||
&config_zksh,
|
||||
&config_zkt,
|
||||
&config_zvbb,
|
||||
&config_zvbc,
|
||||
&config_zvfh,
|
||||
&config_zvfhmin,
|
||||
&config_zvkb,
|
||||
&config_zvkg,
|
||||
&config_zvkned,
|
||||
&config_zvknha,
|
||||
&config_zvknhb,
|
||||
&config_zvksed,
|
||||
&config_zvksh,
|
||||
&config_zvkt,
|
||||
};
|
||||
int vcpu_configs_n = ARRAY_SIZE(vcpu_configs);
|
||||
|
Loading…
Reference in New Issue
Block a user