static void pic_unlock(struct kvm_pic *s)
        __releases(&s->lock)
 {
-       struct kvm *kvm = s->kvm;
-       unsigned acks = s->pending_acks;
-       struct kvm_vcpu *vcpu;
-
-       s->pending_acks = 0;
-
        spin_unlock(&s->lock);
-
-       while (acks) {
-               kvm_notify_acked_irq(kvm, SELECT_PIC(__ffs(acks)),
-                                    __ffs(acks));
-               acks &= acks - 1;
-       }
 }
 
 static void pic_clear_isr(struct kvm_kpic_state *s, int irq)
 {
        s->isr &= ~(1 << irq);
        s->isr_ack |= (1 << irq);
+       if (s != &s->pics_state->pics[0])
+               irq += 8;
+       kvm_notify_acked_irq(s->pics_state->kvm, SELECT_PIC(irq), irq);
 }
 
 void kvm_pic_clear_isr_ack(struct kvm *kvm)
        }
        pic_update_irq(s);
        pic_unlock(s);
-       kvm_notify_acked_irq(kvm, SELECT_PIC(irq), irq);
 
        return intno;
 }
                if (vcpu0 && kvm_apic_accept_pic_intr(vcpu0))
                        if (s->irr & (1 << irq) || s->isr & (1 << irq)) {
                                n = irq + irqbase;
-                               s->pics_state->pending_acks |= 1 << n;
+                               kvm_notify_acked_irq(kvm, SELECT_PIC(n), n);
                        }
        }
        s->last_irr = 0;