diff options
author | Varun Prakash <varun@chelsio.com> | 2016-09-13 11:54:04 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-09-15 20:49:20 -0400 |
commit | a7e1a97f88058ed9b6aa054b38167fbe62f59f50 (patch) | |
tree | 7a26bf44457dd8d6aa575f17df4b87f95786aee5 | |
parent | 29fb6f42e7282322672eff8b4ad85918b9dcbae3 (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.c | 13 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.h | 16 | ||||
-rw-r--r-- | drivers/target/iscsi/cxgbit/cxgbit_cm.c | 13 |
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 | ||
653 | static int send_abort(struct c4iw_ep *ep) | 653 | static 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 | |||
116 | static inline void | ||
117 | cxgb_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 | ||
648 | static int cxgbit_send_abort_req(struct cxgbit_sock *csk) | 648 | static 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 | ||