Deleted Added
full compact
iw_cxgb_cm.c (183292) iw_cxgb_cm.c (193272)
1/**************************************************************************
2
3Copyright (c) 2007, Chelsio Inc.
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met:
8

--- 13 unchanged lines hidden (view full) ---

22SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26POSSIBILITY OF SUCH DAMAGE.
27
28***************************************************************************/
29#include <sys/cdefs.h>
1/**************************************************************************
2
3Copyright (c) 2007, Chelsio Inc.
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met:
8

--- 13 unchanged lines hidden (view full) ---

22SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26POSSIBILITY OF SUCH DAMAGE.
27
28***************************************************************************/
29#include <sys/cdefs.h>
30__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c 183292 2008-09-23 03:16:54Z kmacy $");
30__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c 193272 2009-06-01 21:17:03Z jhb $");
31
32#include <sys/param.h>
33#include <sys/systm.h>
34#include <sys/kernel.h>
35#include <sys/bus.h>
36#include <sys/module.h>
37#include <sys/pciio.h>
38#include <sys/conf.h>

--- 97 unchanged lines hidden (view full) ---

136
137static unsigned int cong_flavor = 1;
138TUNABLE_INT("hw.iw_cxgb.cong_flavor", &cong_flavor);
139SYSCTL_UINT(_hw_cxgb, OID_AUTO, cong_flavor, CTLFLAG_RDTUN, &cong_flavor, 0,
140 "TCP Congestion control flavor (default=1)");
141
142static void ep_timeout(void *arg);
143static void connect_reply_upcall(struct iwch_ep *ep, int status);
31
32#include <sys/param.h>
33#include <sys/systm.h>
34#include <sys/kernel.h>
35#include <sys/bus.h>
36#include <sys/module.h>
37#include <sys/pciio.h>
38#include <sys/conf.h>

--- 97 unchanged lines hidden (view full) ---

136
137static unsigned int cong_flavor = 1;
138TUNABLE_INT("hw.iw_cxgb.cong_flavor", &cong_flavor);
139SYSCTL_UINT(_hw_cxgb, OID_AUTO, cong_flavor, CTLFLAG_RDTUN, &cong_flavor, 0,
140 "TCP Congestion control flavor (default=1)");
141
142static void ep_timeout(void *arg);
143static void connect_reply_upcall(struct iwch_ep *ep, int status);
144static void iwch_so_upcall(struct socket *so, void *arg, int waitflag);
144static int iwch_so_upcall(struct socket *so, void *arg, int waitflag);
145
146/*
147 * Cruft to offload socket upcalls onto thread.
148 */
149static struct mtx req_lock;
150static TAILQ_HEAD(iwch_ep_list, iwch_ep_common) req_list;
151static struct task iw_cxgb_task;
152static struct taskqueue *iw_cxgb_taskq;

--- 177 unchanged lines hidden (view full) ---

