[PATCH v4 16/16] vhost: make sure each queue callfd is configured
Andy Pei
andy.pei at intel.com
Sun Mar 27 16:51:39 CEST 2022
During the vhost data path building process, qemu will create
a call fd at first, and create another call fd in the end.
The final call fd will be used to relay notify.
In the original code, after kick fd is set, dev_conf will
set the first call fd. Even though the actual call fd will set,
the data path will not work correctly.
Signed-off-by: Andy Pei <andy.pei at intel.com>
---
lib/vhost/vhost_user.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c
index b11fafd..8c5904f 100644
--- a/lib/vhost/vhost_user.c
+++ b/lib/vhost/vhost_user.c
@@ -3197,12 +3197,27 @@ typedef int (*vhost_message_handler_t)(struct virtio_net **pdev,
if (!vdpa_dev)
goto out;
+ if (request != VHOST_USER_SET_VRING_CALL)
+ goto out;
+
if (!(dev->flags & VIRTIO_DEV_VDPA_CONFIGURED)) {
if (vdpa_dev->ops->dev_conf(dev->vid))
VHOST_LOG_CONFIG(ERR, "(%s) failed to configure vDPA device\n",
dev->ifname);
else
dev->flags |= VIRTIO_DEV_VDPA_CONFIGURED;
+ } else {
+ /**
+ ** VIRTIO_DEV_VDPA_CONFIGURED already configured
+ ** close the device and open the device again,
+ ** make sure the call fd of each queue is configed to haedware.
+ **/
+ if (vdpa_dev->ops->dev_close(dev->vid))
+ VHOST_LOG_CONFIG(ERR,
+ "Failed to close vDPA device\n");
+ if (vdpa_dev->ops->dev_conf(dev->vid))
+ VHOST_LOG_CONFIG(ERR,
+ "Failed to re-config vDPA device\n");
}
out:
--
1.8.3.1
More information about the dev
mailing list