• Christoph Hellwig's avatar
    virtio_pci: use shared interrupts for virtqueues · 07ec5148
    Christoph Hellwig authored
    This lets IRQ layer handle dispatching IRQs to separate handlers for the
    case where we don't have per-VQ MSI-X vectors, and allows us to greatly
    simplify the code based on the assumption that we always have interrupt
    vector 0 (legacy INTx or config interrupt for MSI-X) available, and
    any other interrupt is request/freed throught the VQ, even if the
    actual interrupt line might be shared in some cases.
    
    This allows removing a great deal of variables keeping track of the
    interrupt state in struct virtio_pci_device, as we can now simply walk the
    list of VQs and deal with per-VQ interrupt handlers there, and only treat
    vector 0 special.
    
    Additionally clean up the VQ allocation code to properly unwind on error
    instead of having a single global cleanup label, which is error prone,
    and in this case also leads to more code.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: Michael S. Tsirkin's avatarMichael S. Tsirkin <mst@redhat.com>
    07ec5148
virtio_pci_common.c 12.6 KB