History

IB/mlx5: Extend QP creation to get uar page index from user space

Extend QP creation to get uar page index from user space, this mode can be used with the UAR dynamic mode APIs to allocate/destroy a UAR object. As part of enabling this option blocked the weird/un-supported cross channel option which uses index 0 hard-coded. This QP flag wasn't exposed to user space as part of any formal upstream release, the dynamic option can allow having valid UAR page index instead.

Yishai Hadas committed 6 years ago

Commit ac42a5e1 parent 64d99f62 files · +18 −10Browse files

Unified · Split

2 files
  1. drivers/infiniband/hw/mlx5/qp.c +17 −10
  2. include/uapi/rdma/mlx5-abi.h +1 −0
drivers/infiniband/hw/mlx5/qp.c+17−10
@@ -919,6 +919,7 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd, · 918 unmodified lines
919919 void *qpc;
920920 int err;
921921 u16 uid;
922+ u32 uar_flags;
922923
923924 err = ib_copy_from_udata(&ucmd, udata, sizeof(ucmd));
924925 if (err) {
@@ -928,24 +929,29 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd, · 3 unmodified lines
928929
929930 context = rdma_udata_to_drv_context(udata, struct mlx5_ib_ucontext,
930931 ibucontext);
931− if (ucmd.flags & MLX5_QP_FLAG_BFREG_INDEX) {
932+ uar_flags = ucmd.flags & (MLX5_QP_FLAG_UAR_PAGE_INDEX |
933+ MLX5_QP_FLAG_BFREG_INDEX);
934+ switch (uar_flags) {
935+ case MLX5_QP_FLAG_UAR_PAGE_INDEX:
936+ uar_index = ucmd.bfreg_index;
937+ bfregn = MLX5_IB_INVALID_BFREG;
938+ break;
939+ case MLX5_QP_FLAG_BFREG_INDEX:
932940 uar_index = bfregn_to_uar_index(dev, &context->bfregi,
933941 ucmd.bfreg_index, true);
934942 if (uar_index < 0)
935943 return uar_index;
936−
937944 bfregn = MLX5_IB_INVALID_BFREG;
938− } else if (qp->flags & MLX5_IB_QP_CROSS_CHANNEL) {
939− /*
940− * TBD: should come from the verbs when we have the API
941− */
942− /* In CROSS_CHANNEL CQ and QP must use the same UAR */
943− bfregn = MLX5_CROSS_CHANNEL_BFREG;
944− }
945− else {
945+ break;
946+ case 0:
947+ if (qp->flags & MLX5_IB_QP_CROSS_CHANNEL)
948+ return -EINVAL;
946949 bfregn = alloc_bfreg(dev, &context->bfregi);
947950 if (bfregn < 0)
948951 return bfregn;
952+ break;
953+ default:
954+ return -EINVAL;
949955 }
950956
951957 mlx5_ib_dbg(dev, "bfregn 0x%x, uar_index 0x%x\n", bfregn, uar_index);
@@ -2100,6 +2106,7 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, · 1148 unmodified lines
21002106 MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC |
21012107 MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC |
21022108 MLX5_QP_FLAG_TUNNEL_OFFLOADS |
2109+ MLX5_QP_FLAG_UAR_PAGE_INDEX |
21032110 MLX5_QP_FLAG_TYPE_DCI |
21042111 MLX5_QP_FLAG_TYPE_DCT))
21052112 return -EINVAL;
include/uapi/rdma/mlx5-abi.h+1−0
@@ -49,6 +49,7 @@ enum { · 48 unmodified lines
4949 MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC = 1 << 7,
5050 MLX5_QP_FLAG_ALLOW_SCATTER_CQE = 1 << 8,
5151 MLX5_QP_FLAG_PACKET_BASED_CREDIT_MODE = 1 << 9,
52+ MLX5_QP_FLAG_UAR_PAGE_INDEX = 1 << 10,
5253 };
5354
5455 enum {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t