diff mbox

[rdma-next,1/2] IB/rxe: Avoid accessing timers for non RC QPs

Message ID 20170319092057.9103-1-leon@kernel.org (mailing list archive)
State Accepted
Headers show

Commit Message

Leon Romanovsky March 19, 2017, 9:20 a.m. UTC
From: Parav Pandit <parav@mellanox.com>

This patch avoids RNR NAK timer and retransmit timer initialization and
cleanup for non RC QPs (such as UD QP, GSI QP).

Reviewed-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
---
 drivers/infiniband/sw/rxe/rxe_qp.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

Comments

Yuval Shaia March 21, 2017, 8:31 a.m. UTC | #1
On Sun, Mar 19, 2017 at 11:20:56AM +0200, Leon Romanovsky wrote:
> From: Parav Pandit <parav@mellanox.com>
> 
> This patch avoids RNR NAK timer and retransmit timer initialization and
> cleanup for non RC QPs (such as UD QP, GSI QP).
> 
> Reviewed-by: Moni Shoua <monis@mellanox.com>
> Signed-off-by: Parav Pandit <parav@mellanox.com>
> Signed-off-by: Leon Romanovsky <leon@kernel.org>
> ---
>  drivers/infiniband/sw/rxe/rxe_qp.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
> index f98a19e61a3d..3ad9b48212de 100644
> --- a/drivers/infiniband/sw/rxe/rxe_qp.c
> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
> @@ -273,10 +273,11 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
>  	rxe_init_task(rxe, &qp->comp.task, qp,
>  		      rxe_completer, "comp");
>  
> -	setup_timer(&qp->rnr_nak_timer, rnr_nak_timer, (unsigned long)qp);
> -	setup_timer(&qp->retrans_timer, retransmit_timer, (unsigned long)qp);
>  	qp->qp_timeout_jiffies = 0; /* Can't be set for UD/UC in modify_qp */
> -
> +	if (init->qp_type == IB_QPT_RC) {
> +		setup_timer(&qp->rnr_nak_timer, rnr_nak_timer, (unsigned long)qp);
> +		setup_timer(&qp->retrans_timer, retransmit_timer, (unsigned long)qp);
> +	}
>  	return 0;
>  }
>  
> @@ -804,8 +805,10 @@ void rxe_qp_destroy(struct rxe_qp *qp)
>  	qp->qp_timeout_jiffies = 0;
>  	rxe_cleanup_task(&qp->resp.task);
>  
> -	del_timer_sync(&qp->retrans_timer);
> -	del_timer_sync(&qp->rnr_nak_timer);
> +	if (qp_type(qp) == IB_QPT_RC) {
> +		del_timer_sync(&qp->retrans_timer);
> +		del_timer_sync(&qp->rnr_nak_timer);
> +	}

Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com>

>  
>  	rxe_cleanup_task(&qp->req.task);
>  	rxe_cleanup_task(&qp->comp.task);
> -- 
> 2.12.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Doug Ledford April 24, 2017, 4:05 p.m. UTC | #2
On Sun, 2017-03-19 at 11:20 +0200, Leon Romanovsky wrote:
> From: Parav Pandit <parav@mellanox.com>
> 
> This patch avoids RNR NAK timer and retransmit timer initialization
> and
> cleanup for non RC QPs (such as UD QP, GSI QP).
> 
> Reviewed-by: Moni Shoua <monis@mellanox.com>
> Signed-off-by: Parav Pandit <parav@mellanox.com>
> Signed-off-by: Leon Romanovsky <leon@kernel.org>

Thanks, applied.
diff mbox

Patch

diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index f98a19e61a3d..3ad9b48212de 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -273,10 +273,11 @@  static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
 	rxe_init_task(rxe, &qp->comp.task, qp,
 		      rxe_completer, "comp");
 
-	setup_timer(&qp->rnr_nak_timer, rnr_nak_timer, (unsigned long)qp);
-	setup_timer(&qp->retrans_timer, retransmit_timer, (unsigned long)qp);
 	qp->qp_timeout_jiffies = 0; /* Can't be set for UD/UC in modify_qp */
-
+	if (init->qp_type == IB_QPT_RC) {
+		setup_timer(&qp->rnr_nak_timer, rnr_nak_timer, (unsigned long)qp);
+		setup_timer(&qp->retrans_timer, retransmit_timer, (unsigned long)qp);
+	}
 	return 0;
 }
 
@@ -804,8 +805,10 @@  void rxe_qp_destroy(struct rxe_qp *qp)
 	qp->qp_timeout_jiffies = 0;
 	rxe_cleanup_task(&qp->resp.task);
 
-	del_timer_sync(&qp->retrans_timer);
-	del_timer_sync(&qp->rnr_nak_timer);
+	if (qp_type(qp) == IB_QPT_RC) {
+		del_timer_sync(&qp->retrans_timer);
+		del_timer_sync(&qp->rnr_nak_timer);
+	}
 
 	rxe_cleanup_task(&qp->req.task);
 	rxe_cleanup_task(&qp->comp.task);