[v1,27/72] common/mlx5/windows: add OS alloc/dealloc pd

Message ID 20201027232335.31427-28-ophirmu@nvidia.com (mailing list archive)
State Superseded, archived
Delegated to: Raslan Darawsheh
Headers
Series mlx5 Windows support - part #5 |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Ophir Munk Oct. 27, 2020, 11:22 p.m. UTC
  From: Tal Shnaiderman <talshn@nvidia.com>

Implement Windows API mlx5_os_alloc_pd() and mlx5_os_dealloc_pd(). They
are equivalent to the Linux implementation.

Signed-off-by: Tal Shnaiderman <talshn@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
 drivers/common/mlx5/rte_common_mlx5_exports.def |  3 +-
 drivers/common/mlx5/windows/mlx5_common_os.c    | 47 +++++++++++++++++++++++++
 drivers/common/mlx5/windows/mlx5_common_os.h    |  3 ++
 drivers/common/mlx5/windows/mlx5_win_ext.h      |  6 ++++
 4 files changed, 58 insertions(+), 1 deletion(-)
  

Comments

Narcisa Ana Maria Vasile Nov. 11, 2020, 12:11 a.m. UTC | #1
On Tue, Oct 27, 2020 at 11:22:50PM +0000, Ophir Munk wrote:
> From: Tal Shnaiderman <talshn@nvidia.com>
> 
> Implement Windows API mlx5_os_alloc_pd() and mlx5_os_dealloc_pd(). They
> are equivalent to the Linux implementation.
> 
> Signed-off-by: Tal Shnaiderman <talshn@nvidia.com>
> Acked-by: Matan Azrad <matan@nvidia.com>
> ---
>  drivers/common/mlx5/rte_common_mlx5_exports.def |  3 +-
>  drivers/common/mlx5/windows/mlx5_common_os.c    | 47 +++++++++++++++++++++++++
>  drivers/common/mlx5/windows/mlx5_common_os.h    |  3 ++
>  drivers/common/mlx5/windows/mlx5_win_ext.h      |  6 ++++
>  4 files changed, 58 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def b/drivers/common/mlx5/rte_common_mlx5_exports.def
> + * @return
> + *    The mlx5_pd if pd is valid, NULL and errno otherwise.
> + */
> +void *
> +mlx5_os_alloc_pd(void *ctx)
> +{
> +	struct mlx5_pd *ppd =  mlx5_malloc(MLX5_MEM_ZERO,
> +		sizeof(struct mlx5_pd), 0, SOCKET_ID_ANY);
> +	if (!ppd)
> +		return NULL;
> +
> +	struct mlx5_devx_obj *obj = mlx5_devx_cmd_alloc_pd(ctx);
> +	if (!obj)

Free ppd here, to avoid memory leak.

> +		return NULL;
> +
> +	ppd->obj = obj;
> +	ppd->pdn = obj->id;
> +	ppd->devx_ctx = ctx;
> +	return ppd;
> +}
> +
  
Tal Shnaiderman Nov. 14, 2020, 9:51 p.m. UTC | #2
> Subject: Re: [dpdk-dev] [PATCH v1 27/72] common/mlx5/windows: add OS
> alloc/dealloc pd
> 
> On Tue, Oct 27, 2020 at 11:22:50PM +0000, Ophir Munk wrote:
> > From: Tal Shnaiderman <talshn@nvidia.com>
> >
> > Implement Windows API mlx5_os_alloc_pd() and mlx5_os_dealloc_pd().
> > They are equivalent to the Linux implementation.
> >
> > Signed-off-by: Tal Shnaiderman <talshn@nvidia.com>
> > Acked-by: Matan Azrad <matan@nvidia.com>
> > ---
> >  drivers/common/mlx5/rte_common_mlx5_exports.def |  3 +-
> >  drivers/common/mlx5/windows/mlx5_common_os.c    | 47
> +++++++++++++++++++++++++
> >  drivers/common/mlx5/windows/mlx5_common_os.h    |  3 ++
> >  drivers/common/mlx5/windows/mlx5_win_ext.h      |  6 ++++
> >  4 files changed, 58 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def
> > b/drivers/common/mlx5/rte_common_mlx5_exports.def
> > + * @return
> > + *    The mlx5_pd if pd is valid, NULL and errno otherwise.
> > + */
> > +void *
> > +mlx5_os_alloc_pd(void *ctx)
> > +{
> > +	struct mlx5_pd *ppd =  mlx5_malloc(MLX5_MEM_ZERO,
> > +		sizeof(struct mlx5_pd), 0, SOCKET_ID_ANY);
> > +	if (!ppd)
> > +		return NULL;
> > +
> > +	struct mlx5_devx_obj *obj = mlx5_devx_cmd_alloc_pd(ctx);
> > +	if (!obj)
> 
> Free ppd here, to avoid memory leak.

Right, will do in v2.

> 
> > +		return NULL;
> > +
> > +	ppd->obj = obj;
> > +	ppd->pdn = obj->id;
> > +	ppd->devx_ctx = ctx;
> > +	return ppd;
> > +}
> > +
  

