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 <[email protected]> wrote: > > commit c8247d066210114260c306e56365cd1346df7855 > Author: Imre Vadász <[email protected]> > 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 > now. > > * One major advantages in using MSI-X interrupts instead of the legacy > IRQ is, that this avoids interrupt sharing in many virtual-machine > configurations. > > * 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(-) > > http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/c8247d066210114260c306e56365cd1346df7855 > > > -- > DragonFly BSD source repository -- Tomorrow Will Never Die
