]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iw_cxgb4: Only validate the MSN for successful completions
authorSteve Wise <swise@opengridcomputing.com>
Mon, 18 Dec 2017 21:10:00 +0000 (13:10 -0800)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 3 Mar 2018 15:50:51 +0000 (15:50 +0000)
commit f55688c45442bc863f40ad678c638785b26cdce6 upstream.

If the RECV CQE is in error, ignore the MSN check.  This was causing
recvs that were flushed into the sw cq to be completed with the wrong
status (BAD_MSN instead of FLUSHED).

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/infiniband/hw/cxgb4/cq.c

index 3e5f5763c666ce3dc31a1ece79d24a2aae5d04e9..29527f606b86c22eaa58dd8ba13e972cb7d5c2c3 100644 (file)
@@ -484,10 +484,10 @@ static int poll_cq(struct t4_wq *wq, struct t4_cq *cq, struct t4_cqe *cqe,
                        ret = -EAGAIN;
                        goto skip_cqe;
                }
-               if (unlikely((CQE_WRID_MSN(hw_cqe) != (wq->rq.msn)))) {
+               if (unlikely(!CQE_STATUS(hw_cqe) &&
+                            CQE_WRID_MSN(hw_cqe) != wq->rq.msn)) {
                        t4_set_wq_in_error(wq);
-                       hw_cqe->header |= htonl(V_CQE_STATUS(T4_ERR_MSN));
-                       goto proc_cqe;
+                       hw_cqe->header |= cpu_to_be32(V_CQE_STATUS(T4_ERR_MSN));
                }
                goto proc_cqe;
        }