aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVarun Prakash <varun@chelsio.com>2016-09-13 11:54:04 -0400
committerDavid S. Miller <davem@davemloft.net>2016-09-15 20:49:20 -0400
commita7e1a97f88058ed9b6aa054b38167fbe62f59f50 (patch)
tree7a26bf44457dd8d6aa575f17df4b87f95786aee5
parent29fb6f42e7282322672eff8b4ad85918b9dcbae3 (diff)
libcxgb,iw_cxgb4,cxgbit: add cxgb_mk_abort_req()
Add cxgb_mk_abort_req() to remove duplicate code to form CPL_ABORT_REQ hardware command. Signed-off-by: Varun Prakash <varun@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/infiniband/hw/cxgb4/cm.c13
-rw-r--r--drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.h16
-rw-r--r--drivers/target/iscsi/cxgbit/cxgbit_cm.c13
3 files changed, 23 insertions, 19 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index 22bccd87c5d2..484196e8a49c 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -652,21 +652,16 @@ static int send_halfclose(struct c4iw_ep *ep)
652 652
653static int send_abort(struct c4iw_ep *ep) 653static int send_abort(struct c4iw_ep *ep)
654{ 654{
655 struct cpl_abort_req *req; 655 u32 wrlen = roundup(sizeof(struct cpl_abort_req), 16);
656 int wrlen = roundup(sizeof *req, 16);
657 struct sk_buff *req_skb = skb_dequeue(&ep->com.ep_skb_list); 656 struct sk_buff *req_skb = skb_dequeue(&ep->com.ep_skb_list);
658 657
659 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid); 658 PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid);
660 if (WARN_ON(!req_skb)) 659 if (WARN_ON(!req_skb))
661 return -ENOMEM; 660 return -ENOMEM;
662 661
663 set_wr_txq(req_skb, CPL_PRIORITY_DATA, ep->txq_idx); 662 cxgb_mk_abort_req(req_skb, wrlen, ep->hwtid, ep->txq_idx,
664 t4_set_arp_err_handler(req_skb, ep, abort_arp_failure); 663 ep, abort_arp_failure);
665 req = (struct cpl_abort_req *)skb_put(req_skb, wrlen); 664
666 memset(req, 0, wrlen);
667 INIT_TP_WR(req, ep->hwtid);
668 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_REQ, ep->hwtid));
669 req->cmd = CPL_ABORT_SEND_RST;
670 return c4iw_l2t_send(&ep->com.dev->rdev, req_skb, ep->l2t); 665 return c4iw_l2t_send(&ep->com.dev->rdev, req_skb, ep->l2t);
671} 666}
672 667
diff --git a/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.h b/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.h
index e77661d98738..2d3a3bfb1919 100644
--- a/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.h
+++ b/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.h
@@ -112,4 +112,20 @@ cxgb_mk_close_con_req(struct sk_buff *skb, u32 len, u32 tid, u16 chan,
112 set_wr_txq(skb, CPL_PRIORITY_DATA, chan); 112 set_wr_txq(skb, CPL_PRIORITY_DATA, chan);
113 t4_set_arp_err_handler(skb, handle, handler); 113 t4_set_arp_err_handler(skb, handle, handler);
114} 114}
115
116static inline void
117cxgb_mk_abort_req(struct sk_buff *skb, u32 len, u32 tid, u16 chan,
118 void *handle, arp_err_handler_t handler)
119{
120 struct cpl_abort_req *req;
121
122 req = (struct cpl_abort_req *)__skb_put(skb, len);
123 memset(req, 0, len);
124
125 INIT_TP_WR(req, tid);
126 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_REQ, tid));
127 req->cmd = CPL_ABORT_SEND_RST;
128 set_wr_txq(skb, CPL_PRIORITY_DATA, chan);
129 t4_set_arp_err_handler(skb, handle, handler);
130}
115#endif 131#endif
diff --git a/drivers/target/iscsi/cxgbit/cxgbit_cm.c b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
index a8f5f360414f..f2b737e6fa6a 100644
--- a/drivers/target/iscsi/cxgbit/cxgbit_cm.c
+++ b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
@@ -647,9 +647,8 @@ static void cxgbit_abort_arp_failure(void *handle, struct sk_buff *skb)
647 647
648static int cxgbit_send_abort_req(struct cxgbit_sock *csk) 648static int cxgbit_send_abort_req(struct cxgbit_sock *csk)
649{ 649{
650 struct cpl_abort_req *req;
651 unsigned int len = roundup(sizeof(*req), 16);
652 struct sk_buff *skb; 650 struct sk_buff *skb;
651 u32 len = roundup(sizeof(struct cpl_abort_req), 16);
653 652
654 pr_debug("%s: csk %p tid %u; state %d\n", 653 pr_debug("%s: csk %p tid %u; state %d\n",
655 __func__, csk, csk->tid, csk->com.state); 654 __func__, csk, csk->tid, csk->com.state);
@@ -660,15 +659,9 @@ static int cxgbit_send_abort_req(struct cxgbit_sock *csk)
660 cxgbit_send_tx_flowc_wr(csk); 659 cxgbit_send_tx_flowc_wr(csk);
661 660
662 skb = __skb_dequeue(&csk->skbq); 661 skb = __skb_dequeue(&csk->skbq);
663 req = (struct cpl_abort_req *)__skb_put(skb, len); 662 cxgb_mk_abort_req(skb, len, csk->tid, csk->txq_idx,
664 memset(req, 0, len); 663 csk->com.cdev, cxgbit_abort_arp_failure);
665 664
666 set_wr_txq(skb, CPL_PRIORITY_DATA, csk->txq_idx);
667 t4_set_arp_err_handler(skb, csk->com.cdev, cxgbit_abort_arp_failure);
668 INIT_TP_WR(req, csk->tid);
669 OPCODE_TID(req) = cpu_to_be32(MK_OPCODE_TID(CPL_ABORT_REQ,
670 csk->tid));
671 req->cmd = CPL_ABORT_SEND_RST;
672 return cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t); 665 return cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t);
673} 666}
674 667