common/mlx5: glue null memory region allocation
authorMatan Azrad <matan@mellanox.com>
Wed, 29 Jan 2020 12:38:33 +0000 (12:38 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 5 Feb 2020 08:51:20 +0000 (09:51 +0100)
Add support for rdma-core API to allocate NULL MR.

When the device HW get a NULL MR address, it will do nothing with the
address, no read and no write.

Signed-off-by: Matan Azrad <matan@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
drivers/common/mlx5/mlx5_glue.c
drivers/common/mlx5/mlx5_glue.h

index d5bc84e..e75e6bc 100644 (file)
@@ -226,6 +226,18 @@ mlx5_glue_reg_mr(struct ibv_pd *pd, void *addr, size_t length, int access)
        return ibv_reg_mr(pd, addr, length, access);
 }
 
+static struct ibv_mr *
+mlx5_glue_alloc_null_mr(struct ibv_pd *pd)
+{
+#ifdef HAVE_IBV_DEVX_OBJ
+       return ibv_alloc_null_mr(pd);
+#else
+       (void)pd;
+       errno = ENOTSUP;
+       return NULL;
+#endif
+}
+
 static int
 mlx5_glue_dereg_mr(struct ibv_mr *mr)
 {
@@ -1070,6 +1082,7 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){
        .destroy_qp = mlx5_glue_destroy_qp,
        .modify_qp = mlx5_glue_modify_qp,
        .reg_mr = mlx5_glue_reg_mr,
+       .alloc_null_mr = mlx5_glue_alloc_null_mr,
        .dereg_mr = mlx5_glue_dereg_mr,
        .create_counter_set = mlx5_glue_create_counter_set,
        .destroy_counter_set = mlx5_glue_destroy_counter_set,
index f4c3180..33afaf4 100644 (file)
@@ -138,6 +138,7 @@ struct mlx5_glue {
                         int attr_mask);
        struct ibv_mr *(*reg_mr)(struct ibv_pd *pd, void *addr,
                                 size_t length, int access);
+       struct ibv_mr *(*alloc_null_mr)(struct ibv_pd *pd);
        int (*dereg_mr)(struct ibv_mr *mr);
        struct ibv_counter_set *(*create_counter_set)
                (struct ibv_context *context,