[openib-general] Re: does the mthca driver support RTS->SQD event request?

Dotan Barak dotanb at mellanox.co.il
Sat Feb 4 23:47:54 PST 2006


Thanks, this patch works for me too.

I have one comments:
in the IB spec it is written: "Enable or disable Send Queue Drained, Asynchronous Affiliated Event Notification. 	This modifier is only applicable when the next QP state chosen is SQD."

I think that the following transitions should support this event: SQD->RTS, SQD->SQD.

what do you think?

Dotan

> -----Original Message-----
> From: Roland Dreier [mailto:rdreier at cisco.com]
> Sent: Saturday, February 04, 2006 12:51 AM
> To: Dotan Barak
> Cc: openib-general at openib.org
> Subject: Re: [openib-general] Re: does the mthca driver 
> support RTS->SQD
> event request?
> 
> 
> I tested the previous patch, and I found that I forgot to add the
> chunk to allow the IB_QP_EN_SQD_ASYNC_NOTIFY attribute to the allowed
> mask for RTS->SQD transitions.
> 
> With the patch below (already committed, queued for 2.6.17) a simple
> test of the SQ drained event works for me.
> 
>  - R.
> 
> Index: infiniband/hw/mthca/mthca_cmd.c
> ===================================================================
> --- infiniband/hw/mthca/mthca_cmd.c	(revision 5292)
> +++ infiniband/hw/mthca/mthca_cmd.c	(working copy)
> @@ -1638,7 +1638,8 @@ int mthca_MODIFY_QP(struct mthca_dev *de
>  		}
>  
>  	} else
> -		err = mthca_cmd(dev, mailbox->dma, (!!is_ee << 
> 24) | num,
> +		err = mthca_cmd(dev, mailbox->dma,
> +				optmask | (!!is_ee << 24) | num,
>  				op_mod, op[trans], 
> CMD_TIME_CLASS_C, status);
>  
>  	if (my_mailbox)
> Index: infiniband/hw/mthca/mthca_qp.c
> ===================================================================
> --- infiniband/hw/mthca/mthca_qp.c	(revision 5292)
> +++ infiniband/hw/mthca/mthca_qp.c	(working copy)
> @@ -413,6 +413,12 @@ static const struct {
>  		},
>  		[IB_QPS_SQD]   = {
>  			.trans = MTHCA_TRANS_RTS2SQD,
> +			.opt_param = {
> +				[UD]  = IB_QP_EN_SQD_ASYNC_NOTIFY,
> +				[UC]  = IB_QP_EN_SQD_ASYNC_NOTIFY,
> +				[RC]  = IB_QP_EN_SQD_ASYNC_NOTIFY,
> +				[MLX] = IB_QP_EN_SQD_ASYNC_NOTIFY
> +			}
>  		},
>  	},
>  	[IB_QPS_SQD]   = {
> @@ -575,6 +581,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, 
>  	struct mthca_qp_param *qp_param;
>  	struct mthca_qp_context *qp_context;
>  	u32 req_param, opt_param;
> +	u32 sqd_event = 0;
>  	u8 status;
>  	int err;
>  
> @@ -839,8 +846,13 @@ int mthca_modify_qp(struct ib_qp *ibqp, 
>  		qp_context->srqn = cpu_to_be32(1 << 24 |
>  					       
> to_msrq(ibqp->srq)->srqn);
>  
> +	if (cur_state == IB_QPS_RTS && new_state == IB_QPS_SQD	&&
> +	    attr_mask & IB_QP_EN_SQD_ASYNC_NOTIFY		&&
> +	    attr->en_sqd_async_notify)
> +		sqd_event = 1 << 31;
> +
>  	err = mthca_MODIFY_QP(dev, 
> state_table[cur_state][new_state].trans,
> -			      qp->qpn, 0, mailbox, 0, &status);
> +			      qp->qpn, 0, mailbox, sqd_event, &status);
>  	if (status) {
>  		mthca_warn(dev, "modify QP %d returned status %02x.\n",
>  			   
> state_table[cur_state][new_state].trans, status);
> 



More information about the general mailing list