diff options
| -rw-r--r-- | virt/kvm/arm/vgic/vgic-v2.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/virt/kvm/arm/vgic/vgic-v2.c index 8ad42c217770..e31405ee5515 100644 --- a/virt/kvm/arm/vgic/vgic-v2.c +++ b/virt/kvm/arm/vgic/vgic-v2.c | |||
| @@ -112,11 +112,15 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu) | |||
| 112 | } | 112 | } |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | /* Clear soft pending state when level IRQs have been acked */ | 115 | /* |
| 116 | if (irq->config == VGIC_CONFIG_LEVEL && | 116 | * Clear soft pending state when level irqs have been acked. |
| 117 | !(val & GICH_LR_PENDING_BIT)) { | 117 | * Always regenerate the pending state. |
| 118 | irq->soft_pending = false; | 118 | */ |
| 119 | irq->pending = irq->line_level; | 119 | if (irq->config == VGIC_CONFIG_LEVEL) { |
| 120 | if (!(val & GICH_LR_PENDING_BIT)) | ||
| 121 | irq->soft_pending = false; | ||
| 122 | |||
| 123 | irq->pending = irq->line_level || irq->soft_pending; | ||
| 120 | } | 124 | } |
| 121 | 125 | ||
| 122 | spin_unlock(&irq->irq_lock); | 126 | spin_unlock(&irq->irq_lock); |
