All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI
@ 2020-12-16  7:17 Xiao Yang
  2020-12-16  7:17 ` [PATCH 2/2] RDMA/rxe: Add check for supported QP types Xiao Yang
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Xiao Yang @ 2020-12-16  7:17 UTC (permalink / raw)
  To: linux-rdma; +Cc: leon, Xiao Yang

INI QP doesn't require receive CQ.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 drivers/infiniband/core/uverbs_cmd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 418d133a8fb0..d8bc8ea3ad1e 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -1345,7 +1345,7 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
 		if (has_sq)
 			scq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ,
 						cmd->send_cq_handle, attrs);
-		if (!ind_tbl)
+		if (!ind_tbl && cmd->qp_type != IB_QPT_XRC_INI)
 			rcq = rcq ?: scq;
 		pd = uobj_get_obj_read(pd, UVERBS_OBJECT_PD, cmd->pd_handle,
 				       attrs);
-- 
2.25.1




^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] RDMA/rxe: Add check for supported QP types
  2020-12-16  7:17 [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Xiao Yang
@ 2020-12-16  7:17 ` Xiao Yang
  2021-01-12 20:15   ` Jason Gunthorpe
  2021-01-12 20:09 ` [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Jason Gunthorpe
  2021-01-21 17:05 ` Jason Gunthorpe
  2 siblings, 1 reply; 8+ messages in thread
From: Xiao Yang @ 2020-12-16  7:17 UTC (permalink / raw)
  To: linux-rdma; +Cc: leon, Xiao Yang

1) Current rdma_rxe only supports five QP types which always sets recv_cq.
2) INI QP doesn't set recv_cq(NULL) so creating INI QP over softroce
   triggers 'missing cq' warning.

Avoid the warning by checking supported QP type.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 drivers/infiniband/sw/rxe/rxe_qp.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index 656a5b4be847..65c8df812aeb 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -62,6 +62,17 @@ int rxe_qp_chk_init(struct rxe_dev *rxe, struct ib_qp_init_attr *init)
 	struct rxe_port *port;
 	int port_num = init->port_num;
 
+	switch(init->qp_type) {
+	case IB_QPT_SMI:
+	case IB_QPT_GSI:
+	case IB_QPT_RC:
+	case IB_QPT_UC:
+	case IB_QPT_UD:
+		break;
+	default:
+		return -EOPNOTSUPP;
+	}
+
 	if (!init->recv_cq || !init->send_cq) {
 		pr_warn("missing cq\n");
 		goto err1;
-- 
2.25.1




^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI
  2020-12-16  7:17 [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Xiao Yang
  2020-12-16  7:17 ` [PATCH 2/2] RDMA/rxe: Add check for supported QP types Xiao Yang
@ 2021-01-12 20:09 ` Jason Gunthorpe
  2021-01-14  8:58   ` Xiao Yang
  2021-01-21 17:05 ` Jason Gunthorpe
  2 siblings, 1 reply; 8+ messages in thread
From: Jason Gunthorpe @ 2021-01-12 20:09 UTC (permalink / raw)
  To: Xiao Yang, Yishai Hadas; +Cc: linux-rdma, leon

On Wed, Dec 16, 2020 at 03:17:54PM +0800, Xiao Yang wrote:
> INI QP doesn't require receive CQ.
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
>  drivers/infiniband/core/uverbs_cmd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
> index 418d133a8fb0..d8bc8ea3ad1e 100644
> +++ b/drivers/infiniband/core/uverbs_cmd.c
> @@ -1345,7 +1345,7 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
>  		if (has_sq)
>  			scq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ,
>  						cmd->send_cq_handle, attrs);
> -		if (!ind_tbl)
> +		if (!ind_tbl && cmd->qp_type != IB_QPT_XRC_INI)
>  			rcq = rcq ?: scq;

Hmm, this does make it consistent with the UVERBS_METHOD_QP_CREATE
flow which does set attr.recv_cq to NULL if the user didn't specify one.

However this has been like this since the beginning - what are you
doing that this detail matters?

Jason

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] RDMA/rxe: Add check for supported QP types
  2020-12-16  7:17 ` [PATCH 2/2] RDMA/rxe: Add check for supported QP types Xiao Yang
@ 2021-01-12 20:15   ` Jason Gunthorpe
  0 siblings, 0 replies; 8+ messages in thread
From: Jason Gunthorpe @ 2021-01-12 20:15 UTC (permalink / raw)
  To: Xiao Yang; +Cc: linux-rdma, leon

On Wed, Dec 16, 2020 at 03:17:55PM +0800, Xiao Yang wrote:
> 1) Current rdma_rxe only supports five QP types which always sets recv_cq.
> 2) INI QP doesn't set recv_cq(NULL) so creating INI QP over softroce
>    triggers 'missing cq' warning.
> 
> Avoid the warning by checking supported QP type.
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
>  drivers/infiniband/sw/rxe/rxe_qp.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
> index 656a5b4be847..65c8df812aeb 100644
> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
> @@ -62,6 +62,17 @@ int rxe_qp_chk_init(struct rxe_dev *rxe, struct ib_qp_init_attr *init)
>  	struct rxe_port *port;
>  	int port_num = init->port_num;
>  
> +	switch(init->qp_type) {
> +	case IB_QPT_SMI:
> +	case IB_QPT_GSI:
> +	case IB_QPT_RC:
> +	case IB_QPT_UC:
> +	case IB_QPT_UD:
> +		break;
> +	default:
> +		return -EOPNOTSUPP;
> +	}

This does make sense, but not really because of recv_cq - rxe doesn't
support other QP types at all and should return an error when making
an XRC anything

So applied to for-next

Thanks,
Jason

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI
  2021-01-12 20:09 ` [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Jason Gunthorpe
@ 2021-01-14  8:58   ` Xiao Yang
  2021-01-15 19:23     ` Jason Gunthorpe
  0 siblings, 1 reply; 8+ messages in thread
From: Xiao Yang @ 2021-01-14  8:58 UTC (permalink / raw)
  To: Jason Gunthorpe; +Cc: Yishai Hadas, linux-rdma, leon

On 2021/1/13 4:09, Jason Gunthorpe wrote:
> On Wed, Dec 16, 2020 at 03:17:54PM +0800, Xiao Yang wrote:
>> INI QP doesn't require receive CQ.
>>
>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
>>   drivers/infiniband/core/uverbs_cmd.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
>> index 418d133a8fb0..d8bc8ea3ad1e 100644
>> +++ b/drivers/infiniband/core/uverbs_cmd.c
>> @@ -1345,7 +1345,7 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
>>   		if (has_sq)
>>   			scq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ,
>>   						cmd->send_cq_handle, attrs);
>> -		if (!ind_tbl)
>> +		if (!ind_tbl&&  cmd->qp_type != IB_QPT_XRC_INI)
>>   			rcq = rcq ?: scq;
> Hmm, this does make it consistent with the UVERBS_METHOD_QP_CREATE
> flow which does set attr.recv_cq to NULL if the user didn't specify one.
>
> However this has been like this since the beginning - what are you
> doing that this detail matters?
Hi Jason,

Thanks for your comment.
1) I didn't get any issue for now.
2) I think it is not meaningful to set rcq for XRC INITIATOR QP, current 
code has ignores rcq as below:
-------------------------------------------------
static int create_qp(struct uverbs_attr_bundle *attrs,
                     struct ib_uverbs_ex_create_qp *cmd)
