Message ID | 20250219015235.130194-1-hanht2@chinatelecom.cn (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v2] vhost: Don't set vring call if guest notifier is disabled | expand |
On Wed, Feb 19, 2025 at 09:52:35AM +0800, oenhan@gmail.com wrote: > From: Huaitong Han <hanht2@chinatelecom.cn> > > The vring call fd is set even when the guest does not use MSIX (e.g., virtio > PMD). This results in unnecessary CPU overhead for handling virtio interrupts. > The previous patch only optimized the condition when query_queue_notifier was > enabled and the vector was unset. However, if query_queue_notifier is disabled, > the vring call FD should also be unset to avoid this inefficiency. > > Fixes: 96a3d98d2c ("vhost: don't set vring call if no vector") > > Reported-by: Zhiyuan Yuan <yuanzhiyuan@chinatelecom.cn> > Signed-off-by: Huaitong Han <hanht2@chinatelecom.cn> Fails make check: https://gitlab.com/mstredhat/qemu/-/jobs/9201935243 how was this tested? Pls include data on testing in the commit log. > --- > v2: - add Fixes tag > - cc qemu-stable@nongnu.org > > hw/virtio/vhost.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c > index 6aa72fd434..d17e7cc6fe 100644 > --- a/hw/virtio/vhost.c > +++ b/hw/virtio/vhost.c > @@ -1342,8 +1342,8 @@ int vhost_virtqueue_start(struct vhost_dev *dev, > } > > if (k->query_guest_notifiers && > - k->query_guest_notifiers(qbus->parent) && > - virtio_queue_vector(vdev, idx) == VIRTIO_NO_VECTOR) { > + (!k->query_guest_notifiers(qbus->parent) || > + virtio_queue_vector(vdev, idx) == VIRTIO_NO_VECTOR)) { > file.fd = -1; > r = dev->vhost_ops->vhost_set_vring_call(dev, &file); > if (r) { > -- > 2.43.5
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 6aa72fd434..d17e7cc6fe 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1342,8 +1342,8 @@ int vhost_virtqueue_start(struct vhost_dev *dev, } if (k->query_guest_notifiers && - k->query_guest_notifiers(qbus->parent) && - virtio_queue_vector(vdev, idx) == VIRTIO_NO_VECTOR) { + (!k->query_guest_notifiers(qbus->parent) || + virtio_queue_vector(vdev, idx) == VIRTIO_NO_VECTOR)) { file.fd = -1; r = dev->vhost_ops->vhost_set_vring_call(dev, &file); if (r) {