|
@@ -112,11 +112,15 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* Clear soft pending state when level IRQs have been acked */
|
|
|
- if (irq->config == VGIC_CONFIG_LEVEL &&
|
|
|
- !(val & GICH_LR_PENDING_BIT)) {
|
|
|
- irq->soft_pending = false;
|
|
|
- irq->pending = irq->line_level;
|
|
|
+ /*
|
|
|
+ * Clear soft pending state when level irqs have been acked.
|
|
|
+ * Always regenerate the pending state.
|
|
|
+ */
|
|
|
+ if (irq->config == VGIC_CONFIG_LEVEL) {
|
|
|
+ if (!(val & GICH_LR_PENDING_BIT))
|
|
|
+ irq->soft_pending = false;
|
|
|
+
|
|
|
+ irq->pending = irq->line_level || irq->soft_pending;
|
|
|
}
|
|
|
|
|
|
spin_unlock(&irq->irq_lock);
|