Patch

diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def b/drivers/common/mlx5/rte_common_mlx5_exports.def
index 2a68cd6..15dfa2e 100644
--- a/drivers/common/mlx5/rte_common_mlx5_exports.def
+++ b/drivers/common/mlx5/rte_common_mlx5_exports.def
@@ -59,4 +59,5 @@  EXPORTS
 	mlx5_malloc
 	mlx5_realloc
 	mlx5_free
-
+	mlx5_os_alloc_pd
+	mlx5_os_dealloc_pd
diff --git a/drivers/common/mlx5/windows/mlx5_common_os.c b/drivers/common/mlx5/windows/mlx5_common_os.c
index 5707fb6..f77dfca 100644
--- a/drivers/common/mlx5/windows/mlx5_common_os.c
+++ b/drivers/common/mlx5/windows/mlx5_common_os.c
@@ -22,3 +22,50 @@  void
 mlx5_glue_constructor(void)
 {
 }
+
+/**
+ * Allocate PD. Given a devx context object
+ * return an mlx5-pd object.
+ *
+ * @param[in] ctx
+ *   Pointer to context.
+ *
+ * @return
+ *    The mlx5_pd if pd is valid, NULL and errno otherwise.
+ */
+void *
+mlx5_os_alloc_pd(void *ctx)
+{
+	struct mlx5_pd *ppd =  mlx5_malloc(MLX5_MEM_ZERO,
+		sizeof(struct mlx5_pd), 0, SOCKET_ID_ANY);
+	if (!ppd)
+		return NULL;
+
+	struct mlx5_devx_obj *obj = mlx5_devx_cmd_alloc_pd(ctx);
+	if (!obj)
+		return NULL;
+
+	ppd->obj = obj;
+	ppd->pdn = obj->id;
+	ppd->devx_ctx = ctx;
+	return ppd;
+}
+
+/**
+ * Release PD. Releases a given mlx5_pd object
+ *
+ * @param[in] pd
+ *   Pointer to mlx5_pd.
+ *
+ * @return
+ *    Zero if pd is released successfully, negative number otherwise.
+ */
+int
+mlx5_os_dealloc_pd(void *pd)
+{
+	if (!pd)
+		return -EINVAL;
+	mlx5_devx_cmd_destroy(((struct mlx5_pd *)pd)->obj);
+	mlx5_free(pd);
+	return 0;
+}
diff --git a/drivers/common/mlx5/windows/mlx5_common_os.h b/drivers/common/mlx5/windows/mlx5_common_os.h
index 2abdb2c..f47351e 100644
--- a/drivers/common/mlx5/windows/mlx5_common_os.h
+++ b/drivers/common/mlx5/windows/mlx5_common_os.h
@@ -139,4 +139,7 @@  mlx5_os_get_umem_id(void *umem)
 		return 0;
 	return ((struct mlx5_devx_umem *)umem)->umem_id;
 }
+
+void *mlx5_os_alloc_pd(void *ctx);
+int mlx5_os_dealloc_pd(void *pd);
 #endif /* RTE_PMD_MLX5_COMMON_OS_H_ */
diff --git a/drivers/common/mlx5/windows/mlx5_win_ext.h b/drivers/common/mlx5/windows/mlx5_win_ext.h
index 0e74910..8e697b3 100644
--- a/drivers/common/mlx5/windows/mlx5_win_ext.h
+++ b/drivers/common/mlx5/windows/mlx5_win_ext.h
@@ -28,6 +28,12 @@  struct mlx5_devx_umem {
 	uint32_t                umem_id;
 };
 
+struct mlx5_pd {
+	void                   *obj;
+	uint32_t                pdn;
+	devx_device_ctx        *devx_ctx;
+};
+
 #define GET_DEVX_CTX(ctx) (((mlx5_context_st *)ctx)->devx_ctx)
 #define GET_OBJ_CTX(obj)  (((mlx5_devx_obj_st *)obj)->devx_ctx)