aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/cxgb3/iwch_cm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/cxgb3/iwch_cm.c')
-rw-r--r--drivers/infiniband/hw/cxgb3/iwch_cm.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index 3b4b0acd707f..b2faff5abce8 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -1109,6 +1109,15 @@ static int abort_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1109 1109
1110 PDBG("%s ep %p\n", __FUNCTION__, ep); 1110 PDBG("%s ep %p\n", __FUNCTION__, ep);
1111 1111
1112 /*
1113 * We get 2 abort replies from the HW. The first one must
1114 * be ignored except for scribbling that we need one more.
1115 */
1116 if (!(ep->flags & ABORT_REQ_IN_PROGRESS)) {
1117 ep->flags |= ABORT_REQ_IN_PROGRESS;
1118 return CPL_RET_BUF_DONE;
1119 }
1120
1112 close_complete_upcall(ep); 1121 close_complete_upcall(ep);
1113 state_set(&ep->com, DEAD); 1122 state_set(&ep->com, DEAD);
1114 release_ep_resources(ep); 1123 release_ep_resources(ep);
@@ -1189,6 +1198,7 @@ static int listen_stop(struct iwch_listen_ep *ep)
1189 } 1198 }
1190 req = (struct cpl_close_listserv_req *) skb_put(skb, sizeof(*req)); 1199 req = (struct cpl_close_listserv_req *) skb_put(skb, sizeof(*req));
1191 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); 1200 req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
1201 req->cpu_idx = 0;
1192 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid)); 1202 OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid));
1193 skb->priority = 1; 1203 skb->priority = 1;
1194 ep->com.tdev->send(ep->com.tdev, skb); 1204 ep->com.tdev->send(ep->com.tdev, skb);
@@ -1475,6 +1485,15 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
1475 int ret; 1485 int ret;
1476 int state; 1486 int state;
1477 1487
1488 /*
1489 * We get 2 peer aborts from the HW. The first one must
1490 * be ignored except for scribbling that we need one more.
1491 */
1492 if (!(ep->flags & PEER_ABORT_IN_PROGRESS)) {
1493 ep->flags |= PEER_ABORT_IN_PROGRESS;
1494 return CPL_RET_BUF_DONE;
1495 }
1496
1478 if (is_neg_adv_abort(req->status)) { 1497 if (is_neg_adv_abort(req->status)) {
1479 PDBG("%s neg_adv_abort ep %p tid %d\n", __FUNCTION__, ep, 1498 PDBG("%s neg_adv_abort ep %p tid %d\n", __FUNCTION__, ep,
1480 ep->hwtid); 1499 ep->hwtid);