...
                 if (cmd->qp_type == IB_QPT_XRC_INI) {
                         cmd->max_recv_wr = 0;
                         cmd->max_recv_sge = 0;
...
-------------------------------------------------

By the way, I have a question:
Why do we need two kinds of uverbs API?(a: read & write, b: ioctl)

Best Regards,
Xiao Yang
> Jason
>
>
> .
>




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI
  2021-01-14  8:58   ` Xiao Yang
@ 2021-01-15 19:23     ` Jason Gunthorpe
  2021-01-18  7:58       ` Xiao Yang
  0 siblings, 1 reply; 8+ messages in thread
From: Jason Gunthorpe @ 2021-01-15 19:23 UTC (permalink / raw)
  To: Xiao Yang; +Cc: Yishai Hadas, linux-rdma, leon

On Thu, Jan 14, 2021 at 04:58:30PM +0800, Xiao Yang wrote:
> On 2021/1/13 4:09, Jason Gunthorpe wrote:
> > On Wed, Dec 16, 2020 at 03:17:54PM +0800, Xiao Yang wrote:
> > > INI QP doesn't require receive CQ.
> > > 
> > > Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
> > >   drivers/infiniband/core/uverbs_cmd.c | 2 +-
> > >   1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
> > > index 418d133a8fb0..d8bc8ea3ad1e 100644
> > > +++ b/drivers/infiniband/core/uverbs_cmd.c
> > > @@ -1345,7 +1345,7 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
> > >   		if (has_sq)
> > >   			scq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ,
> > >   						cmd->send_cq_handle, attrs);
> > > -		if (!ind_tbl)
> > > +		if (!ind_tbl&&  cmd->qp_type != IB_QPT_XRC_INI)
> > >   			rcq = rcq ?: scq;
> > Hmm, this does make it consistent with the UVERBS_METHOD_QP_CREATE
> > flow which does set attr.recv_cq to NULL if the user didn't specify one.
> > 
> > However this has been like this since the beginning - what are you
> > doing that this detail matters?
> Hi Jason,
> 
> Thanks for your comment.
> 1) I didn't get any issue for now.
> 2) I think it is not meaningful to set rcq for XRC INITIATOR QP, current
> code has ignores rcq as below:
> static int create_qp(struct uverbs_attr_bundle *attrs,
>                     struct ib_uverbs_ex_create_qp *cmd)
> ...
>                 if (cmd->qp_type == IB_QPT_XRC_INI) {
>                         cmd->max_recv_wr = 0;
>                         cmd->max_recv_sge = 0;
> ...
> 
> By the way, I have a question:
> Why do we need two kinds of uverbs API?(a: read & write, b: ioctl)

The write APIs can't be modified due to how they were
designed. Whenever someone needs to change something they have to move
things to ioctl

Jason

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI
  2021-01-15 19:23     ` Jason Gunthorpe
@ 2021-01-18  7:58       ` Xiao Yang
  0 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2021-01-18  7:58 UTC (permalink / raw)
  To: Jason Gunthorpe; +Cc: Yishai Hadas, linux-rdma, leon

On 2021/1/16 3:23, Jason Gunthorpe wrote:
> On Thu, Jan 14, 2021 at 04:58:30PM +0800, Xiao Yang wrote:
>> On 2021/1/13 4:09, Jason Gunthorpe wrote:
>>> On Wed, Dec 16, 2020 at 03:17:54PM +0800, Xiao Yang wrote:
>>>> INI QP doesn't require receive CQ.
>>>>
>>>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
>>>>    drivers/infiniband/core/uverbs_cmd.c | 2 +-
>>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
>>>> index 418d133a8fb0..d8bc8ea3ad1e 100644
>>>> +++ b/drivers/infiniband/core/uverbs_cmd.c
>>>> @@ -1345,7 +1345,7 @@ static int create_qp(struct uverbs_attr_bundle *attrs,
>>>>    		if (has_sq)
>>>>    			scq = uobj_get_obj_read(cq, UVERBS_OBJECT_CQ,
>>>>    						cmd->send_cq_handle, attrs);
>>>> -		if (!ind_tbl)
>>>> +		if (!ind_tbl&&   cmd->qp_type != IB_QPT_XRC_INI)
>>>>    			rcq = rcq ?: scq;
>>> Hmm, this does make it consistent with the UVERBS_METHOD_QP_CREATE
>>> flow which does set attr.recv_cq to NULL if the user didn't specify one.
>>>
>>> However this has been like this since the beginning - what are you
>>> doing that this detail matters?
>> Hi Jason,
>>
>> Thanks for your comment.
>> 1) I didn't get any issue for now.
>> 2) I think it is not meaningful to set rcq for XRC INITIATOR QP, current
>> code has ignores rcq as below:
>> static int create_qp(struct uverbs_attr_bundle *attrs,
>>                      struct ib_uverbs_ex_create_qp *cmd)
>> ...
>>                  if (cmd->qp_type == IB_QPT_XRC_INI) {
>>                          cmd->max_recv_wr = 0;
>>                          cmd->max_recv_sge = 0;
>> ...
>>
>> By the way, I have a question:
>> Why do we need two kinds of uverbs API?(a: read&  write, b: ioctl)
> The write APIs can't be modified due to how they were
> designed. Whenever someone needs to change something they have to move
> things to ioctl
Hi Jason,

Could you explain that the write APIs can't be modified? :-)

Best Regards,
Xiao Yang
> Jason
>
>
> .
>




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI
  2020-12-16  7:17 [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Xiao Yang
  2020-12-16  7:17 ` [PATCH 2/2] RDMA/rxe: Add check for supported QP types Xiao Yang
  2021-01-12 20:09 ` [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Jason Gunthorpe
@ 2021-01-21 17:05 ` Jason Gunthorpe
  2 siblings, 0 replies; 8+ messages in thread
From: Jason Gunthorpe @ 2021-01-21 17:05 UTC (permalink / raw)
  To: Xiao Yang; +Cc: linux-rdma, leon

On Wed, Dec 16, 2020 at 03:17:54PM +0800, Xiao Yang wrote:
> INI QP doesn't require receive CQ.
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
>  drivers/infiniband/core/uverbs_cmd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Applied to for-next, thanks

Jason

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-01-21 17:11 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-16  7:17 [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Xiao Yang
2020-12-16  7:17 ` [PATCH 2/2] RDMA/rxe: Add check for supported QP types Xiao Yang
2021-01-12 20:15   ` Jason Gunthorpe
2021-01-12 20:09 ` [PATCH 1/2] RDMA/uverbs: Don't set rcq if qp_type is IB_QPT_XRC_INI Jason Gunthorpe
2021-01-14  8:58   ` Xiao Yang
2021-01-15 19:23     ` Jason Gunthorpe
2021-01-18  7:58       ` Xiao Yang
2021-01-21 17:05 ` Jason Gunthorpe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.