mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
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 <joey.gouly@arm.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Link: https://lore.kernel.org/r/20250817202158.395078-3-maz@kernel.org Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
This commit is contained in:
parent
8049164653
commit
d7b3e23f94
@ -2695,6 +2695,18 @@ static bool access_ras(struct kvm_vcpu *vcpu,
|
|||||||
struct kvm *kvm = vcpu->kvm;
|
struct kvm *kvm = vcpu->kvm;
|
||||||
|
|
||||||
switch(reg_to_encoding(r)) {
|
switch(reg_to_encoding(r)) {
|
||||||
|
case SYS_ERXPFGCDN_EL1:
|
||||||
|
case SYS_ERXPFGCTL_EL1:
|
||||||
|
case SYS_ERXPFGF_EL1:
|
||||||
|
case SYS_ERXMISC2_EL1:
|
||||||
|
case SYS_ERXMISC3_EL1:
|
||||||
|
if (!(kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, V1P1) ||
|
||||||
|
(kvm_has_feat_enum(kvm, ID_AA64PFR0_EL1, RAS, IMP) &&
|
||||||
|
kvm_has_feat(kvm, ID_AA64PFR1_EL1, RAS_frac, RASv1p1)))) {
|
||||||
|
kvm_inject_undefined(vcpu);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, IMP)) {
|
if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, IMP)) {
|
||||||
kvm_inject_undefined(vcpu);
|
kvm_inject_undefined(vcpu);
|
||||||
@ -3058,8 +3070,13 @@ static const struct sys_reg_desc sys_reg_descs[] = {
|
|||||||
{ SYS_DESC(SYS_ERXCTLR_EL1), access_ras },
|
{ SYS_DESC(SYS_ERXCTLR_EL1), access_ras },
|
||||||
{ SYS_DESC(SYS_ERXSTATUS_EL1), access_ras },
|
{ SYS_DESC(SYS_ERXSTATUS_EL1), access_ras },
|
||||||
{ SYS_DESC(SYS_ERXADDR_EL1), access_ras },
|
{ SYS_DESC(SYS_ERXADDR_EL1), access_ras },
|
||||||
|
{ SYS_DESC(SYS_ERXPFGF_EL1), access_ras },
|
||||||
|
{ SYS_DESC(SYS_ERXPFGCTL_EL1), access_ras },
|
||||||
|
{ SYS_DESC(SYS_ERXPFGCDN_EL1), access_ras },
|
||||||
{ SYS_DESC(SYS_ERXMISC0_EL1), access_ras },
|
{ SYS_DESC(SYS_ERXMISC0_EL1), access_ras },
|
||||||
{ SYS_DESC(SYS_ERXMISC1_EL1), access_ras },
|
{ SYS_DESC(SYS_ERXMISC1_EL1), access_ras },
|
||||||
|
{ SYS_DESC(SYS_ERXMISC2_EL1), access_ras },
|
||||||
|
{ SYS_DESC(SYS_ERXMISC3_EL1), access_ras },
|
||||||
|
|
||||||
MTE_REG(TFSR_EL1),
|
MTE_REG(TFSR_EL1),
|
||||||
MTE_REG(TFSRE0_EL1),
|
MTE_REG(TFSRE0_EL1),
|
||||||
|
Loading…
Reference in New Issue
Block a user