Extend the GICv5 check in kvm_vgic_vcpu_pending_irq() to treat a vcpu as having pending interrupts if the doorbell has fired. The hardware itself knows which vcpu the incoming interrupt is targeting, and therefore it is immediately known which vcpu thread needs to be scheduled to process the interrupt. Signed-off-by: Sascha Bischoff --- arch/arm64/kvm/vgic/vgic.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/vgic/vgic.c b/arch/arm64/kvm/vgic/vgic.c index b697678d68b01..d56e87a0d2acc 100644 --- a/arch/arm64/kvm/vgic/vgic.c +++ b/arch/arm64/kvm/vgic/vgic.c @@ -1229,8 +1229,12 @@ int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu) unsigned long flags; struct vgic_vmcr vmcr; - if (vgic_is_v5(vcpu->kvm)) + if (vgic_is_v5(vcpu->kvm)) { + if (READ_ONCE(vcpu->arch.vgic_cpu.vgic_v5.gicv5_vpe.db_fired)) + return true; + return vgic_v5_has_pending_ppi(vcpu); + } if (!vcpu->kvm->arch.vgic.enabled) return false; -- 2.34.1