staging/rdma/hfi1: actually use new RNR timer API in loopback path
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Tue, 9 Feb 2016 22:29:31 +0000 (14:29 -0800)
committerDoug Ledford <dledford@redhat.com>
Fri, 11 Mar 2016 01:38:06 +0000 (20:38 -0500)
The patch series which added a new API for the RNR timer did not include an
updated call in the loopback path. RC/UC RNR loopback would be broken
without this.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/staging/rdma/hfi1/rc.c
drivers/staging/rdma/hfi1/ruc.c
drivers/staging/rdma/hfi1/verbs.h

index e54e0b4bb5e5fe04e299afad7f9cfe00a1213553..ba2a2ccac6f236436bd38a7dd7eb03051d7e52d6 100644 (file)
@@ -81,7 +81,7 @@ static inline void hfi1_add_retry_timer(struct rvt_qp *qp)
  *
  * add an rnr timer on the QP
  */
-static inline void hfi1_add_rnr_timer(struct rvt_qp *qp, u32 to)
+void hfi1_add_rnr_timer(struct rvt_qp *qp, u32 to)
 {
        struct hfi1_qp_priv *priv = qp->priv;
 
index 66449acac76d4931bfa20b8e44397ad7b4d150c7..a7add3c5d0f2b0a1ccb9b09f460b5d61582459b5 100644 (file)
@@ -371,6 +371,7 @@ static void ruc_loopback(struct rvt_qp *sqp)
        int release;
        int ret;
        int copy_last = 0;
+       u32 to;
 
        rcu_read_lock();
 
@@ -600,11 +601,8 @@ rnr_nak:
        spin_lock_irqsave(&sqp->s_lock, flags);
        if (!(ib_rvt_state_ops[sqp->state] & RVT_PROCESS_RECV_OK))
                goto clr_busy;
-       sqp->s_flags |= RVT_S_WAIT_RNR;
-       sqp->s_timer.function = hfi1_rc_rnr_retry;
-       sqp->s_timer.expires = jiffies +
-               usecs_to_jiffies(ib_hfi1_rnr_table[qp->r_min_rnr_timer]);
-       add_timer(&sqp->s_timer);
+       to = ib_hfi1_rnr_table[qp->r_min_rnr_timer];
+       hfi1_add_rnr_timer(sqp, to);
        goto clr_busy;
 
 op_err:
index 26eda8a3e55eb7dd0f475a8a0f9f3c9586ce1788..adb63bb6fae2aa4b9b4ef7abea4916482cbc0fa6 100644 (file)
@@ -404,6 +404,7 @@ u8 ah_to_sc(struct ib_device *ibdev, struct ib_ah_attr *ah_attr);
 struct ib_ah *hfi1_create_qp0_ah(struct hfi1_ibport *ibp, u16 dlid);
 
 void hfi1_rc_rnr_retry(unsigned long arg);
+void hfi1_add_rnr_timer(struct rvt_qp *qp, u32 to);
 void hfi1_rc_timeout(unsigned long arg);
 void hfi1_del_timers_sync(struct rvt_qp *qp);
 void hfi1_stop_rc_timers(struct rvt_qp *qp);