|
@@ -2075,6 +2075,7 @@ void rvt_add_rnr_timer(struct rvt_qp *qp, u32 aeth)
|
|
lockdep_assert_held(&qp->s_lock);
|
|
lockdep_assert_held(&qp->s_lock);
|
|
qp->s_flags |= RVT_S_WAIT_RNR;
|
|
qp->s_flags |= RVT_S_WAIT_RNR;
|
|
to = rvt_aeth_to_usec(aeth);
|
|
to = rvt_aeth_to_usec(aeth);
|
|
|
|
+ trace_rvt_rnrnak_add(qp, to);
|
|
hrtimer_start(&qp->s_rnr_timer,
|
|
hrtimer_start(&qp->s_rnr_timer,
|
|
ns_to_ktime(1000 * to), HRTIMER_MODE_REL);
|
|
ns_to_ktime(1000 * to), HRTIMER_MODE_REL);
|
|
}
|
|
}
|
|
@@ -2104,15 +2105,14 @@ EXPORT_SYMBOL(rvt_stop_rc_timers);
|
|
* stop an rnr timer and return if the timer
|
|
* stop an rnr timer and return if the timer
|
|
* had been pending.
|
|
* had been pending.
|
|
*/
|
|
*/
|
|
-static int rvt_stop_rnr_timer(struct rvt_qp *qp)
|
|
|
|
|
|
+static void rvt_stop_rnr_timer(struct rvt_qp *qp)
|
|
{
|
|
{
|
|
- int rval = 0;
|
|
|
|
-
|
|
|
|
lockdep_assert_held(&qp->s_lock);
|
|
lockdep_assert_held(&qp->s_lock);
|
|
/* Remove QP from rnr timer */
|
|
/* Remove QP from rnr timer */
|
|
- if (qp->s_flags & RVT_S_WAIT_RNR)
|
|
|
|
|
|
+ if (qp->s_flags & RVT_S_WAIT_RNR) {
|
|
qp->s_flags &= ~RVT_S_WAIT_RNR;
|
|
qp->s_flags &= ~RVT_S_WAIT_RNR;
|
|
- return rval;
|
|
|
|
|
|
+ trace_rvt_rnrnak_stop(qp, 0);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -2165,6 +2165,7 @@ enum hrtimer_restart rvt_rc_rnr_retry(struct hrtimer *t)
|
|
|
|
|
|
spin_lock_irqsave(&qp->s_lock, flags);
|
|
spin_lock_irqsave(&qp->s_lock, flags);
|
|
rvt_stop_rnr_timer(qp);
|
|
rvt_stop_rnr_timer(qp);
|
|
|
|
+ trace_rvt_rnrnak_timeout(qp, 0);
|
|
rdi->driver_f.schedule_send(qp);
|
|
rdi->driver_f.schedule_send(qp);
|
|
spin_unlock_irqrestore(&qp->s_lock, flags);
|
|
spin_unlock_irqrestore(&qp->s_lock, flags);
|
|
return HRTIMER_NORESTART;
|
|
return HRTIMER_NORESTART;
|