|
@@ -127,6 +127,13 @@ void vgic_v3_populate_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr)
|
|
|
if (irq->hw) {
|
|
|
val |= ICH_LR_HW;
|
|
|
val |= ((u64)irq->hwintid) << ICH_LR_PHYS_ID_SHIFT;
|
|
|
+ /*
|
|
|
+ * Never set pending+active on a HW interrupt, as the
|
|
|
+ * pending state is kept at the physical distributor
|
|
|
+ * level.
|
|
|
+ */
|
|
|
+ if (irq->active && irq_is_pending(irq))
|
|
|
+ val &= ~ICH_LR_PENDING_BIT;
|
|
|
} else {
|
|
|
if (irq->config == VGIC_CONFIG_LEVEL)
|
|
|
val |= ICH_LR_EOI;
|