[ofa-general] [GIT PULL ofed_1_2] iw_cxgb3 fixes for bugs 663/664

Steve Wise swise at opengridcomputing.com
Sun Jun 17 08:58:53 PDT 2007


Vlad,

Please pull in these fixes for bugs 663/664 from

git://git.openfabrics.org/~swise/ofed_1_2 ofed_1_2

Thanks,

Steve.

git-log

commit bd3a007a1432ded7d5d538d2125249d111c2644f
Author: Steve Wise <swise at opengridcomputing.com>
Date:   Sat Jun 16 15:48:28 2007 -0500

     Don't count neg_adv abort_req_rss messages as real aborts.

     negative advice messages should _not_ count toward the 2 abort requests
     needed to indicate an abort request.

     Signed-off-by: Steve Wise <swise at opengridcomputing.com>

diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index ed56d55..a654bd5 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -1464,6 +1464,13 @@ static int peer_abort(struct t3cdev *tde
         int ret;
         int state;

+       if (is_neg_adv_abort(req->status)) {
+               PDBG("%s neg_adv_abort ep %p tid %d\n", __FUNCTION__, ep,
+                    ep->hwtid);
+               t3_l2t_send_event(ep->com.tdev, ep->l2t);
+               return CPL_RET_BUF_DONE;
+       }
+
         /*
          * We get 2 peer aborts from the HW.  The first one must
          * be ignored except for scribbling that we need one more.
@@ -1473,13 +1480,6 @@ static int peer_abort(struct t3cdev *tde
                 return CPL_RET_BUF_DONE;
         }

-       if (is_neg_adv_abort(req->status)) {
-               PDBG("%s neg_adv_abort ep %p tid %d\n", __FUNCTION__, ep,
-                    ep->hwtid);
-               t3_l2t_send_event(ep->com.tdev, ep->l2t);
-               return CPL_RET_BUF_DONE;
-       }
-
         state = state_read(&ep->com);
         PDBG("%s ep %p state %u\n", __FUNCTION__, ep, state);
         switch (state) {

commit 70549f1d9b8d0420bd97111d3c73973723a88a9c
Author: Steve Wise <swise at opengridcomputing.com>
Date:   Fri Jun 15 11:44:40 2007 -0500

     TERMINATE WRs can hang the tx ofld queue.

     Don't set the gen bits nor length bits in the terminate wr.  This is
     done by the LLD driver.

     Signed-off-by: Steve Wise <swise at opengridcomputing.com>

diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 162d1fa..431a7e8 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -630,9 +630,9 @@ int iwch_post_terminate(struct iwch_qp *
         /* immediate data starts here. */
         term = (struct terminate_message *)wqe->send.sgl;
         build_term_codes(rsp_msg, &term->layer_etype, &term->ecode);
-       build_fw_riwrh((void *)wqe, T3_WR_SEND,
-                      T3_COMPLETION_FLAG | T3_NOTIFY_FLAG, 1,
-                      qhp->ep->hwtid, 5);
+       wqe->send.wrh.op_seop_flags = cpu_to_be32(V_FW_RIWR_OP(T3_WR_SEND) |
+                        V_FW_RIWR_FLAGS(T3_COMPLETION_FLAG | T3_NOTIFY_FLAG));
+       wqe->send.wrh.gen_tid_len = cpu_to_be32(V_FW_RIWR_TID(qhp->ep->hwtid));
         skb->priority = CPL_PRIORITY_DATA;
         return (cxgb3_ofld_send(qhp->rhp->rdev.t3cdev_p, skb));
  }



More information about the general mailing list