vDPA's set_vring_state callback would need to know the virtqueues' enable status to configure the hardware.
Signed-off-by: Xiaolong Ye <xiaolong...@intel.com> Signed-off-by: Andy Pei <andy....@intel.com> --- lib/librte_vhost/rte_vdpa.h | 4 ++-- lib/librte_vhost/vhost_user.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h index 9a3deb3..19cf897 100644 --- a/lib/librte_vhost/rte_vdpa.h +++ b/lib/librte_vhost/rte_vdpa.h @@ -54,8 +54,8 @@ struct rte_vdpa_dev_ops { int (*dev_conf)(int vid); int (*dev_close)(int vid); - /** Enable/disable this vring */ - int (*set_vring_state)(int vid, int vring, int state); + /** Enable/disable vring queue pairs */ + int (*set_vring_state)(int vid); /** Set features when changed */ int (*set_features)(int vid); diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c index 0b72648..21028cc 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -1346,8 +1346,6 @@ static int vhost_user_set_vring_err(struct virtio_net **pdev __rte_unused, did = dev->vdpa_dev_id; vdpa_dev = rte_vdpa_get_device(did); - if (vdpa_dev && vdpa_dev->ops->set_vring_state) - vdpa_dev->ops->set_vring_state(dev->vid, index, enable); if (dev->notify_ops->vring_state_changed) dev->notify_ops->vring_state_changed(dev->vid, @@ -1359,6 +1357,9 @@ static int vhost_user_set_vring_err(struct virtio_net **pdev __rte_unused, dev->virtqueue[index]->enabled = enable; + if (vdpa_dev && vdpa_dev->ops->set_vring_state) + vdpa_dev->ops->set_vring_state(dev->vid); + return RTE_VHOST_MSG_RESULT_OK; } -- 1.8.3.1