RDMA/cxgb4: Ignore read reponse type 1 CQEs
authorSteve Wise <swise@opengridcomputing.com>
Fri, 21 Mar 2014 15:10:32 +0000 (20:40 +0530)
committerRoland Dreier <roland@purestorage.com>
Mon, 24 Mar 2014 17:07:35 +0000 (10:07 -0700)
These are generated by HW in some error cases and need to be
silently discarded.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/cxgb4/cq.c

index d6a7db2..ce468e5 100644 (file)
@@ -365,8 +365,14 @@ void c4iw_flush_hw_cq(struct c4iw_cq *chp)
 
                if (CQE_OPCODE(hw_cqe) == FW_RI_READ_RESP) {
 
-                       /*
-                        * drop peer2peer RTR reads.
+                       /* If we have reached here because of async
+                        * event or other error, and have egress error
+                        * then drop
+                        */
+                       if (CQE_TYPE(hw_cqe) == 1)
+                               goto next_cqe;
+
+                       /* drop peer2peer RTR reads.
                         */
                        if (CQE_WRID_STAG(hw_cqe) == 1)
                                goto next_cqe;
@@ -511,8 +517,18 @@ static int poll_cq(struct t4_wq *wq, struct t4_cq *cq, struct t4_cqe *cqe,
         */
        if (RQ_TYPE(hw_cqe) && (CQE_OPCODE(hw_cqe) == FW_RI_READ_RESP)) {
 
-               /*
-                * If this is an unsolicited read response, then the read
+               /* If we have reached here because of async
+                * event or other error, and have egress error
+                * then drop
+                */
+               if (CQE_TYPE(hw_cqe) == 1) {
+                       if (CQE_STATUS(hw_cqe))
+                               t4_set_wq_in_error(wq);
+                       ret = -EAGAIN;
+                       goto skip_cqe;
+               }
+
+               /* If this is an unsolicited read response, then the read
                 * was generated by the kernel driver as part of peer-2-peer
                 * connection setup.  So ignore the completion.
                 */