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


Reply via email to