aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@dev.mellanox.co.il>2007-05-27 11:06:42 -0400
committerRoland Dreier <rolandd@cisco.com>2007-05-29 19:07:09 -0400
commit8b7e15772a286d0ef8e4f8eca422ce5368b6fa97 (patch)
tree646d1d449b0f123d2567a16c5c2a341b17b67933 /drivers/infiniband
parent6e98ee75c3ab99db48ecc0615c2246dc193111a9 (diff)
IB/mthca: Fix handling of send CQE with error for QPs connected to SRQ
mthca_free_err_wqe() currently treats both send and receive CQEs identically if a QP is using an SRQ. But for Tavor hardware, send CQEs with error can be chained together even if the RQ is part of SRQ, so we may miss some CQEs. Fix by following the WQE chain for all send CQEs even for non-SRQ QPs. This fixes crashes in IPoIB CM: <https://bugs.openfabrics.org//show_bug.cgi?id=604> Signed-off-by: Michael S. Tsirkin <mst@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/mthca/mthca_qp.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index 027664979fe2..eef415b12b2e 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -2284,10 +2284,10 @@ void mthca_free_err_wqe(struct mthca_dev *dev, struct mthca_qp *qp, int is_send,
2284 struct mthca_next_seg *next; 2284 struct mthca_next_seg *next;
2285 2285
2286 /* 2286 /*
2287 * For SRQs, all WQEs generate a CQE, so we're always at the 2287 * For SRQs, all receive WQEs generate a CQE, so we're always
2288 * end of the doorbell chain. 2288 * at the end of the doorbell chain.
2289 */ 2289 */
2290 if (qp->ibqp.srq) { 2290 if (qp->ibqp.srq && !is_send) {
2291 *new_wqe = 0; 2291 *new_wqe = 0;
2292 return; 2292 return;
2293 } 2293 }