KVM: arm64: vgic: Fix reading pending state of HW-based PPI/SPI

Signed-off-by: Marc Zyngier <maz@kernel.org>
diff --git a/arch/arm64/kvm/vgic/vgic-mmio.c b/arch/arm64/kvm/vgic/vgic-mmio.c
index b2d73fc..33f48bf 100644
--- a/arch/arm64/kvm/vgic/vgic-mmio.c
+++ b/arch/arm64/kvm/vgic/vgic-mmio.c
@@ -240,14 +240,10 @@ unsigned long vgic_mmio_read_pending(struct kvm_vcpu *vcpu,
 		bool val;
 
 		raw_spin_lock_irqsave(&irq->irq_lock, flags);
-		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
-			int err;
-
-			val = false;
-			err = irq_get_irqchip_state(irq->host_irq,
-						    IRQCHIP_STATE_PENDING,
-						    &val);
-			WARN_RATELIMIT(err, "IRQ %d", irq->host_irq);
+		/* for HW interrupts, directly fetch the HW state */
+		if (vgic_irq_is_mapped_level(irq) ||
+		    (irq->hw && vgic_irq_is_sgi(irq->intid))) {
+			val = vgic_get_phys_line_level(irq);
 		} else {
 			val = irq_is_pending(irq);
 		}