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]

 




> -----Original Message-----
> From: Guoqing Jiang <guoqing.jiang@xxxxxxxxx>
> Sent: Thursday, October 26, 2023 8:55 AM
> To: Bernard Metzler <BMT@xxxxxxxxxxxxxx>; jgg@xxxxxxxx; leon@xxxxxxxxxx
> Cc: linux-rdma@xxxxxxxxxxxxxxx
> Subject: [EXTERNAL] Re: [PATCH V2 18/20] RDMA/siw: Only check attrs-
> >cap.max_send_wr in siw_create_qp
> 
> 
> 
> 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.
> 

You are right. The RQ can be zero especially if a shared receive queue
is provided. So your patch looks good.


> 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