[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: |
Michael S. Tsirkin |
Subject: |
Re: [PULL v3 12/55] virtio-pci: add support for configure interrupt |
Date: |
Sun, 9 Jan 2022 11:11:31 -0500 |
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?
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
- [PULL v3 04/55] virtio-pci: decouple notifier from interrupt process, (continued)
- [PULL v3 04/55] virtio-pci: decouple notifier from interrupt process, Michael S. Tsirkin, 2022/01/07
- [PULL v3 05/55] virtio-pci: decouple the single vector from the interrupt process, Michael S. Tsirkin, 2022/01/07
- [PULL v3 06/55] vhost: introduce new VhostOps vhost_set_config_call, Michael S. Tsirkin, 2022/01/07
- [PULL v3 07/55] vhost-vdpa: add support for config interrupt, Michael S. Tsirkin, 2022/01/07
- [PULL v3 08/55] virtio: add support for configure interrupt, Michael S. Tsirkin, 2022/01/07
- [PULL v3 09/55] vhost: add support for configure interrupt, Michael S. Tsirkin, 2022/01/07
- [PULL v3 10/55] virtio-net: add support for configure interrupt, Michael S. Tsirkin, 2022/01/07
- [PULL v3 11/55] virtio-mmio: add support for configure interrupt, Michael S. Tsirkin, 2022/01/07
- [PULL v3 12/55] virtio-pci: add support for configure interrupt, Michael S. Tsirkin, 2022/01/07
Re: [PULL v3 12/55] virtio-pci: add support for configure interrupt, Cédric Le Goater, 2022/01/09
[PULL v3 13/55] trace-events,pci: unify trace events format, Michael S. Tsirkin, 2022/01/07
[PULL v3 14/55] vhost-user-blk: reconnect on any error during realize, Michael S. Tsirkin, 2022/01/07
[PULL v3 15/55] chardev/char-socket: tcp_chr_recv: don't clobber errno, Michael S. Tsirkin, 2022/01/07
[PULL v3 16/55] chardev/char-socket: tcp_chr_sync_read: don't clobber errno, Michael S. Tsirkin, 2022/01/07