aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorMike Marciniszyn <mike.marciniszyn@qlogic.com>2011-01-10 20:42:20 -0500
committerRoland Dreier <rolandd@cisco.com>2011-01-10 20:42:20 -0500
commit16028f27778cb6439516c36c0a72446d29805691 (patch)
tree1e291c492bb5f3009f770fff116d47c9ca4f4c2a /drivers/infiniband
parent6676b3f746ff164a4a367c9aa5ae4b5b1145083c (diff)
IB/qib: Clear WAIT_SEND flags when setting QP to error state
If these flags are set when the QP is transitioned to the error state, it will wait until the flags are cleared, which may never happen if the error transition is due to a link going down. Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/qib/qib_qp.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/qib/qib_qp.c b/drivers/infiniband/hw/qib/qib_qp.c
index 6c39851d2ded..32dacd444158 100644
--- a/drivers/infiniband/hw/qib/qib_qp.c
+++ b/drivers/infiniband/hw/qib/qib_qp.c
@@ -468,6 +468,10 @@ int qib_error_qp(struct qib_qp *qp, enum ib_wc_status err)
468 qp->s_flags &= ~(QIB_S_TIMER | QIB_S_WAIT_RNR); 468 qp->s_flags &= ~(QIB_S_TIMER | QIB_S_WAIT_RNR);
469 del_timer(&qp->s_timer); 469 del_timer(&qp->s_timer);
470 } 470 }
471
472 if (qp->s_flags & QIB_S_ANY_WAIT_SEND)
473 qp->s_flags &= ~QIB_S_ANY_WAIT_SEND;
474
471 spin_lock(&dev->pending_lock); 475 spin_lock(&dev->pending_lock);
472 if (!list_empty(&qp->iowait) && !(qp->s_flags & QIB_S_BUSY)) { 476 if (!list_empty(&qp->iowait) && !(qp->s_flags & QIB_S_BUSY)) {
473 qp->s_flags &= ~QIB_S_ANY_WAIT_IO; 477 qp->s_flags &= ~QIB_S_ANY_WAIT_IO;