KVM: arm64: vgic: Don't reset cpuif/redist addresses at finalize time
Marc Zyngier
maintainerPATCH 1/1 KVM: arm64: vgic: Don't reset cpuif/redist addresses at finalize time
Although we are OK with rewriting idregs at finalize time, resetting the guest's cpuif (GICv3) or redistributor (GICv3) addresses once we start running the guest is a pretty bad idea.
Move back this initialisation to vgic creation time.
Fixes a258a383b9177 ("KVM: arm64: gic-v5: Sanitize ID_AA64PFR2_EL1.GCIE")
Signed-off-by Marc Zyngier <[email protected]>
--- arch/arm64/kvm/vgic/vgic-init.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
arch/arm64/kvm/vgic/vgic-init.c +9 -2
@@ -147,6 +147,15 @@ int kvm_vgic_create(struct kvm *kvm, u32 type) kvm->arch.vgic.implementation_rev =KVM_VGIC_IMP_REV_LATEST ; kvm->arch.vgic.vgic_dist_base =VGIC_ADDR_UNDEF ; +switch (type) { +case KVM_DEV_TYPE_ARM_VGIC_V2 : + kvm->arch.vgic.vgic_cpu_base =VGIC_ADDR_UNDEF ; +break ; +case KVM_DEV_TYPE_ARM_VGIC_V3 : +INIT_LIST_HEAD (&kvm->arch.vgic.rd_regions); +break ; + } +/* * We've now created the GIC. Update the system register state * to accurately reflect what we've created.
@@ -684,10 +693,8 @@ void kvm_vgic_finalize_idregs(struct kvm *kvm)switch (type) {case KVM_DEV_TYPE_ARM_VGIC_V2 : - kvm->arch.vgic.vgic_cpu_base =VGIC_ADDR_UNDEF ;break ;case KVM_DEV_TYPE_ARM_VGIC_V3 : -INIT_LIST_HEAD (&kvm->arch.vgic.rd_regions); aa64pfr0 |=SYS_FIELD_PREP_ENUM (ID_AA64PFR0_EL1 ,GIC ,IMP ); pfr1 |=SYS_FIELD_PREP_ENUM (ID_PFR1_EL1 ,GIC , GICv3);break ;
Signature · 1 line
2.47.3
Quoted 8 lines · Marc Zyngier
Although we are OK with rewriting idregs at finalize time, resetting the guest's cpuif (GICv3) or redistributor (GICv3) addresses once we start running the guest is a pretty bad idea.
Move back this initialisation to vgic creation time.
[...]
Applied to next, thanks!
[1/1] KVM: arm64: vgic: Don't reset cpuif/redist addresses at finalize time
commit: bb90920c5ae1217449409dc0b5256c6ed4ccab27
Cheers,
M.
Signature · 1 line
Without deviation from the norm, progress is not possible.