diff options
author | Mike Marciniszyn <mike.marciniszyn@qlogic.com> | 2011-01-11 04:42:20 +0300 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2011-01-11 04:42:20 +0300 |
commit | 16028f27778cb6439516c36c0a72446d29805691 (patch) | |
tree | 1e291c492bb5f3009f770fff116d47c9ca4f4c2a /drivers/infiniband | |
parent | 6676b3f746ff164a4a367c9aa5ae4b5b1145083c (diff) | |
download | linux-16028f27778cb6439516c36c0a72446d29805691.tar.xz |
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.c | 4 |
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) qp->s_flags &= ~(QIB_S_TIMER | QIB_S_WAIT_RNR); del_timer(&qp->s_timer); } + + if (qp->s_flags & QIB_S_ANY_WAIT_SEND) + qp->s_flags &= ~QIB_S_ANY_WAIT_SEND; + spin_lock(&dev->pending_lock); if (!list_empty(&qp->iowait) && !(qp->s_flags & QIB_S_BUSY)) { qp->s_flags &= ~QIB_S_ANY_WAIT_IO; |