Skip to content

Commit d7b3e23

Browse files
Marc Zyngieroupton
authored andcommitted
KVM: arm64: Handle RASv1p1 registers
FEAT_RASv1p1 system registeres are not handled at all so far. KVM will give an embarassed warning on the console and inject an UNDEF, despite RASv1p1 being exposed to the guest on suitable HW. Handle these registers similarly to FEAT_RAS, with the added fun that there are *two* way to indicate the presence of FEAT_RASv1p1. Reviewed-by: Joey Gouly <[email protected]> Signed-off-by: Marc Zyngier <[email protected]> Reviewed-by: Cornelia Huck <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Oliver Upton <[email protected]>
1 parent 8049164 commit d7b3e23

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

arch/arm64/kvm/sys_regs.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2695,6 +2695,18 @@ static bool access_ras(struct kvm_vcpu *vcpu,
26952695
struct kvm *kvm = vcpu->kvm;
26962696

26972697
switch(reg_to_encoding(r)) {
2698+
case SYS_ERXPFGCDN_EL1:
2699+
case SYS_ERXPFGCTL_EL1:
2700+
case SYS_ERXPFGF_EL1:
2701+
case SYS_ERXMISC2_EL1:
2702+
case SYS_ERXMISC3_EL1:
2703+
if (!(kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, V1P1) ||
2704+
(kvm_has_feat_enum(kvm, ID_AA64PFR0_EL1, RAS, IMP) &&
2705+
kvm_has_feat(kvm, ID_AA64PFR1_EL1, RAS_frac, RASv1p1)))) {
2706+
kvm_inject_undefined(vcpu);
2707+
return false;
2708+
}
2709+
break;
26982710
default:
26992711
if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, IMP)) {
27002712
kvm_inject_undefined(vcpu);
@@ -3058,8 +3070,13 @@ static const struct sys_reg_desc sys_reg_descs[] = {
30583070
{ SYS_DESC(SYS_ERXCTLR_EL1), access_ras },
30593071
{ SYS_DESC(SYS_ERXSTATUS_EL1), access_ras },
30603072
{ SYS_DESC(SYS_ERXADDR_EL1), access_ras },
3073+
{ SYS_DESC(SYS_ERXPFGF_EL1), access_ras },
3074+
{ SYS_DESC(SYS_ERXPFGCTL_EL1), access_ras },
3075+
{ SYS_DESC(SYS_ERXPFGCDN_EL1), access_ras },
30613076
{ SYS_DESC(SYS_ERXMISC0_EL1), access_ras },
30623077
{ SYS_DESC(SYS_ERXMISC1_EL1), access_ras },
3078+
{ SYS_DESC(SYS_ERXMISC2_EL1), access_ras },
3079+
{ SYS_DESC(SYS_ERXMISC3_EL1), access_ras },
30633080

30643081
MTE_REG(TFSR_EL1),
30653082
MTE_REG(TFSRE0_EL1),

0 commit comments

Comments
 (0)