net/mlx5: fix direct call to rdma-core library
Checks
Commit Message
The routine mlx5dv_query_devx_port() was called directly
instead of using the mlx5 glue thunk.
Fixes: f8c2c1e2ac93 ("net/mlx5: query vport index match mode and parameters")
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
---
drivers/net/mlx5/mlx5.c | 2 +-
drivers/net/mlx5/mlx5_glue.c | 17 +++++++++++++++++
drivers/net/mlx5/mlx5_glue.h | 7 +++++++
3 files changed, 25 insertions(+), 1 deletion(-)
Comments
Hi,
> -----Original Message-----
> From: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> Sent: Monday, October 7, 2019 4:58 PM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@mellanox.com>; Raslan Darawsheh
> <rasland@mellanox.com>
> Subject: [PATCH] net/mlx5: fix direct call to rdma-core library
>
> The routine mlx5dv_query_devx_port() was called directly instead of using
> the mlx5 glue thunk.
>
> Fixes: f8c2c1e2ac93 ("net/mlx5: query vport index match mode and
> parameters")
>
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
@@ -1846,7 +1846,7 @@ struct mlx5_dev_spawn_data {
*/
devx_port.comp_mask = MLX5DV_DEVX_PORT_VPORT |
MLX5DV_DEVX_PORT_MATCH_REG_C_0;
- err = mlx5dv_query_devx_port(sh->ctx, spawn->ibv_port, &devx_port);
+ err = mlx5_glue->devx_port_query(sh->ctx, spawn->ibv_port, &devx_port);
if (err) {
DRV_LOG(WARNING, "can't query devx port %d on device %s\n",
spawn->ibv_port, spawn->ibv_dev->name);
@@ -989,6 +989,22 @@
#endif
}
+static int
+mlx5_glue_devx_port_query(struct ibv_context *ctx,
+ uint32_t port_num,
+ struct mlx5dv_devx_port *mlx5_devx_port)
+{
+#ifdef HAVE_MLX5DV_DR_DEVX_PORT
+ return mlx5dv_query_devx_port(ctx, port_num, mlx5_devx_port);
+#else
+ (void)ctx;
+ (void)port_num;
+ (void)mlx5_devx_port;
+ errno = ENOTSUP;
+ return errno;
+#endif
+}
+
alignas(RTE_CACHE_LINE_SIZE)
const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){
.version = MLX5_GLUE_VERSION,
@@ -1083,4 +1099,5 @@
.devx_umem_reg = mlx5_glue_devx_umem_reg,
.devx_umem_dereg = mlx5_glue_devx_umem_dereg,
.devx_qp_query = mlx5_glue_devx_qp_query,
+ .devx_port_query = mlx5_glue_devx_port_query,
};
@@ -76,6 +76,10 @@
struct mlx5dv_dr_domain;
#endif
+#ifndef HAVE_MLX5DV_DR_DEVX_PORT
+struct mlx5dv_devx_port;
+#endif
+
/* LIB_GLUE_VERSION must be updated every time this structure is modified. */
struct mlx5_glue {
const char *version;
@@ -239,6 +243,9 @@ struct mlx5_glue {
int (*devx_qp_query)(struct ibv_qp *qp,
const void *in, size_t inlen,
void *out, size_t outlen);
+ int (*devx_port_query)(struct ibv_context *ctx,
+ uint32_t port_num,
+ struct mlx5dv_devx_port *mlx5_devx_port);
};
const struct mlx5_glue *mlx5_glue;