[dpdk-dev] [PATCH v3 1/9] vhost: provide helper for host notifier ctrl
Maxime Coquelin
maxime.coquelin at redhat.com
Fri Dec 14 14:33:17 CET 2018
On 12/13/18 11:09 AM, Xiao Wang wrote:
> VDPA driver can decide if it needs to enable/disable the host notifier
> mapping, so exposing a API can allow flexibility. A later patch will
> base on this.
>
> Signed-off-by: Xiao Wang <xiao.w.wang at intel.com>
> ---
> v2:
> * Reword the vdpa host notifier control API comment.
> ---
> drivers/net/ifc/ifcvf_vdpa.c | 3 +++
> lib/librte_vhost/rte_vdpa.h | 18 ++++++++++++++++++
> lib/librte_vhost/rte_vhost_version.map | 1 +
> lib/librte_vhost/vhost.c | 3 +--
> lib/librte_vhost/vhost_user.c | 7 +------
> 5 files changed, 24 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/ifc/ifcvf_vdpa.c b/drivers/net/ifc/ifcvf_vdpa.c
> index 97a57f182..e844109f3 100644
> --- a/drivers/net/ifc/ifcvf_vdpa.c
> +++ b/drivers/net/ifc/ifcvf_vdpa.c
> @@ -556,6 +556,9 @@ ifcvf_dev_config(int vid)
> rte_atomic32_set(&internal->dev_attached, 1);
> update_datapath(internal);
>
> + if (rte_vhost_host_notifier_ctrl(vid, true) != 0)
> + DRV_LOG(NOTICE, "vDPA (%d): software relay is used.", did);
> +
> return 0;
> }
>
> diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h
> index a418da47c..fff657391 100644
> --- a/lib/librte_vhost/rte_vdpa.h
> +++ b/lib/librte_vhost/rte_vdpa.h
> @@ -11,6 +11,8 @@
> * Device specific vhost lib
> */
>
> +#include <stdbool.h>
> +
> #include <rte_pci.h>
> #include "rte_vhost.h"
>
> @@ -155,4 +157,20 @@ rte_vdpa_get_device(int did);
> */
> int __rte_experimental
> rte_vdpa_get_device_num(void);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Enable/Disable host notifier mapping for a vdpa port.
> + *
> + * @param vid
> + * vhost device id
> + * @enable
> + * true for host notifier map, false for host notifier unmap
> + * @return
> + * 0 on success, -1 on failure
> + */
> +int __rte_experimental
> +rte_vhost_host_notifier_ctrl(int vid, bool enable);
> #endif /* _RTE_VDPA_H_ */
> diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map
> index ae39b6e21..22302e972 100644
> --- a/lib/librte_vhost/rte_vhost_version.map
> +++ b/lib/librte_vhost/rte_vhost_version.map
> @@ -83,4 +83,5 @@ EXPERIMENTAL {
> rte_vhost_crypto_finalize_requests;
> rte_vhost_crypto_set_zero_copy;
> rte_vhost_va_from_guest_pa;
> + rte_vhost_host_notifier_ctrl;
> };
> diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
> index 70ac6bc9c..e7a60e0b4 100644
> --- a/lib/librte_vhost/vhost.c
> +++ b/lib/librte_vhost/vhost.c
> @@ -408,8 +408,7 @@ vhost_detach_vdpa_device(int vid)
> if (dev == NULL)
> return;
>
> - vhost_user_host_notifier_ctrl(vid, false);
> -
> + vhost_destroy_device_notify(dev);
It seems that is addition is not mentioned in the commit message.
Why is it needed now?
> dev->vdpa_dev_id = -1;
> }
>
> diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
> index 3ea64eba6..5e0da0589 100644
> --- a/lib/librte_vhost/vhost_user.c
> +++ b/lib/librte_vhost/vhost_user.c
> @@ -2045,11 +2045,6 @@ vhost_user_msg_handler(int vid, int fd)
> if (vdpa_dev->ops->dev_conf)
> vdpa_dev->ops->dev_conf(dev->vid);
> dev->flags |= VIRTIO_DEV_VDPA_CONFIGURED;
> - if (vhost_user_host_notifier_ctrl(dev->vid, true) != 0) {
> - RTE_LOG(INFO, VHOST_CONFIG,
> - "(%d) software relay is used for vDPA, performance may be low.\n",
> - dev->vid);
> - }
> }
>
> return 0;
> @@ -2144,7 +2139,7 @@ static int vhost_user_slave_set_vring_host_notifier(struct virtio_net *dev,
> return process_slave_message_reply(dev, &msg);
> }
>
> -int vhost_user_host_notifier_ctrl(int vid, bool enable)
> +int rte_vhost_host_notifier_ctrl(int vid, bool enable)
> {
> struct virtio_net *dev;
> struct rte_vdpa_device *vdpa_dev;
>
More information about the dev
mailing list