diff options
author | Ralph Campbell <ralph.campbell@qlogic.com> | 2008-05-13 14:40:25 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-05-13 14:40:25 -0400 |
commit | 53dc1ca194c062aa9771e194047f27ec1ca592df (patch) | |
tree | 4cf0fe73ea76f02f871d5e6def040a869b224f00 /drivers/infiniband/hw/ipath/ipath_verbs.c | |
parent | dd37818dbdf8e51d0288c0197c351c005ffcdbdb (diff) |
IB/ipath: Fix RC and UC error handling
When errors are detected in RC, the QP should transition to the
IB_QPS_ERR state, not the IB_QPS_SQE state. Also, when the error is on
the responder side, the receive work completion error was incorrect
(remote vs. local).
Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ipath/ipath_verbs.c')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index 5015cd2e57bd..22bb42dc8f73 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c | |||
@@ -744,12 +744,10 @@ static void ipath_ib_timer(struct ipath_ibdev *dev) | |||
744 | 744 | ||
745 | /* XXX What if timer fires again while this is running? */ | 745 | /* XXX What if timer fires again while this is running? */ |
746 | for (qp = resend; qp != NULL; qp = qp->timer_next) { | 746 | for (qp = resend; qp != NULL; qp = qp->timer_next) { |
747 | struct ib_wc wc; | ||
748 | |||
749 | spin_lock_irqsave(&qp->s_lock, flags); | 747 | spin_lock_irqsave(&qp->s_lock, flags); |
750 | if (qp->s_last != qp->s_tail && qp->state == IB_QPS_RTS) { | 748 | if (qp->s_last != qp->s_tail && qp->state == IB_QPS_RTS) { |
751 | dev->n_timeouts++; | 749 | dev->n_timeouts++; |
752 | ipath_restart_rc(qp, qp->s_last_psn + 1, &wc); | 750 | ipath_restart_rc(qp, qp->s_last_psn + 1); |
753 | } | 751 | } |
754 | spin_unlock_irqrestore(&qp->s_lock, flags); | 752 | spin_unlock_irqrestore(&qp->s_lock, flags); |
755 | 753 | ||