mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Merge branch kvm-arm64/feat_idst into kvmarm-master/next
* kvm-arm64/feat_idst: : . : Add support for FEAT_IDST, allowing ID registers that are not implemented : to be reported as a normal trap rather than as an UNDEF exception. : . KVM: arm64: selftests: Add a test for FEAT_IDST KVM: arm64: pkvm: Report optional ID register traps with a 0x18 syndrome KVM: arm64: pkvm: Add a generic synchronous exception injection primitive KVM: arm64: Force trap of GMID_EL1 when the guest doesn't have MTE KVM: arm64: Handle CSSIDR2_EL1 and SMIDR_EL1 in a generic way KVM: arm64: Handle FEAT_IDST for sysregs without specific handlers KVM: arm64: Add a generic synchronous exception injection primitive KVM: arm64: Add trap routing for GMID_EL1 arm64: Repaint ID_AA64MMFR2_EL1.IDS description Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
@@ -70,6 +70,7 @@ enum cgt_group_id {
|
||||
CGT_HCR_ENSCXT,
|
||||
CGT_HCR_TTLBIS,
|
||||
CGT_HCR_TTLBOS,
|
||||
CGT_HCR_TID5,
|
||||
|
||||
CGT_MDCR_TPMCR,
|
||||
CGT_MDCR_TPM,
|
||||
@@ -308,6 +309,12 @@ static const struct trap_bits coarse_trap_bits[] = {
|
||||
.mask = HCR_TTLBOS,
|
||||
.behaviour = BEHAVE_FORWARD_RW,
|
||||
},
|
||||
[CGT_HCR_TID5] = {
|
||||
.index = HCR_EL2,
|
||||
.value = HCR_TID5,
|
||||
.mask = HCR_TID5,
|
||||
.behaviour = BEHAVE_FORWARD_RW,
|
||||
},
|
||||
[CGT_MDCR_TPMCR] = {
|
||||
.index = MDCR_EL2,
|
||||
.value = MDCR_EL2_TPMCR,
|
||||
@@ -665,6 +672,7 @@ static const struct encoding_to_trap_config encoding_to_cgt[] __initconst = {
|
||||
SR_TRAP(SYS_CCSIDR2_EL1, CGT_HCR_TID2_TID4),
|
||||
SR_TRAP(SYS_CLIDR_EL1, CGT_HCR_TID2_TID4),
|
||||
SR_TRAP(SYS_CSSELR_EL1, CGT_HCR_TID2_TID4),
|
||||
SR_TRAP(SYS_GMID_EL1, CGT_HCR_TID5),
|
||||
SR_RANGE_TRAP(SYS_ID_PFR0_EL1,
|
||||
sys_reg(3, 0, 0, 7, 7), CGT_HCR_TID3),
|
||||
SR_TRAP(SYS_ICC_SGI0R_EL1, CGT_HCR_IMO_FMO_ICH_HCR_TC),
|
||||
@@ -2587,6 +2595,19 @@ local:
|
||||
|
||||
params = esr_sys64_to_params(esr);
|
||||
|
||||
/*
|
||||
* This implements the pseudocode UnimplementedIDRegister()
|
||||
* helper for the purpose of dealing with FEAT_IDST.
|
||||
*/
|
||||
if (in_feat_id_space(¶ms)) {
|
||||
if (kvm_has_feat(vcpu->kvm, ID_AA64MMFR2_EL1, IDS, IMP))
|
||||
kvm_inject_sync(vcpu, kvm_vcpu_get_esr(vcpu));
|
||||
else
|
||||
kvm_inject_undefined(vcpu);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for the IMPDEF range, as per DDI0487 J.a,
|
||||
* D18.3.2 Reserved encodings for IMPLEMENTATION
|
||||
|
||||
Reference in New Issue
Block a user