arm/arm64: KVM: vgic: Force VM halt when changing the active state of GICv3 PPIs/SGIs
We currently only halt the guest when a vCPU messes with the active state of an SPI. This is perfectly fine for GICv2, but isn't enough for GICv3, where all vCPUs can access the state of any other vCPU. Let's broaden the condition to include any GICv3 interrupt that has an active state (i.e. all but LPIs). Cc: stable@vger.kernel.org Reviewed-by: Christoffer Dall <christoffer.dall@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:
parent
599d79dcd1
commit
107352a249
|
@ -362,14 +362,16 @@ static void vgic_mmio_change_active(struct kvm_vcpu *vcpu, struct vgic_irq *irq,
|
||||||
*/
|
*/
|
||||||
static void vgic_change_active_prepare(struct kvm_vcpu *vcpu, u32 intid)
|
static void vgic_change_active_prepare(struct kvm_vcpu *vcpu, u32 intid)
|
||||||
{
|
{
|
||||||
if (intid > VGIC_NR_PRIVATE_IRQS)
|
if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 ||
|
||||||
|
intid > VGIC_NR_PRIVATE_IRQS)
|
||||||
kvm_arm_halt_guest(vcpu->kvm);
|
kvm_arm_halt_guest(vcpu->kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See vgic_change_active_prepare */
|
/* See vgic_change_active_prepare */
|
||||||
static void vgic_change_active_finish(struct kvm_vcpu *vcpu, u32 intid)
|
static void vgic_change_active_finish(struct kvm_vcpu *vcpu, u32 intid)
|
||||||
{
|
{
|
||||||
if (intid > VGIC_NR_PRIVATE_IRQS)
|
if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 ||
|
||||||
|
intid > VGIC_NR_PRIVATE_IRQS)
|
||||||
kvm_arm_resume_guest(vcpu->kvm);
|
kvm_arm_resume_guest(vcpu->kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue