summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>2019-10-07 13:58:22 +0000
committerFerruh Yigit <ferruh.yigit@intel.com>2019-10-08 12:14:32 +0200
commitcc8627bc6d7a7bd3ccc2653b746aac4fbaa0bc50 (patch)
treeaf7302d39c27b58492e8daa278cb415f9efb0a7f
parentfbc8341218bc0a373035468445dfd29a433e8f47 (diff)
downloaddpdk-next-eventdev-cc8627bc6d7a7bd3ccc2653b746aac4fbaa0bc50.zip
dpdk-next-eventdev-cc8627bc6d7a7bd3ccc2653b746aac4fbaa0bc50.tar.gz
dpdk-next-eventdev-cc8627bc6d7a7bd3ccc2653b746aac4fbaa0bc50.tar.xz
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 <viacheslavo@mellanox.com>
-rw-r--r--drivers/net/mlx5/mlx5.c2
-rw-r--r--drivers/net/mlx5/mlx5_glue.c17
-rw-r--r--drivers/net/mlx5/mlx5_glue.h7
3 files changed, 25 insertions, 1 deletions
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 8e47a4f..7e0d7ec 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 9ee37f4..b5aab52 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 82d6b10..7fa8349 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;