When conducting performance testing using testpmd in the guest os, it was observed that the performance was lower compared to the scenario of direct vfio-pci usage.
In the commit 96a3d98d2cdbd897ff5ab33427aa4cfb94077665, the author provided a good solution. However, because the guest OS's driver(e.g., virtio-net pmd) may not enable the msix capability, the function k->query_guest_notifiers(qbus->parent) may return false, resulting in the expected effect not being achieved. To address this issue, modify the conditional statement. Signed-off-by: Yuxue Liu <yuxue....@jaguarmicro.com> --- V2: Update commit description and title hw/virtio/vhost.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index f50180e60e..b972c84e67 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1266,13 +1266,15 @@ int vhost_virtqueue_start(struct vhost_dev *dev, vhost_virtqueue_mask(dev, vdev, idx, false); } - if (k->query_guest_notifiers && - 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) { - goto fail_vector; + if (k->query_guest_notifiers) { + if (!k->query_guest_notifiers(qbus->parent) || + (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) { + goto fail_vector; + } } } -- 2.43.0