Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 357b552f authored by Bryan O'Sullivan's avatar Bryan O'Sullivan Committed by Linus Torvalds
Browse files

[PATCH] IB/ipath: ignore receive queue size if SRQ is specified



The receive work queue size should be ignored if the QP is created to use a
shared receive queue according to the IB spec.

Signed-off-by: default avatarRalph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: default avatarBryan O'Sullivan <bryan.osullivan@qlogic.com>
Cc: "Michael S. Tsirkin" <mst@mellanox.co.il>
Cc: Roland Dreier <rolandd@cisco.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3e0018bc
Loading
Loading
Loading
Loading
+16 −11
Original line number Diff line number Diff line
@@ -685,9 +685,14 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
			ret = ERR_PTR(-ENOMEM);
			goto bail;
		}
		if (init_attr->srq) {
			qp->r_rq.size = 0;
			qp->r_rq.max_sge = 0;
			qp->r_rq.wq = NULL;
		} else {
			qp->r_rq.size = init_attr->cap.max_recv_wr + 1;
		sz = sizeof(struct ipath_sge) *
			init_attr->cap.max_recv_sge +
			qp->r_rq.max_sge = init_attr->cap.max_recv_sge;
			sz = (sizeof(struct ipath_sge) * qp->r_rq.max_sge) +
				sizeof(struct ipath_rwqe);
			qp->r_rq.wq = vmalloc(qp->r_rq.size * sz);
			if (!qp->r_rq.wq) {
@@ -696,6 +701,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
				ret = ERR_PTR(-ENOMEM);
				goto bail;
			}
		}

		/*
		 * ib_create_qp() will initialize qp->ibqp
@@ -713,7 +719,6 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
		qp->s_wq = swq;
		qp->s_size = init_attr->cap.max_send_wr + 1;
		qp->s_max_sge = init_attr->cap.max_send_sge;
		qp->r_rq.max_sge = init_attr->cap.max_recv_sge;
		qp->s_flags = init_attr->sq_sig_type == IB_SIGNAL_REQ_WR ?
			1 << IPATH_S_SIGNAL_REQ_WR : 0;
		dev = to_idev(ibpd->device);