From cc8627bc6d7a7bd3ccc2653b746aac4fbaa0bc50 Mon Sep 17 00:00:00 2001 From: Viacheslav Ovsiienko Date: Mon, 7 Oct 2019 13:58:22 +0000 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: d5c06b1b10ae ("net/mlx5: query vport index match mode and parameters") Signed-off-by: Viacheslav Ovsiienko --- 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(-) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 8e47a4fa55..7e0d7ec219 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -1845,7 +1845,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, */ 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); diff --git a/drivers/net/mlx5/mlx5_glue.c b/drivers/net/mlx5/mlx5_glue.c index 9ee37f4c8b..b5aab52616 100644 --- a/drivers/net/mlx5/mlx5_glue.c +++ b/drivers/net/mlx5/mlx5_glue.c @@ -989,6 +989,22 @@ mlx5_glue_devx_qp_query(struct ibv_qp *qp, #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 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ .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, }; diff --git a/drivers/net/mlx5/mlx5_glue.h b/drivers/net/mlx5/mlx5_glue.h index 82d6b10d87..7fa83497dc 100644 --- a/drivers/net/mlx5/mlx5_glue.h +++ b/drivers/net/mlx5/mlx5_glue.h @@ -76,6 +76,10 @@ enum mlx5dv_dr_domain_type { unused, }; 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; -- 2.20.1