Am 09.01.22 um 19:01 schrieb Michael S. Tsirkin:
On Sun, Jan 09, 2022 at 06:52:28PM +0100, Volker Rümelin wrote:
Am 09.01.22 um 17:11 schrieb Michael S. Tsirkin:
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?
It's an openSUSE 5.3.18 frankenstein kernel.

Does the following help?

No.

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);
With and without this patch msix_set_vector_notifiers() returns -16.

EBUSY

strace? did a syscall return this?

I hope I got that right. I used

strace ./qemu-system-x86_64 ... 2>strace.txt

There is no EBUSY in strace.txt.

I will sprinkle a few fprintfs to find the first function returning -16.


@@ -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);


Reply via email to