RE: [PATCH for-next v2] IB/cma: Introduce rdma_set_min_rnr_timer()

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

 




> From: Håkon Bugge <haakon.bugge@xxxxxxxxxx>
> Sent: Wednesday, March 31, 2021 9:40 PM
> 
> Introduce the ability for kernel ULPs to adjust the minimum RNR Retry timer.
> The INIT -> RTR transition executed by RDMA CM will be used for this
> adjustment. This avoids an additional ib_modify_qp() call.
> 
> rdma_set_min_rnr_timer() must be called before the call to
> rdma_connect() on the active side and before the call to rdma_accept() on
> the passive side.
> 
If you add a line or two to explain on when a specific value is set, how it improved the response time (or less retries), will be a good for future users.

> Signed-off-by: Håkon Bugge <haakon.bugge@xxxxxxxxxx>
> ---
>  drivers/infiniband/core/cma.c      | 23 +++++++++++++++++++++++
>  drivers/infiniband/core/cma_priv.h |  2 ++
>  include/rdma/rdma_cm.h             |  2 ++
>  3 files changed, 27 insertions(+)
> 
> diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
> index 9409651..f50dc30 100644
> --- a/drivers/infiniband/core/cma.c
> +++ b/drivers/infiniband/core/cma.c
> @@ -852,6 +852,7 @@ static void cma_id_put(struct rdma_id_private
> *id_priv)
>  	id_priv->id.qp_type = qp_type;
>  	id_priv->tos_set = false;
>  	id_priv->timeout_set = false;
> +	id_priv->min_rnr_timer_set = false;
>  	id_priv->gid_type = IB_GID_TYPE_IB;
>  	spin_lock_init(&id_priv->lock);
>  	mutex_init(&id_priv->qp_mutex);
> @@ -1141,6 +1142,9 @@ int rdma_init_qp_attr(struct rdma_cm_id *id,
> struct ib_qp_attr *qp_attr,
>  	if ((*qp_attr_mask & IB_QP_TIMEOUT) && id_priv->timeout_set)
>  		qp_attr->timeout = id_priv->timeout;
> 
> +	if ((*qp_attr_mask & IB_QP_MIN_RNR_TIMER) && id_priv-
> >min_rnr_timer_set)
> +		qp_attr->min_rnr_timer = id_priv->min_rnr_timer;
> +
>  	return ret;
>  }
>  EXPORT_SYMBOL(rdma_init_qp_attr);
> @@ -2615,6 +2619,25 @@ int rdma_set_ack_timeout(struct rdma_cm_id
> *id, u8 timeout)  }  EXPORT_SYMBOL(rdma_set_ack_timeout);

Please add the kdoc style comment for this new API. Refer to rdma_set_ack_timeout() as reference example.
Also mention that min_rnr_timer follows 5-bit value is encoded value of table 48 of IB spec in comment section for users.

> 
> +int rdma_set_min_rnr_timer(struct rdma_cm_id *id, u8 min_rnr_timer) {
> +	struct rdma_id_private *id_priv;
> +
> +	/* It is a five-bit value */
> +	if (min_rnr_timer & 0xe0)
> +		return -EINVAL;
> +
> +	if (id->qp_type != IB_QPT_RC && id->qp_type != IB_QPT_XRC_TGT)
> +		return -EINVAL;
> +
> +	id_priv = container_of(id, struct rdma_id_private, id);
> +	id_priv->min_rnr_timer = min_rnr_timer;
> +	id_priv->min_rnr_timer_set = true;
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(rdma_set_min_rnr_timer);




[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