330 return iproute.ro_rt;
331}
332
333static void
334close_socket(struct iwch_ep_common *epc)
335{
336 CTR4(KTR_IW_CXGB, "%s ep %p so %p state %s", __FUNCTION__, epc, epc->so, states[epc->state]);
337 SOCK_LOCK(epc->so);
145
146/*
147 * Cruft to offload socket upcalls onto thread.
148 */
149static struct mtx req_lock;
150static TAILQ_HEAD(iwch_ep_list, iwch_ep_common) req_list;
151static struct task iw_cxgb_task;
152static struct taskqueue *iw_cxgb_taskq;

--- 177 unchanged lines hidden (view full) ---

330 return iproute.ro_rt;
331}
332
333static void
334close_socket(struct iwch_ep_common *epc)
335{
336 CTR4(KTR_IW_CXGB, "%s ep %p so %p state %s", __FUNCTION__, epc, epc->so, states[epc->state]);
337 SOCK_LOCK(epc->so);
338 epc->so->so_upcall = NULL;
339 epc->so->so_upcallarg = NULL;
340 epc->so->so_rcv.sb_flags &= ~SB_UPCALL;
338 soupcall_clear(epc->so, SO_RCV);
341 SOCK_UNLOCK(epc->so);
342 soshutdown(epc->so, SHUT_WR|SHUT_RD);
343 epc->so = NULL;
344}
345
346static void
347shutdown_socket(struct iwch_ep_common *epc)
348{

--- 754 unchanged lines hidden (view full) ---

1103 *
1104 * terminate() handles case (1)...
1105 */
1106static int
1107terminate(struct t3cdev *tdev, struct mbuf *m, void *ctx)
1108{
1109 struct toepcb *toep = (struct toepcb *)ctx;
1110 struct socket *so = toeptoso(toep);
339 SOCK_UNLOCK(epc->so);
340 soshutdown(epc->so, SHUT_WR|SHUT_RD);
341 epc->so = NULL;
342}
343
344static void
345shutdown_socket(struct iwch_ep_common *epc)
346{

--- 754 unchanged lines hidden (view full) ---

1101 *
1102 * terminate() handles case (1)...
1103 */
1104static int
1105terminate(struct t3cdev *tdev, struct mbuf *m, void *ctx)
1106{
1107 struct toepcb *toep = (struct toepcb *)ctx;
1108 struct socket *so = toeptoso(toep);
1111 struct iwch_ep *ep = so->so_upcallarg;
1109 struct iwch_ep *ep = so->so_rcv.sb_upcallarg;
1112
1113 CTR2(KTR_IW_CXGB, "%s ep %p", __FUNCTION__, ep);
1114 m_adj(m, sizeof(struct cpl_rdma_terminate));
1115 CTR2(KTR_IW_CXGB, "%s saving %d bytes of term msg", __FUNCTION__, m->m_len);
1116 m_copydata(m, 0, m->m_len, ep->com.qp->attr.terminate_buffer);
1117 ep->com.qp->attr.terminate_msg_len = m->m_len;
1118 ep->com.qp->attr.is_terminate_local = 0;
1119 return CPL_RET_BUF_DONE;

--- 4 unchanged lines hidden (view full) ---

1124{
1125 struct toepcb *toep = (struct toepcb *)ctx;
1126 struct socket *so = toeptoso(toep);
1127 struct cpl_rdma_ec_status *rep = cplhdr(m);
1128 struct iwch_ep *ep;
1129 struct iwch_qp_attributes attrs;
1130 int release = 0;
1131
1110
1111 CTR2(KTR_IW_CXGB, "%s ep %p", __FUNCTION__, ep);
1112 m_adj(m, sizeof(struct cpl_rdma_terminate));
1113 CTR2(KTR_IW_CXGB, "%s saving %d bytes of term msg", __FUNCTION__, m->m_len);
1114 m_copydata(m, 0, m->m_len, ep->com.qp->attr.terminate_buffer);
1115 ep->com.qp->attr.terminate_msg_len = m->m_len;
1116 ep->com.qp->attr.is_terminate_local = 0;
1117 return CPL_RET_BUF_DONE;

--- 4 unchanged lines hidden (view full) ---

1122{
1123 struct toepcb *toep = (struct toepcb *)ctx;
1124 struct socket *so = toeptoso(toep);
1125 struct cpl_rdma_ec_status *rep = cplhdr(m);
1126 struct iwch_ep *ep;
1127 struct iwch_qp_attributes attrs;
1128 int release = 0;
1129
1132 ep = so->so_upcallarg;
1130 ep = so->so_rcv.sb_upcallarg;
1133 CTR5(KTR_IW_CXGB, "%s ep %p so %p state %s ec_status %d", __FUNCTION__, ep, ep->com.so, states[ep->com.state], rep->status);
1134 if (!so || !ep) {
1135 panic("bogosity ep %p state %d, so %p state %x\n", ep, ep ? ep->com.state : -1, so, so ? so->so_state : -1);
1136 }
1137 mtx_lock(&ep->com.lock);
1138 switch (ep->com.state) {
1139 case CLOSING:
1140 if (!rep->status)

--- 163 unchanged lines hidden (view full) ---

1304}
1305
1306static int init_sock(struct iwch_ep_common *epc)
1307{
1308 int err;
1309 struct sockopt sopt;
1310 int on=1;
1311
1131 CTR5(KTR_IW_CXGB, "%s ep %p so %p state %s ec_status %d", __FUNCTION__, ep, ep->com.so, states[ep->com.state], rep->status);
1132 if (!so || !ep) {
1133 panic("bogosity ep %p state %d, so %p state %x\n", ep, ep ? ep->com.state : -1, so, so ? so->so_state : -1);
1134 }
1135 mtx_lock(&ep->com.lock);
1136 switch (ep->com.state) {
1137 case CLOSING:
1138 if (!rep->status)

--- 163 unchanged lines hidden (view full) ---

1302}
1303
1304static int init_sock(struct iwch_ep_common *epc)
1305{
1306 int err;
1307 struct sockopt sopt;
1308 int on=1;
1309
1312 epc->so->so_upcall = iwch_so_upcall;
1313 epc->so->so_upcallarg = epc;
1314 epc->so->so_rcv.sb_flags |= SB_UPCALL;
1310 SOCK_LOCK(epc->so);
1311 soupcall_set(epc->so, SO_RCV, iwch_so_upcall, epc);
1315 epc->so->so_state |= SS_NBIO;
1312 epc->so->so_state |= SS_NBIO;
1313 SOCK_UNLOCK(epc->so);
1316 sopt.sopt_dir = SOPT_SET;
1317 sopt.sopt_level = SOL_SOCKET;
1318 sopt.sopt_name = SO_NO_DDP;
1319 sopt.sopt_val = (caddr_t)&on;
1320 sopt.sopt_valsize = sizeof on;
1321 sopt.sopt_td = NULL;
1322 err = sosetopt(epc->so, &sopt);
1323 if (err)

--- 282 unchanged lines hidden (view full) ---

1606 return NULL;
1607 }
1608 TAILQ_REMOVE(&head->so_comp, so, so_list);
1609 head->so_qlen--;
1610 SOCK_LOCK(so);
1611 so->so_qstate &= ~SQ_COMP;
1612 so->so_head = NULL;
1613 soref(so);
1314 sopt.sopt_dir = SOPT_SET;
1315 sopt.sopt_level = SOL_SOCKET;
1316 sopt.sopt_name = SO_NO_DDP;
1317 sopt.sopt_val = (caddr_t)&on;
1318 sopt.sopt_valsize = sizeof on;
1319 sopt.sopt_td = NULL;
1320 err = sosetopt(epc->so, &sopt);
1321 if (err)

--- 282 unchanged lines hidden (view full) ---

1604 return NULL;
1605 }
1606 TAILQ_REMOVE(&head->so_comp, so, so_list);
1607 head->so_qlen--;
1608 SOCK_LOCK(so);
1609 so->so_qstate &= ~SQ_COMP;
1610 so->so_head = NULL;
1611 soref(so);
1614 so->so_rcv.sb_flags |= SB_UPCALL;
1612 soupcall_set(so, SO_RCV, iwch_so_upcall, child_ep);
1615 so->so_state |= SS_NBIO;
1613 so->so_state |= SS_NBIO;
1616 so->so_upcall = iwch_so_upcall;
1617 so->so_upcallarg = child_ep;
1618 PANIC_IF(!(so->so_state & SS_ISCONNECTED));
1619 PANIC_IF(so->so_error);
1620 SOCK_UNLOCK(so);
1621 ACCEPT_UNLOCK();
1622 soaccept(so, (struct sockaddr **)remote);
1623 return so;
1624}
1625

--- 30 unchanged lines hidden (view full) ---

1656 callout_init(&child_ep->timer, TRUE);
1657 state_set(&child_ep->com, MPA_REQ_WAIT);
1658 start_ep_timer(child_ep);
1659
1660 /* maybe the request has already been queued up on the socket... */
1661 process_mpa_request(child_ep);
1662}
1663
1614 PANIC_IF(!(so->so_state & SS_ISCONNECTED));
1615 PANIC_IF(so->so_error);
1616 SOCK_UNLOCK(so);
1617 ACCEPT_UNLOCK();
1618 soaccept(so, (struct sockaddr **)remote);
1619 return so;
1620}
1621

--- 30 unchanged lines hidden (view full) ---

1652 callout_init(&child_ep->timer, TRUE);
1653 state_set(&child_ep->com, MPA_REQ_WAIT);
1654 start_ep_timer(child_ep);
1655
1656 /* maybe the request has already been queued up on the socket... */
1657 process_mpa_request(child_ep);
1658}
1659
1664static void
1660static int
1665iwch_so_upcall(struct socket *so, void *arg, int waitflag)
1666{
1667 struct iwch_ep *ep = arg;
1668
1669 CTR6(KTR_IW_CXGB, "%s so %p so state %x ep %p ep state(%d)=%s", __FUNCTION__, so, so->so_state, ep, ep->com.state, states[ep->com.state]);
1670 mtx_lock(&req_lock);
1671 if (ep && ep->com.so && !ep->com.entry.tqe_prev) {
1672 get_ep(&ep->com);
1673 TAILQ_INSERT_TAIL(&req_list, &ep->com, entry);
1674 taskqueue_enqueue(iw_cxgb_taskq, &iw_cxgb_task);
1675 }
1676 mtx_unlock(&req_lock);
1661iwch_so_upcall(struct socket *so, void *arg, int waitflag)
1662{
1663 struct iwch_ep *ep = arg;
1664
1665 CTR6(KTR_IW_CXGB, "%s so %p so state %x ep %p ep state(%d)=%s", __FUNCTION__, so, so->so_state, ep, ep->com.state, states[ep->com.state]);
1666 mtx_lock(&req_lock);
1667 if (ep && ep->com.so && !ep->com.entry.tqe_prev) {
1668 get_ep(&ep->com);
1669 TAILQ_INSERT_TAIL(&req_list, &ep->com, entry);
1670 taskqueue_enqueue(iw_cxgb_taskq, &iw_cxgb_task);
1671 }
1672 mtx_unlock(&req_lock);
1673 return (SU_OK);
1677}
1678
1679static void
1680process_socket_event(struct iwch_ep *ep)
1681{
1682 int state = state_read(&ep->com);
1683 struct socket *so = ep->com.so;
1684

--- 81 unchanged lines hidden ---
1674}
1675
1676static void
1677process_socket_event(struct iwch_ep *ep)
1678{
1679 int state = state_read(&ep->com);
1680 struct socket *so = ep->com.so;
1681

--- 81 unchanged lines hidden ---