Skip to content

Commit 33023fb

Browse files
Steve Wisejgunthorpe
authored andcommitted
IB/core: add max_send_sge and max_recv_sge attributes
This patch replaces the ib_device_attr.max_sge with max_send_sge and max_recv_sge. It allows ulps to take advantage of devices that have very different send and recv sge depths. For example cxgb4 has a max_recv_sge of 4, yet a max_send_sge of 16. Splitting out these attributes allows much more efficient use of the SQ for cxgb4 with ulps that use the RDMA_RW API. Consider a large RDMA WRITE that has 16 scattergather entries. With max_sge of 4, the ulp would send 4 WRITE WRs, but with max_sge of 16, it can be done with 1 WRITE WR. Acked-by: Sagi Grimberg <[email protected]> Acked-by: Christoph Hellwig <[email protected]> Acked-by: Selvin Xavier <[email protected]> Acked-by: Shiraz Saleem <[email protected]> Acked-by: Dennis Dalessandro <[email protected]> Signed-off-by: Steve Wise <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent b90575c commit 33023fb

File tree

28 files changed

+65
-39
lines changed

28 files changed

+65
-39
lines changed

drivers/infiniband/core/uverbs_cmd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ static void copy_query_dev_fields(struct ib_uverbs_file *file,
189189
resp->max_qp = attr->max_qp;
190190
resp->max_qp_wr = attr->max_qp_wr;
191191
resp->device_cap_flags = lower_32_bits(attr->device_cap_flags);
192-
resp->max_sge = attr->max_sge;
192+
resp->max_sge = min(attr->max_send_sge, attr->max_recv_sge);
193193
resp->max_sge_rd = attr->max_sge_rd;
194194
resp->max_cq = attr->max_cq;
195195
resp->max_cqe = attr->max_cqe;

drivers/infiniband/hw/bnxt_re/ib_verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ int bnxt_re_query_device(struct ib_device *ibdev,
166166
| IB_DEVICE_MEM_WINDOW
167167
| IB_DEVICE_MEM_WINDOW_TYPE_2B
168168
| IB_DEVICE_MEM_MGT_EXTENSIONS;
169-
ib_attr->max_sge = dev_attr->max_qp_sges;
169+
ib_attr->max_send_sge = dev_attr->max_qp_sges;
170+
ib_attr->max_recv_sge = dev_attr->max_qp_sges;
170171
ib_attr->max_sge_rd = dev_attr->max_qp_sges;
171172
ib_attr->max_cq = dev_attr->max_cq;
172173
ib_attr->max_cqe = dev_attr->max_cq_wqes;

drivers/infiniband/hw/cxgb3/iwch_provider.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,8 @@ static int iwch_query_device(struct ib_device *ibdev, struct ib_device_attr *pro
11031103
props->max_mr_size = dev->attr.max_mr_size;
11041104
props->max_qp = dev->attr.max_qps;
11051105
props->max_qp_wr = dev->attr.max_wrs;
1106-
props->max_sge = dev->attr.max_sge_per_wr;
1106+
props->max_send_sge = dev->attr.max_sge_per_wr;
1107+
props->max_recv_sge = dev->attr.max_sge_per_wr;
11071108
props->max_sge_rd = 1;
11081109
props->max_qp_rd_atom = dev->attr.max_rdma_reads_per_qp;
11091110
props->max_qp_init_rd_atom = dev->attr.max_rdma_reads_per_qp;

drivers/infiniband/hw/cxgb4/provider.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,8 @@ static int c4iw_query_device(struct ib_device *ibdev, struct ib_device_attr *pro
343343
props->max_mr_size = T4_MAX_MR_SIZE;
344344
props->max_qp = dev->rdev.lldi.vr->qp.size / 2;
345345
props->max_qp_wr = dev->rdev.hw_queue.t4_max_qp_depth;
346-
props->max_sge = T4_MAX_RECV_SGE;
346+
props->max_send_sge = min(T4_MAX_SEND_SGE, T4_MAX_WRITE_SGE);
347+
props->max_recv_sge = T4_MAX_RECV_SGE;
347348
props->max_sge_rd = 1;
348349
props->max_res_rd_atom = dev->rdev.lldi.max_ird_adapter;
349350
props->max_qp_rd_atom = min(dev->rdev.lldi.max_ordird_qp,

drivers/infiniband/hw/hfi1/verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1410,7 +1410,8 @@ static void hfi1_fill_device_attr(struct hfi1_devdata *dd)
14101410
rdi->dparms.props.max_fast_reg_page_list_len = UINT_MAX;
14111411
rdi->dparms.props.max_qp = hfi1_max_qps;
14121412
rdi->dparms.props.max_qp_wr = hfi1_max_qp_wrs;
1413-
rdi->dparms.props.max_sge = hfi1_max_sges;
1413+
rdi->dparms.props.max_send_sge = hfi1_max_sges;
1414+
rdi->dparms.props.max_recv_sge = hfi1_max_sges;
14141415
rdi->dparms.props.max_sge_rd = hfi1_max_sges;
14151416
rdi->dparms.props.max_cq = hfi1_max_cqs;
14161417
rdi->dparms.props.max_ah = hfi1_max_ahs;

drivers/infiniband/hw/hns/hns_roce_main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ static int hns_roce_query_device(struct ib_device *ib_dev,
206206
props->max_qp_wr = hr_dev->caps.max_wqes;
207207
props->device_cap_flags = IB_DEVICE_PORT_ACTIVE_EVENT |
208208
IB_DEVICE_RC_RNR_NAK_GEN;
209-
props->max_sge = max(hr_dev->caps.max_sq_sg, hr_dev->caps.max_rq_sg);
209+
props->max_send_sge = hr_dev->caps.max_sq_sg;
210+
props->max_recv_sge = hr_dev->caps.max_rq_sg;
210211
props->max_sge_rd = 1;
211212
props->max_cq = hr_dev->caps.num_cqs;
212213
props->max_cqe = hr_dev->caps.max_cqes;

drivers/infiniband/hw/i40iw/i40iw_verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ static int i40iw_query_device(struct ib_device *ibdev,
7171
props->max_mr_size = I40IW_MAX_OUTBOUND_MESSAGE_SIZE;
7272
props->max_qp = iwdev->max_qp - iwdev->used_qps;
7373
props->max_qp_wr = I40IW_MAX_QP_WRS;
74-
props->max_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;
74+
props->max_send_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;
75+
props->max_recv_sge = I40IW_MAX_WQ_FRAGMENT_COUNT;
7576
props->max_cq = iwdev->max_cq - iwdev->used_cqs;
7677
props->max_cqe = iwdev->max_cqe;
7778
props->max_mr = iwdev->max_mr - iwdev->used_mrs;

drivers/infiniband/hw/mlx4/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,8 +517,8 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
517517
props->page_size_cap = dev->dev->caps.page_size_cap;
518518
props->max_qp = dev->dev->quotas.qp;
519519
props->max_qp_wr = dev->dev->caps.max_wqes - MLX4_IB_SQ_MAX_SPARE;
520-
props->max_sge = min(dev->dev->caps.max_sq_sg,
521-
dev->dev->caps.max_rq_sg);
520+
props->max_send_sge = dev->dev->caps.max_sq_sg;
521+
props->max_recv_sge = dev->dev->caps.max_rq_sg;
522522
props->max_sge_rd = MLX4_MAX_SGE_RD;
523523
props->max_cq = dev->dev->quotas.cq;
524524
props->max_cqe = dev->dev->caps.max_cqes;

drivers/infiniband/hw/mlx5/main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,8 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
888888
max_sq_sg = (max_sq_desc - sizeof(struct mlx5_wqe_ctrl_seg) -
889889
sizeof(struct mlx5_wqe_raddr_seg)) /
890890
sizeof(struct mlx5_wqe_data_seg);
891-
props->max_sge = min(max_rq_sg, max_sq_sg);
891+
props->max_send_sge = max_sq_sg;
892+
props->max_recv_sge = max_rq_sg;
892893
props->max_sge_rd = MLX5_MAX_SGE_RD;
893894
props->max_cq = 1 << MLX5_CAP_GEN(mdev, log_max_cq);
894895
props->max_cqe = (1 << MLX5_CAP_GEN(mdev, log_max_cq_sz)) - 1;

drivers/infiniband/hw/mthca/mthca_provider.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,9 @@ static int mthca_query_device(struct ib_device *ibdev, struct ib_device_attr *pr
9696
props->page_size_cap = mdev->limits.page_size_cap;
9797
props->max_qp = mdev->limits.num_qps - mdev->limits.reserved_qps;
9898
props->max_qp_wr = mdev->limits.max_wqes;
99-
props->max_sge = mdev->limits.max_sg;
100-
props->max_sge_rd = props->max_sge;
99+
props->max_send_sge = mdev->limits.max_sg;
100+
props->max_recv_sge = mdev->limits.max_sg;
101+
props->max_sge_rd = mdev->limits.max_sg;
101102
props->max_cq = mdev->limits.num_cqs - mdev->limits.reserved_cqs;
102103
props->max_cqe = mdev->limits.max_cqes;
103104
props->max_mr = mdev->limits.num_mpts - mdev->limits.reserved_mrws;

drivers/infiniband/hw/nes/nes_verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,8 @@ static int nes_query_device(struct ib_device *ibdev, struct ib_device_attr *prop
436436
props->max_mr_size = 0x80000000;
437437
props->max_qp = nesibdev->max_qp;
438438
props->max_qp_wr = nesdev->nesadapter->max_qp_wr - 2;
439-
props->max_sge = nesdev->nesadapter->max_sge;
439+
props->max_send_sge = nesdev->nesadapter->max_sge;
440+
props->max_recv_sge = nesdev->nesadapter->max_sge;
440441
props->max_cq = nesibdev->max_cq;
441442
props->max_cqe = nesdev->nesadapter->max_cqe;
442443
props->max_mr = nesibdev->max_mr;

drivers/infiniband/hw/ocrdma/ocrdma_verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr,
8989
IB_DEVICE_SYS_IMAGE_GUID |
9090
IB_DEVICE_LOCAL_DMA_LKEY |
9191
IB_DEVICE_MEM_MGT_EXTENSIONS;
92-
attr->max_sge = min(dev->attr.max_send_sge, dev->attr.max_recv_sge);
92+
attr->max_send_sge = dev->attr.max_send_sge;
93+
attr->max_recv_sge = dev->attr.max_recv_sge;
9394
attr->max_sge_rd = dev->attr.max_rdma_sge;
9495
attr->max_cq = dev->attr.max_cq;
9596
attr->max_cqe = dev->attr.max_cqe;

drivers/infiniband/hw/qedr/verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ int qedr_query_device(struct ib_device *ibdev,
112112
IB_DEVICE_RC_RNR_NAK_GEN |
113113
IB_DEVICE_LOCAL_DMA_LKEY | IB_DEVICE_MEM_MGT_EXTENSIONS;
114114

115-
attr->max_sge = qattr->max_sge;
115+
attr->max_send_sge = qattr->max_sge;
116+
attr->max_recv_sge = qattr->max_sge;
116117
attr->max_sge_rd = qattr->max_sge;
117118
attr->max_cq = qattr->max_cq;
118119
attr->max_cqe = qattr->max_cqe;

drivers/infiniband/hw/qib/qib_verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1489,7 +1489,8 @@ static void qib_fill_device_attr(struct qib_devdata *dd)
14891489
rdi->dparms.props.max_mr_size = ~0ULL;
14901490
rdi->dparms.props.max_qp = ib_qib_max_qps;
14911491
rdi->dparms.props.max_qp_wr = ib_qib_max_qp_wrs;
1492-
rdi->dparms.props.max_sge = ib_qib_max_sges;
1492+
rdi->dparms.props.max_send_sge = ib_qib_max_sges;
1493+
rdi->dparms.props.max_recv_sge = ib_qib_max_sges;
14931494
rdi->dparms.props.max_sge_rd = ib_qib_max_sges;
14941495
rdi->dparms.props.max_cq = ib_qib_max_cqs;
14951496
rdi->dparms.props.max_cqe = ib_qib_max_cqes;

drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ int pvrdma_query_device(struct ib_device *ibdev,
8282
props->max_qp = dev->dsr->caps.max_qp;
8383
props->max_qp_wr = dev->dsr->caps.max_qp_wr;
8484
props->device_cap_flags = dev->dsr->caps.device_cap_flags;
85-
props->max_sge = dev->dsr->caps.max_sge;
85+
props->max_send_sge = dev->dsr->caps.max_sge;
86+
props->max_recv_sge = dev->dsr->caps.max_sge;
8687
props->max_sge_rd = PVRDMA_GET_CAP(dev, dev->dsr->caps.max_sge,
8788
dev->dsr->caps.max_sge_rd);
8889
props->max_srq = dev->dsr->caps.max_srq;

drivers/infiniband/sw/rdmavt/qp.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -780,14 +780,15 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
780780
if (!rdi)
781781
return ERR_PTR(-EINVAL);
782782

783-
if (init_attr->cap.max_send_sge > rdi->dparms.props.max_sge ||
783+
if (init_attr->cap.max_send_sge > rdi->dparms.props.max_send_sge ||
784784
init_attr->cap.max_send_wr > rdi->dparms.props.max_qp_wr ||
785785
init_attr->create_flags)
786786
return ERR_PTR(-EINVAL);
787787

788788
/* Check receive queue parameters if no SRQ is specified. */
789789
if (!init_attr->srq) {
790-
if (init_attr->cap.max_recv_sge > rdi->dparms.props.max_sge ||
790+
if (init_attr->cap.max_recv_sge >
791+
rdi->dparms.props.max_recv_sge ||
791792
init_attr->cap.max_recv_wr > rdi->dparms.props.max_qp_wr)
792793
return ERR_PTR(-EINVAL);
793794

drivers/infiniband/sw/rxe/rxe.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ static void rxe_init_device_param(struct rxe_dev *rxe)
9191
rxe->attr.max_qp = RXE_MAX_QP;
9292
rxe->attr.max_qp_wr = RXE_MAX_QP_WR;
9393
rxe->attr.device_cap_flags = RXE_DEVICE_CAP_FLAGS;
94-
rxe->attr.max_sge = RXE_MAX_SGE;
94+
rxe->attr.max_send_sge = RXE_MAX_SGE;
95+
rxe->attr.max_recv_sge = RXE_MAX_SGE;
9596
rxe->attr.max_sge_rd = RXE_MAX_SGE_RD;
9697
rxe->attr.max_cq = RXE_MAX_CQ;
9798
rxe->attr.max_cqe = (1 << RXE_MAX_LOG_CQE) - 1;

drivers/infiniband/sw/rxe/rxe_qp.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ static int rxe_qp_chk_cap(struct rxe_dev *rxe, struct ib_qp_cap *cap,
4949
goto err1;
5050
}
5151

52-
if (cap->max_send_sge > rxe->attr.max_sge) {
52+
if (cap->max_send_sge > rxe->attr.max_send_sge) {
5353
pr_warn("invalid send sge = %d > %d\n",
54-
cap->max_send_sge, rxe->attr.max_sge);
54+
cap->max_send_sge, rxe->attr.max_send_sge);
5555
goto err1;
5656
}
5757

@@ -62,9 +62,9 @@ static int rxe_qp_chk_cap(struct rxe_dev *rxe, struct ib_qp_cap *cap,
6262
goto err1;
6363
}
6464

65-
if (cap->max_recv_sge > rxe->attr.max_sge) {
65+
if (cap->max_recv_sge > rxe->attr.max_recv_sge) {
6666
pr_warn("invalid recv sge = %d > %d\n",
67-
cap->max_recv_sge, rxe->attr.max_sge);
67+
cap->max_recv_sge, rxe->attr.max_recv_sge);
6868
goto err1;
6969
}
7070
}

drivers/infiniband/ulp/ipoib/ipoib_cm.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,8 +1068,8 @@ static struct ib_qp *ipoib_cm_create_tx_qp(struct net_device *dev, struct ipoib_
10681068
struct ib_qp *tx_qp;
10691069

10701070
if (dev->features & NETIF_F_SG)
1071-
attr.cap.max_send_sge =
1072-
min_t(u32, priv->ca->attrs.max_sge, MAX_SKB_FRAGS + 1);
1071+
attr.cap.max_send_sge = min_t(u32, priv->ca->attrs.max_send_sge,
1072+
MAX_SKB_FRAGS + 1);
10731073

10741074
tx_qp = ib_create_qp(priv->pd, &attr);
10751075
tx->max_send_sge = attr.cap.max_send_sge;

drivers/infiniband/ulp/ipoib/ipoib_verbs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
147147
.cap = {
148148
.max_send_wr = ipoib_sendq_size,
149149
.max_recv_wr = ipoib_recvq_size,
150-
.max_send_sge = min_t(u32, priv->ca->attrs.max_sge,
150+
.max_send_sge = min_t(u32, priv->ca->attrs.max_send_sge,
151151
MAX_SKB_FRAGS + 1),
152152
.max_recv_sge = IPOIB_UD_RX_SG
153153
},

drivers/infiniband/ulp/isert/ib_isert.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ isert_create_qp(struct isert_conn *isert_conn,
136136
attr.cap.max_send_wr = ISERT_QP_MAX_REQ_DTOS + 1;
137137
attr.cap.max_recv_wr = ISERT_QP_MAX_RECV_DTOS + 1;
138138
attr.cap.max_rdma_ctxs = ISCSI_DEF_XMIT_CMDS_MAX;
139-
attr.cap.max_send_sge = device->ib_device->attrs.max_sge;
139+
attr.cap.max_send_sge = device->ib_device->attrs.max_send_sge;
140140
attr.cap.max_recv_sge = 1;
141141
attr.sq_sig_type = IB_SIGNAL_REQ_WR;
142142
attr.qp_type = IB_QPT_RC;
@@ -299,7 +299,8 @@ isert_create_device_ib_res(struct isert_device *device)
299299
struct ib_device *ib_dev = device->ib_device;
300300
int ret;
301301

302-
isert_dbg("devattr->max_sge: %d\n", ib_dev->attrs.max_sge);
302+
isert_dbg("devattr->max_send_sge: %d devattr->max_recv_sge %d\n",
303+
ib_dev->attrs.max_send_sge, ib_dev->attrs.max_recv_sge);
303304
isert_dbg("devattr->max_sge_rd: %d\n", ib_dev->attrs.max_sge_rd);
304305

305306
ret = isert_alloc_comps(device);

drivers/infiniband/ulp/srpt/ib_srpt.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1753,13 +1753,15 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch)
17531753
*/
17541754
qp_init->cap.max_send_wr = min(sq_size / 2, attrs->max_qp_wr);
17551755
qp_init->cap.max_rdma_ctxs = sq_size / 2;
1756-
qp_init->cap.max_send_sge = min(attrs->max_sge, SRPT_MAX_SG_PER_WQE);
1756+
qp_init->cap.max_send_sge = min(attrs->max_send_sge,
1757+
SRPT_MAX_SG_PER_WQE);
17571758
qp_init->port_num = ch->sport->port;
17581759
if (sdev->use_srq) {
17591760
qp_init->srq = sdev->srq;
17601761
} else {
17611762
qp_init->cap.max_recv_wr = ch->rq_size;
1762-
qp_init->cap.max_recv_sge = qp_init->cap.max_send_sge;
1763+
qp_init->cap.max_recv_sge = min(attrs->max_recv_sge,
1764+
SRPT_MAX_SG_PER_WQE);
17631765
}
17641766

17651767
if (ch->using_rdma_cm) {

drivers/nvme/target/rdma.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ static int nvmet_rdma_create_queue_ib(struct nvmet_rdma_queue *queue)
874874
qp_attr.cap.max_send_wr = queue->send_queue_size + 1;
875875
qp_attr.cap.max_rdma_ctxs = queue->send_queue_size;
876876
qp_attr.cap.max_send_sge = max(ndev->device->attrs.max_sge_rd,
877-
ndev->device->attrs.max_sge);
877+
ndev->device->attrs.max_send_sge);
878878

879879
if (ndev->srq) {
880880
qp_attr.srq = ndev->srq;

fs/cifs/smbdirect.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,9 +1661,16 @@ static struct smbd_connection *_smbd_get_connection(
16611661
info->max_receive_size = smbd_max_receive_size;
16621662
info->keep_alive_interval = smbd_keep_alive_interval;
16631663

1664-
if (info->id->device->attrs.max_sge < SMBDIRECT_MAX_SGE) {
1665-
log_rdma_event(ERR, "warning: device max_sge = %d too small\n",
1666-
info->id->device->attrs.max_sge);
1664+
if (info->id->device->attrs.max_send_sge < SMBDIRECT_MAX_SGE) {
1665+
log_rdma_event(ERR,
1666+
"warning: device max_send_sge = %d too small\n",
1667+
info->id->device->attrs.max_send_sge);
1668+
log_rdma_event(ERR, "Queue Pair creation may fail\n");
1669+
}
1670+
if (info->id->device->attrs.max_recv_sge < SMBDIRECT_MAX_SGE) {
1671+
log_rdma_event(ERR,
1672+
"warning: device max_recv_sge = %d too small\n",
1673+
info->id->device->attrs.max_recv_sge);
16671674
log_rdma_event(ERR, "Queue Pair creation may fail\n");
16681675
}
16691676

include/rdma/ib_verbs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,8 @@ struct ib_device_attr {
345345
int max_qp;
346346
int max_qp_wr;
347347
u64 device_cap_flags;
348-
int max_sge;
348+
int max_send_sge;
349+
int max_recv_sge;
349350
int max_sge_rd;
350351
int max_cq;
351352
int max_cqe;

net/rds/ib.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ static void rds_ib_add_one(struct ib_device *device)
143143
INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free);
144144

145145
rds_ibdev->max_wrs = device->attrs.max_qp_wr;
146-
rds_ibdev->max_sge = min(device->attrs.max_sge, RDS_IB_MAX_SGE);
146+
rds_ibdev->max_sge = min(device->attrs.max_send_sge, RDS_IB_MAX_SGE);
147147

148148
has_fr = (device->attrs.device_cap_flags &
149149
IB_DEVICE_MEM_MGT_EXTENSIONS);

net/sunrpc/xprtrdma/svc_rdma_transport.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
476476

477477
/* Qualify the transport resource defaults with the
478478
* capabilities of this particular device */
479-
newxprt->sc_max_send_sges = dev->attrs.max_sge;
479+
newxprt->sc_max_send_sges = dev->attrs.max_send_sge;
480480
/* transport hdr, head iovec, one page list entry, tail iovec */
481481
if (newxprt->sc_max_send_sges < 4) {
482482
pr_err("svcrdma: too few Send SGEs available (%d)\n",

net/sunrpc/xprtrdma/verbs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
508508
unsigned int max_sge;
509509
int rc;
510510

511-
max_sge = min_t(unsigned int, ia->ri_device->attrs.max_sge,
511+
max_sge = min_t(unsigned int, ia->ri_device->attrs.max_send_sge,
512512
RPCRDMA_MAX_SEND_SGES);
513513
if (max_sge < RPCRDMA_MIN_SEND_SGES) {
514514
pr_warn("rpcrdma: HCA provides only %d send SGEs\n", max_sge);

0 commit comments

Comments
 (0)