• Avi Kivity's avatar
    KVM: Add locking to virtual i8259 interrupt controller · 3f353858
    Avi Kivity authored
    While most accesses to the i8259 are with the kvm mutex taken, the call
    to kvm_pic_read_irq() is not.  We can't easily take the kvm mutex there
    since the function is called with interrupts disabled.
    
    Fix by adding a spinlock to the virtual interrupt controller.  Since we
    can't send an IPI under the spinlock (we also take the same spinlock in
    an irq disabled context), we defer the IPI until the spinlock is released.
    Similarly, we defer irq ack notifications until after spinlock release to
    avoid lock recursion.
    Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
    3f353858
i8259.c 11.2 KB