aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authormajd@mellanox.com <majd@mellanox.com>2016-01-14 12:13:02 -0500
committerDoug Ledford <dledford@redhat.com>2016-01-21 12:01:09 -0500
commit146d2f1af3245a10b13eef263687e54f4e253d1d (patch)
treebee5b45a9c8d5e32cc146570d0b805919dfa7df5 /drivers/infiniband
parenta14c2d4beee5633081d344f130b81e5ee76e4585 (diff)
IB/mlx5: Allocate a Transport Domain for each ucontext
Transport Domain groups several TIS and TIR object. By grouping these object, it defines wheather local loopback packets that are sent from the TIS objects in the group are received by the TIR objects in the same group. Allocate a Transport Domain(TD) for each user context to be used in the future by Raw Packet QP for Self-Loopback Control. Signed-off-by: Majd Dibbiny <majd@mellanox.com> Reviewed-by: Matan Barak <matanb@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband')
-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)