git: virtio: Fix and activate PCI MSI-X support.
sepherosa at gmail.com
Sun Feb 12 02:41:15 PST 2017
I don't like the design of the virtio bus, i.e. assigning the MSI-X
target CPU behind the driver's back; driver should have control over
the MSI-X target CPU (it does not matter that much for legacy
interrupt and MSI though).
On Sat, Feb 11, 2017 at 8:00 PM, Imre Vadasz
<ivadasz at crater.dragonflybsd.org> wrote:
> commit c8247d066210114260c306e56365cd1346df7855
> Author: Imre Vadász <imre at vdsz.com>
> Date: Wed Feb 8 22:05:35 2017 +0100
> virtio: Fix and activate PCI MSI-X support.
> * Change pci_msi_blacklisted() test to always assume working MSI and MSI-X
> interrupts on virtual-machines. We should assume that a hypervisor
> without MSI or MSI-X support shouldn't even indicate supported MSI(-X)
> via the PCI config space.
> * Move vtblk_alloc_disk() to the end of virtio_blk's attach method.
> This avoids a race between irq enabling in virtio, and the disk probing.
> * Fix allocation and teardown of MSI-X interrupts.
> * Get rid of rather confusing VIRTIO_PCI_FLAG_NO_MSI and
> VIRTIO_PCI_FLAG_NO_MSIX flags. The VIRTIO_PCI_FLAG_NO_MSI is unneeded
> when using pci_alloc_1intr() for MSI allocation, and
> instead of VIRTIO_PCI_FLAG_NO_MSIX we can just check sc->vtpci_msix_res.
> * For now, MSI-X vectors are simply assigned to subsequent cores (plus
> adding the device_get_unit() value to shuffle things a bit), i.e.:
> (device_get_unit(dev) + cnt) % ncpus
> * For the if_vtnet network driver this means that the rx and tx queues run
> on different cores, but both queues still use the same serializer for
> * One major advantages in using MSI-X interrupts instead of the legacy
> IRQ is, that this avoids interrupt sharing in many virtual-machine
> * Tested on qemu with TCG (unaccelerated emulation) and 1 core, and with
> KVM acceleration and 2 cores, with both virtio network and disk devices.
> Summary of changes:
> share/man/man4/virtio.4 | 10 ++
> sys/bus/pci/pci.c | 8 ++
> sys/dev/virtual/virtio/block/virtio_blk.c | 4 +-
> sys/dev/virtual/virtio/pci/virtio_pci.c | 206 ++++++++++++------------------
> 4 files changed, 105 insertions(+), 123 deletions(-)
> DragonFly BSD source repository
Tomorrow Will Never Die
More information about the Commits