[v1,27/72] common/mlx5/windows: add OS alloc/dealloc pd
Checks
Commit Message
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
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;
> +}
> +
> 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;
> > +}
> > +
@@ -59,4 +59,5 @@ EXPORTS
mlx5_malloc
mlx5_realloc
mlx5_free
-
+ mlx5_os_alloc_pd
+ mlx5_os_dealloc_pd
@@ -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;
+}
@@ -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_ */
@@ -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)