[2/2] vdpa/mlx5: adjust virtio queue protection domain
Checks
Commit Message
In other to fill the new requirement for virtq configuration,
set the single PD managed by the driver for all the virtqs.
Cc: stable@dpdk.org
Signed-off-by: Matan Azrad <matan@mellanox.com>
Signed-off-by: Xueming Li <xuemingl@mellanox.com>
---
drivers/vdpa/mlx5/mlx5_vdpa.c | 38 ++++++++++++++++++++++++++++++++++-
drivers/vdpa/mlx5/mlx5_vdpa_mem.c | 40 -------------------------------------
drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 1 +
3 files changed, 38 insertions(+), 41 deletions(-)
Comments
On 6/2/20 5:51 PM, Matan Azrad wrote:
> In other to fill the new requirement for virtq configuration,
> set the single PD managed by the driver for all the virtqs.
>
> Cc: stable@dpdk.org
>
> Signed-off-by: Matan Azrad <matan@mellanox.com>
> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> ---
> drivers/vdpa/mlx5/mlx5_vdpa.c | 38 ++++++++++++++++++++++++++++++++++-
> drivers/vdpa/mlx5/mlx5_vdpa_mem.c | 40 -------------------------------------
> drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 1 +
> 3 files changed, 38 insertions(+), 41 deletions(-)
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
On 6/2/20 5:51 PM, Matan Azrad wrote:
> In other to fill the new requirement for virtq configuration,
> set the single PD managed by the driver for all the virtqs.
>
> Cc: stable@dpdk.org
>
> Signed-off-by: Matan Azrad <matan@mellanox.com>
> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> ---
> drivers/vdpa/mlx5/mlx5_vdpa.c | 38 ++++++++++++++++++++++++++++++++++-
> drivers/vdpa/mlx5/mlx5_vdpa_mem.c | 40 -------------------------------------
> drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 1 +
> 3 files changed, 38 insertions(+), 41 deletions(-)
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
On 6/2/20 5:51 PM, Matan Azrad wrote:
> In other to fill the new requirement for virtq configuration,
> set the single PD managed by the driver for all the virtqs.
>
> Cc: stable@dpdk.org
>
> Signed-off-by: Matan Azrad <matan@mellanox.com>
> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> ---
> drivers/vdpa/mlx5/mlx5_vdpa.c | 38 ++++++++++++++++++++++++++++++++++-
> drivers/vdpa/mlx5/mlx5_vdpa_mem.c | 40 -------------------------------------
> drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 1 +
> 3 files changed, 38 insertions(+), 41 deletions(-)
>
Applied to dpdk-next-virtio/master
Thanks,
Maxime
@@ -192,6 +192,37 @@
}
static int
+mlx5_vdpa_pd_create(struct mlx5_vdpa_priv *priv)
+{
+#ifdef HAVE_IBV_FLOW_DV_SUPPORT
+ priv->pd = mlx5_glue->alloc_pd(priv->ctx);
+ if (priv->pd == NULL) {
+ DRV_LOG(ERR, "Failed to allocate PD.");
+ return errno ? -errno : -ENOMEM;
+ }
+ struct mlx5dv_obj obj;
+ struct mlx5dv_pd pd_info;
+ int ret = 0;
+
+ obj.pd.in = priv->pd;
+ obj.pd.out = &pd_info;
+ ret = mlx5_glue->dv_init_obj(&obj, MLX5DV_OBJ_PD);
+ if (ret) {
+ DRV_LOG(ERR, "Fail to get PD object info.");
+ mlx5_glue->dealloc_pd(priv->pd);
+ priv->pd = NULL;
+ return -errno;
+ }
+ priv->pdn = pd_info.pdn;
+ return 0;
+#else
+ (void)priv;
+ DRV_LOG(ERR, "Cannot get pdn - no DV support.");
+ return -ENOTSUP;
+#endif /* HAVE_IBV_FLOW_DV_SUPPORT */
+}
+
+static int
mlx5_vdpa_dev_close(int vid)
{
int did = rte_vhost_get_vdpa_device_id(vid);
@@ -209,6 +240,10 @@
mlx5_vdpa_virtqs_release(priv);
mlx5_vdpa_event_qp_global_release(priv);
mlx5_vdpa_mem_dereg(priv);
+ if (priv->pd) {
+ claim_zero(mlx5_glue->dealloc_pd(priv->pd));
+ priv->pd = NULL;
+ }
priv->configured = 0;
priv->vid = 0;
DRV_LOG(INFO, "vDPA device %d was closed.", vid);
@@ -230,7 +265,8 @@
return -1;
}
priv->vid = vid;
- if (mlx5_vdpa_mem_register(priv) || mlx5_vdpa_direct_db_prepare(priv) ||
+ if (mlx5_vdpa_pd_create(priv) || mlx5_vdpa_mem_register(priv) ||
+ mlx5_vdpa_direct_db_prepare(priv) ||
mlx5_vdpa_virtqs_prepare(priv) || mlx5_vdpa_steer_setup(priv) ||
mlx5_vdpa_cqe_event_setup(priv)) {
mlx5_vdpa_dev_close(vid);
@@ -14,39 +14,6 @@
#include "mlx5_vdpa_utils.h"
#include "mlx5_vdpa.h"
-static int
-mlx5_vdpa_pd_prepare(struct mlx5_vdpa_priv *priv)
-{
-#ifdef HAVE_IBV_FLOW_DV_SUPPORT
- if (priv->pd)
- return 0;
- priv->pd = mlx5_glue->alloc_pd(priv->ctx);
- if (priv->pd == NULL) {
- DRV_LOG(ERR, "Failed to allocate PD.");
- return errno ? -errno : -ENOMEM;
- }
- struct mlx5dv_obj obj;
- struct mlx5dv_pd pd_info;
- int ret = 0;
-
- obj.pd.in = priv->pd;
- obj.pd.out = &pd_info;
- ret = mlx5_glue->dv_init_obj(&obj, MLX5DV_OBJ_PD);
- if (ret) {
- DRV_LOG(ERR, "Fail to get PD object info.");
- mlx5_glue->dealloc_pd(priv->pd);
- priv->pd = NULL;
- return -errno;
- }
- priv->pdn = pd_info.pdn;
- return 0;
-#else
- (void)priv;
- DRV_LOG(ERR, "Cannot get pdn - no DV support.");
- return -ENOTSUP;
-#endif /* HAVE_IBV_FLOW_DV_SUPPORT */
-}
-
void
mlx5_vdpa_mem_dereg(struct mlx5_vdpa_priv *priv)
{
@@ -68,10 +35,6 @@
claim_zero(mlx5_glue->dereg_mr(priv->null_mr));
priv->null_mr = NULL;
}
- if (priv->pd) {
- claim_zero(mlx5_glue->dealloc_pd(priv->pd));
- priv->pd = NULL;
- }
if (priv->vmem) {
free(priv->vmem);
priv->vmem = NULL;
@@ -230,9 +193,6 @@
if (!mem)
return -rte_errno;
priv->vmem = mem;
- ret = mlx5_vdpa_pd_prepare(priv);
- if (ret)
- goto error;
priv->null_mr = mlx5_glue->alloc_null_mr(priv->pd);
if (!priv->null_mr) {
DRV_LOG(ERR, "Failed to allocate null MR.");
@@ -284,6 +284,7 @@
attr.mkey = priv->gpa_mkey_index;
attr.tis_id = priv->tis->id;
attr.queue_index = index;
+ attr.pd = priv->pdn;
virtq->virtq = mlx5_devx_cmd_create_virtq(priv->ctx, &attr);
virtq->priv = priv;
if (!virtq->virtq)