Re: [PATCH V2 18/20] RDMA/siw: Only check attrs->cap.max_send_wr in siw_create_qp

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 10/25/23 21:27, Bernard Metzler wrote:
-----Original Message-----
From: Guoqing Jiang<guoqing.jiang@xxxxxxxxx>
Sent: Friday, October 13, 2023 4:01 AM
To: Bernard Metzler<BMT@xxxxxxxxxxxxxx>;jgg@xxxxxxxx;leon@xxxxxxxxxx
Cc:linux-rdma@xxxxxxxxxxxxxxx
Subject: [EXTERNAL] [PATCH V2 18/20] RDMA/siw: Only check attrs-
cap.max_send_wr in siw_create_qp
We can just check max_send_wr here given both max_send_wr and
max_recv_wr are defined as u32 type, and we also need to ensure
num_sqe (derived from max_send_wr) shouldn't be zero.

Signed-off-by: Guoqing Jiang<guoqing.jiang@xxxxxxxxx>
---
  drivers/infiniband/sw/siw/siw_verbs.c | 18 +++++-------------
  1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/drivers/infiniband/sw/siw/siw_verbs.c
b/drivers/infiniband/sw/siw/siw_verbs.c
index dcd69fc01176..ef149ed98946 100644
--- a/drivers/infiniband/sw/siw/siw_verbs.c
+++ b/drivers/infiniband/sw/siw/siw_verbs.c
@@ -333,11 +333,10 @@ int siw_create_qp(struct ib_qp *ibqp, struct
ib_qp_init_attr *attrs,
  		goto err_atomic;
  	}
  	/*
-	 * NOTE: we allow for zero element SQ and RQ WQE's SGL's
-	 * but not for a QP unable to hold any WQE (SQ + RQ)
+	 * NOTE: we don't allow for a QP unable to hold any SQ WQE
  	 */
-	if (attrs->cap.max_send_wr + attrs->cap.max_recv_wr == 0) {
-		siw_dbg(base_dev, "QP must have send or receive queue\n");
+	if (attrs->cap.max_send_wr == 0) {
+		siw_dbg(base_dev, "QP must have send queue\n");
  		rv = -EINVAL;
  		goto err_atomic;
  	}
@@ -357,21 +356,14 @@ int siw_create_qp(struct ib_qp *ibqp, struct
ib_qp_init_attr *attrs,
  	if (rv)
  		goto err_atomic;

-	num_sqe = attrs->cap.max_send_wr;
-	num_rqe = attrs->cap.max_recv_wr;

  	/* All queue indices are derived from modulo operations
  	 * on a free running 'get' (consumer) and 'put' (producer)
  	 * unsigned counter. Having queue sizes at power of two
  	 * avoids handling counter wrap around.
  	 */
-	if (num_sqe)
-		num_sqe = roundup_pow_of_two(num_sqe);
-	else {
-		/* Zero sized SQ is not supported */
-		rv = -EINVAL;
-		goto err_out_xa;
-	}
+	num_sqe = roundup_pow_of_two(attrs->cap.max_send_wr);
+	num_rqe = attrs->cap.max_recv_wr;
  	if (num_rqe)
  		num_rqe = roundup_pow_of_two(num_rqe);

--
2.35.3
No the original code allows for a QP which cannot send but
just receive or vice versa. A QP which cannot send should be allowed.
Only a QP which cannot do anything should be refused to be created.
Keep it as is.

Seems it is not consistent with the original code, because Zero sized SQ
(num_seq = 0) is not supported, also num_seq is got from max_send_wr,
which means a QP without sq is not permitted here.

But I probably misunderstood something.

Thanks,
Guoqing




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux