diff options
-rw-r--r-- | drivers/infiniband/hw/mlx5/main.c | 16 | ||||
-rw-r--r-- | drivers/infiniband/hw/mlx5/mlx5_ib.h | 3 |
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 | ||
984 | out_td: | ||
985 | if (MLX5_CAP_GEN(dev->mdev, log_max_transport_domain)) | ||
986 | mlx5_core_dealloc_transport_domain(dev->mdev, context->tdn); | ||
987 | |||
977 | out_uars: | 988 | out_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...) \ |
47 | pr_debug("%s:%s:%d:(pid %d): " format, (dev)->ib_dev.name, __func__, \ | 48 | pr_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 | ||
115 | static inline struct mlx5_ib_ucontext *to_mucontext(struct ib_ucontext *ibucontext) | 118 | static inline struct mlx5_ib_ucontext *to_mucontext(struct ib_ucontext *ibucontext) |