qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PULL v3 12/55] virtio-pci: add support for configure interrupt


From: Volker Rümelin
Subject: Re: [PULL v3 12/55] virtio-pci: add support for configure interrupt
Date: Sun, 9 Jan 2022 18:52:28 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1

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 <lulu@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 <lulu@redhat.com>
Message-Id: <20211104164827.21911-11-lulu@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@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.

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

[Prev in Thread] Current Thread [Next in Thread]