common/mlx5: add alloc/dealloc PD on Windows

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

[1] ("net/mlx5: wrap glue alloc/dealloc PD with OS calls")

Signed-off-by: Tal Shnaiderman <talshn@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
This commit is contained in:
Tal Shnaiderman 2020-12-28 11:54:29 +02:00 committed by Ferruh Yigit
parent 86576a644e
commit 1552fb2871
4 changed files with 60 additions and 0 deletions

View File

@ -61,3 +61,6 @@ EXPORTS
mlx5_malloc
mlx5_realloc
mlx5_free
mlx5_os_alloc_pd
mlx5_os_dealloc_pd

View File

@ -21,3 +21,51 @@ 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) {
mlx5_free(ppd);
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;
}

View File

@ -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_ */

View File

@ -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)