On Sun, Jan 09, 2022 at 07:17:30AM +0100, Volker Rümelin wrote: > Hi, > > > From: Cindy Lu <l...@redhat.com> > > > > Add support for configure interrupt, The process is used kvm_irqfd_assign > > to set the gsi to kernel. When the configure notifier was signal by > > host, qemu will inject a msix interrupt to guest > > > > Signed-off-by: Cindy Lu <l...@redhat.com> > > Message-Id: <20211104164827.21911-11-l...@redhat.com> > > Reviewed-by: Michael S. Tsirkin <m...@redhat.com> > > Signed-off-by: Michael S. Tsirkin <m...@redhat.com> > > --- > > hw/virtio/virtio-pci.h | 4 +- > > hw/virtio/virtio-pci.c | 92 ++++++++++++++++++++++++++++++++++++------ > > 2 files changed, 83 insertions(+), 13 deletions(-) > > > > Since this commit I see the following warnings. > > With -drive > if=virtio,id=disk1,file=/srv/cdimg/Linux/images/opensuse.qcow2,discard=unmap > > qemu-system-x86_64: virtio-blk failed to set guest notifier (-16), ensure > -accel kvm is set. > qemu-system-x86_64: virtio_bus_start_ioeventfd: failed. Fallback to > userspace (slower). > > With libvirt > <controller type='pci' index='1' model='pcie-root-port'> > <address type='pci' domain='0x0000' bus='0x00' slot='0x1c' > function='0' > multifunction='on'/> > </controller> > <controller type='pci' index='2' model='pcie-root-port'> > <address type='pci' domain='0x0000' bus='0x00' slot='0x1c' > function='1'/> > </controller> > <controller type='scsi' index='0' model='virtio-scsi'> > <driver queues='4'/> > <address type='pci' domain='0x0000' bus='0x01' slot='0x00' > function='0'/> > </controller> > <disk type='block' device='disk'> > <driver name='qemu' type='raw' cache='none' discard='unmap' > io='io_uring'/> > <source dev='/dev/vgtmp/lnxpowerm1'/> > <target dev='sda' bus='scsi'/> > <address type='drive' controller='0' bus='0' unit='0'/> > <boot order='1'/> > </disk> > > 2022-01-08T17:45:26.911491Z qemu-system-x86_64: virtio-scsi: Failed to set > guest notifiers (-16), ensure -accel kvm is set. > 2022-01-08T17:45:26.911505Z qemu-system-x86_64: virtio_bus_start_ioeventfd: > failed. Fallback to userspace (slower). > > The messages appear around the time the Linux guest initializes the drivers. > > With best regards, > Volker
I guess it's a host that has an oldish kernel? Does the following help? diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 98fb5493ae..b77cd69f97 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1130,15 +1130,15 @@ static int virtio_pci_set_guest_notifiers(DeviceState *d, int nvqs, bool assign) proxy->vector_irqfd = g_malloc0(sizeof(*proxy->vector_irqfd) * msix_nr_vectors_allocated(&proxy->pci_dev)); + r = kvm_virtio_pci_vector_config_use(proxy); + if (r < 0) { + goto config_error; + } r = kvm_virtio_pci_vector_use(proxy, nvqs); if (r < 0) { goto config_assign_error; } } - r = kvm_virtio_pci_vector_config_use(proxy); - if (r < 0) { - goto config_error; - } r = msix_set_vector_notifiers(&proxy->pci_dev, virtio_pci_vector_unmask, virtio_pci_vector_mask, virtio_pci_vector_poll); @@ -1155,7 +1155,9 @@ notifiers_error: kvm_virtio_pci_vector_release(proxy, nvqs); } config_error: - kvm_virtio_pci_vector_config_release(proxy); + if (with_irqfd) { + kvm_virtio_pci_vector_config_release(proxy); + } config_assign_error: virtio_pci_set_guest_notifier(d, VIRTIO_CONFIG_IRQ_IDX, !assign, with_irqfd); -- MST