IB/rxe: Avoid accessing timers for non RC QPs
authorParav Pandit <parav@mellanox.com>
Sun, 19 Mar 2017 09:20:56 +0000 (11:20 +0200)
committerDoug Ledford <dledford@redhat.com>
Fri, 21 Apr 2017 14:43:28 +0000 (10:43 -0400)
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>
Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/sw/rxe/rxe_qp.c

index f98a19e61a3db5215f706077f4eff7b91f114400..3ad9b48212deb6e27ab9465da9005bf684edbe65 100644 (file)
@@ -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);