Update vhost_net_virtqueue_restart() for vhost-user scenario. In order to reuse some functions, we process the idx for vhost-user case. It is because vhost_get_vq_index behave differently in vhost-user.
Signed-off-by: Kangjie Xu <kangjie...@linux.alibaba.com> Signed-off-by: Xuan Zhuo <xuanz...@linux.alibaba.com> --- hw/net/vhost_net.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index 8ad5743f7c..13b9c11e68 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -563,6 +563,9 @@ int vhost_net_virtqueue_restart(VirtIODevice *vdev, NetClientState *nc, assert(vhost_ops); idx = vhost_ops->vhost_get_vq_index(&net->dev, vq_index); + if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { + idx -= net->dev.vq_index; + } r = vhost_virtqueue_start(&net->dev, vdev, @@ -572,6 +575,15 @@ int vhost_net_virtqueue_restart(VirtIODevice *vdev, NetClientState *nc, goto err_start; } + if (vhost_ops->vhost_set_vring_enable) { + r = vhost_ops->vhost_set_vring_enable(&net->dev, + net->dev.vq_index + idx, + 1); + if (r < 0) { + goto err_start; + } + } + if (net->nc->info->type == NET_CLIENT_DRIVER_TAP) { file.index = idx; file.fd = net->backend; -- 2.32.0