net/mlx5: fix direct call to rdma-core library
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>
Mon, 7 Oct 2019 13:58:22 +0000 (13:58 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 8 Oct 2019 10:14:32 +0000 (12:14 +0200)
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>
drivers/net/mlx5/mlx5.c
drivers/net/mlx5/mlx5_glue.c
drivers/net/mlx5/mlx5_glue.h

index 8e47a4f..7e0d7ec 100644 (file)
@@ -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);
index 9ee37f4..b5aab52 100644 (file)
@@ -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,
 };
index 82d6b10..7fa8349 100644 (file)
@@ -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;