aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/hw/mlx5/main.c16
-rw-r--r--drivers/infiniband/hw/mlx5/mlx5_ib.h3
2 files changed, 18 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 829c37c95d60..a55bf05c8522 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -942,6 +942,13 @@ static struct ib_ucontext *mlx5_ib_alloc_ucontext(struct ib_device *ibdev,
942 context->ibucontext.invalidate_range = &mlx5_ib_invalidate_range; 942 context->ibucontext.invalidate_range = &mlx5_ib_invalidate_range;
943#endif 943#endif
944 944
945 if (MLX5_CAP_GEN(dev->mdev, log_max_transport_domain)) {
946 err = mlx5_core_alloc_transport_domain(dev->mdev,
947 &context->tdn);
948 if (err)
949 goto out_uars;
950 }
951
945 INIT_LIST_HEAD(&context->db_page_list); 952 INIT_LIST_HEAD(&context->db_page_list);
946 mutex_init(&context->db_page_mutex); 953 mutex_init(&context->db_page_mutex);
947 954
@@ -964,7 +971,7 @@ static struct ib_ucontext *mlx5_ib_alloc_ucontext(struct ib_device *ibdev,
964 971
965 err = ib_copy_to_udata(udata, &resp, resp.response_length); 972 err = ib_copy_to_udata(udata, &resp, resp.response_length);
966 if (err) 973 if (err)
967 goto out_uars; 974 goto out_td;
968 975
969 uuari->ver = ver; 976 uuari->ver = ver;
970 uuari->num_low_latency_uuars = req.num_low_latency_uuars; 977 uuari->num_low_latency_uuars = req.num_low_latency_uuars;
@@ -974,6 +981,10 @@ static struct ib_ucontext *mlx5_ib_alloc_ucontext(struct ib_device *ibdev,
974 981
975 return &context->ibucontext; 982 return &context->ibucontext;
976 983
984out_td:
985 if (MLX5_CAP_GEN(dev->mdev, log_max_transport_domain))
986 mlx5_core_dealloc_transport_domain(dev->mdev, context->tdn);
987
977out_uars: 988out_uars:
978 for (i--; i >= 0; i--) 989 for (i--; i >= 0; i--)
979 mlx5_cmd_free_uar(dev->mdev, uars[i].index); 990 mlx5_cmd_free_uar(dev->mdev, uars[i].index);
@@ -998,6 +1009,9 @@ static int mlx5_ib_dealloc_ucontext(struct ib_ucontext *ibcontext)
998 struct mlx5_uuar_info *uuari = &context->uuari; 1009 struct mlx5_uuar_info *uuari = &context->uuari;
999 int i; 1010 int i;
1000 1011
1012 if (MLX5_CAP_GEN(dev->mdev, log_max_transport_domain))
1013 mlx5_core_dealloc_transport_domain(dev->mdev, context->tdn);
1014
1001 for (i = 0; i < uuari->num_uars; i++) { 1015 for (i = 0; i < uuari->num_uars; i++) {
1002 if (mlx5_cmd_free_uar(dev->mdev, uuari->uars[i].index)) 1016 if (mlx5_cmd_free_uar(dev->mdev, uuari->uars[i].index))
1003 mlx5_ib_warn(dev, "failed to free UAR 0x%x\n", uuari->uars[i].index); 1017 mlx5_ib_warn(dev, "failed to free UAR 0x%x\n", uuari->uars[i].index);
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index a6a57de278b4..2ccc3d95d574 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -42,6 +42,7 @@
42#include <linux/mlx5/qp.h> 42#include <linux/mlx5/qp.h>
43#include <linux/mlx5/srq.h> 43#include <linux/mlx5/srq.h>
44#include <linux/types.h> 44#include <linux/types.h>
45#include <linux/mlx5/transobj.h>
45 46
46#define mlx5_ib_dbg(dev, format, arg...) \ 47#define mlx5_ib_dbg(dev, format, arg...) \
47pr_debug("%s:%s:%d:(pid %d): " format, (dev)->ib_dev.name, __func__, \ 48pr_debug("%s:%s:%d:(pid %d): " format, (dev)->ib_dev.name, __func__, \
@@ -110,6 +111,8 @@ struct mlx5_ib_ucontext {
110 struct mutex db_page_mutex; 111 struct mutex db_page_mutex;
111 struct mlx5_uuar_info uuari; 112 struct mlx5_uuar_info uuari;
112 u8 cqe_version; 113 u8 cqe_version;
114 /* Transport Domain number */
115 u32 tdn;
113}; 116};
114 117
115static inline struct mlx5_ib_ucontext *to_mucontext(struct ib_ucontext *ibucontext) 118static inline struct mlx5_ib_ucontext *to_mucontext(struct ib_ucontext *ibucontext)