PERFORCE change 119402 for review
Kip Macy
kmacy at FreeBSD.org
Mon May 7 06:35:47 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=119402
Change 119402 by kmacy at kmacy_vt-x:opentoe_init on 2007/05/07 06:34:54
more incremental BSD-ification of TOE code
Affected files ...
.. //depot/projects/opentoe/sys/dev/cxgb/ulp/t3_tom/t3_cpl_io.c#5 edit
.. //depot/projects/opentoe/sys/dev/cxgb/ulp/t3_tom/t3_ddp.c#4 edit
.. //depot/projects/opentoe/sys/dev/cxgb/ulp/t3_tom/t3_tom.c#4 edit
.. //depot/projects/opentoe/sys/dev/cxgb/ulp/t3_tom/t3_tom.h#4 edit
.. //depot/projects/opentoe/sys/modules/cxgb/t3_tom/Makefile#2 edit
Differences ...
==== //depot/projects/opentoe/sys/dev/cxgb/ulp/t3_tom/t3_cpl_io.c#5 (text+ko) ====
@@ -144,7 +144,7 @@
{
#ifdef notyet
if (__predict_true(!skb_cloned(skb))) {
- BUG_ON(skb->len < len);
+ PANIC_IF(skb->len < len);
__skb_trim(skb, len);
skb_get(skb);
} else {
@@ -299,7 +299,7 @@
{
#if 0
log("connection_done: TID: %u, state: %d, dead %d, refs %d\n",
- TID(sototcpcb(so)), sk->sk_state, sock_flag(sk, SOCK_DEAD),
+ TID(sototcpcb(so)), sototcpcb(so)->t_state, sock_flag(sk, SOCK_DEAD),
atomic_read(&sk->sk_refcnt));
// dump_stack();
#endif
@@ -562,21 +562,21 @@
break;
__skb_unlink(skb, &sk->sk_write_queue);
- skb->priority = mkprio(CPL_PRIORITY_DATA, sk);
- skb->csum = wrs_needed; /* remember this until the WR_ACK */
+ m->m_priority = mkprio(CPL_PRIORITY_DATA, so);
+ m->csum_data = wrs_needed; /* remember this until the WR_ACK */
WR_AVAIL(so) -= wrs_needed;
WR_UNACKED(so) += wrs_needed;
- enqueue_wr(tp, skb);
+ enqueue_wr(tp, m);
if (__predict_true(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_NEED_HDR)) {
len += ulp_extra_len(m);
- make_tx_data_wr(sk, skb, len);
+ make_tx_data_wr(so, m, len);
tp->snd_nxt += len;
tp->lsndtime = tcp_time_stamp;
#if defined(CONFIG_T3_ZCOPY_SENDMSG) || defined(CONFIG_T3_ZCOPY_SENDMSG_MODULE)
atomic_add(skb->len - sizeof (struct tx_data_wr),
&d->tx_dma_pending);
- skb->sk = sk;
+ m->m_pkthdr.priv = so;
#endif
if ((req_completion && WR_UNACKED(so) == wrs_needed) ||
(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_COMPL) ||
@@ -595,7 +595,7 @@
sock_set_flag(sk, TX_WAIT_IDLE);
set_arp_failure_handler(skb, arp_failure_discard);
- l2t_send(cdev, skb, L2T_ENTRY(so));
+ l2t_send(cdev, m, L2T_ENTRY(so));
}
sk->sk_wmem_queued -= total_size;
return total_size;
@@ -662,7 +662,7 @@
t3_set_ca_ops(so, &tcp_init_congestion_ops);
TOE_DEV(so) = NULL;
#if 0
- log(KERN_INFO "closing TID %u, state %u\n", tid, sk->sk_state);
+ log(KERN_INFO "closing TID %u, state %u\n", tid, sototcpcb(so)->t_state);
#endif
}
@@ -753,7 +753,6 @@
if (ext & (1 << INET_DIAG_MAX)) {
struct rtattr *rta;
struct t3_inet_diag_info *info;
- const struct tcpcb *tp = sototcpcb(so);
rta = __RTA_PUT(skb, INET_DIAG_MAX + 1, sizeof(*info));
info = RTA_DATA(rta);
@@ -770,19 +769,22 @@
#define T3_CONG_OPS(s) \
{ .name = s, .owner = THIS_MODULE, .get_info = t3_idiag_get_info }
+#if 0
static struct tcp_congestion_ops t3_cong_ops[] = {
T3_CONG_OPS("reno"), T3_CONG_OPS("tahoe"),
T3_CONG_OPS("newreno"), T3_CONG_OPS("highspeed")
};
+#endif
static void
-mk_act_open_req(struct socket *so, struct mbuf *skb,
+mk_act_open_req(struct socket *so, struct mbuf *m,
unsigned int atid, const struct l2t_entry *e)
{
struct cpl_act_open_req *req;
- skb->priority = mkprio(CPL_PRIORITY_SETUP, sk);
- req = (struct cpl_act_open_req *)__skb_put(skb, sizeof(*req));
+ m->m_priority = mkprio(CPL_PRIORITY_SETUP, so);
+ MH_ALIGN(m, sizeof(*req));
+ req = mtod(m, struct cpl_act_open_req *);
req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_ACT_OPEN_REQ, atid));
req->local_port = sotoinpcb(so)->sport;
@@ -836,7 +838,6 @@
{
struct mbuf *m;
struct socket *so = (struct socket *)data;
- struct inet_connection_sock *icsk = inet_csk(sk);
SOCK_LOCK(so);
if (sock_owned_by_user(sk)) /* try in a bit */
@@ -867,7 +868,6 @@
active_open_failed(struct socket *so, struct mbuf *m)
{
struct cpl_act_open_rpl *rpl = cplhdr(m);
- struct inet_connection_sock *icsk = inet_csk(sk);
if (rpl->status == CPL_ERR_CONN_EXIST &&
icsk->icsk_retransmit_timer.function != act_open_retry_timer) {
@@ -903,7 +903,7 @@
if (cdev->type != T3A && act_open_has_tid(rpl->status))
cxgb_queue_tid_release(cdev, GET_TID(rpl));
- process_cpl_msg_ref(active_open_failed, sk, m);
+ process_cpl_msg_ref(active_open_failed, so, m);
return 0;
}
@@ -922,7 +922,7 @@
SOCK_LOCK(so);
soref(so);
- if (tp->t_state == TCPS_SYN_SENT || sk->sk_state == TCP_SYN_RECV) {
+ if (tp->t_state == TCPS_SYN_SENT || tp->t_state == TCPS_SYN_RECV) {
if (!sock_owned_by_user(sk)) {
fail_act_open(sk, EHOSTUNREACH);
m_freem(m);
@@ -958,7 +958,7 @@
static unsigned int
select_rcv_wnd(struct socket *so)
{
- unsigned int wnd = tcp_full_space(sk);
+ unsigned int wnd = tcp_full_space(so);
/*
* For receive coalescing to work effectively we need a receive window
@@ -970,19 +970,6 @@
return min(wnd, MAX_RCV_WND);
}
-#if defined(TCP_CONGESTION_CONTROL)
-static void
-pivot_ca_ops(struct socket *so, int cong)
-{
- struct inet_connection_sock *icsk = inet_csk(sk);
-
- if (icsk->icsk_ca_ops->release)
- icsk->icsk_ca_ops->release(sk);
- module_put(icsk->icsk_ca_ops->owner);
- icsk->icsk_ca_ops = &t3_cong_ops[cong < 0 ? 2 : cong];
-}
-#endif
-
#define CTRL_SKB_LEN 120
/*
@@ -996,17 +983,17 @@
{
struct tcpcb *tp = sototcpcb(so);
- TOE_DEV(sk) = dev;
+ TOE_DEV(so) = dev;
TID(so) = tid;
- L2T_ENTRY(sk) = e;
+ L2T_ENTRY(so) = e;
WR_MAX(so) = WR_AVAIL(so) = TOM_TUNABLE(dev, max_wrs);
WR_UNACKED(so) = 0;
- DELACK_MODE(sk) = 0;
+ DELACK_MODE(so) = 0;
MTU_IDX(so) = select_mss(sk, dst_mtu(dst));
- tp->rcv_wnd = select_rcv_wnd(sk);
+ tp->rcv_wnd = select_rcv_wnd(so);
ULP_MODE(so) = TOM_TUNABLE(dev, ddp) && !sock_flag(sk, NO_DDP) &&
tp->rcv_wnd >= MIN_DDP_RCV_WIN ? ULP_MODE_TCPDDP : 0;
- QSET_IDX(sk) = 0;
+ QSET_IDX(so) = 0;
#ifdef CTRL_SKB_CACHE
CTRL_SKB_CACHE(so) = alloc_skb(CTRL_SKB_LEN, gfp_any());
#endif
@@ -1030,9 +1017,9 @@
struct l2t_entry *e;
struct tom_data *d = TOM_DATA(tdev);
struct tcpcb *tp = sototcpcb(so);
- struct dst_entry *dst = __sk_dst_get(sk);
+ struct dst_entry *dst = __sk_dst_get(so);
- int atid = cxgb_alloc_atid(d->cdev, d->client, sk);
+ int atid = cxgb_alloc_atid(d->cdev, d->client, so);
if (atid < 0)
goto out_err;
@@ -1049,7 +1036,7 @@
install_offload_ops(so);
init_offload_sk(sk, tdev, atid, e, dst);
- tp->rcv_scale) = select_rcv_wscale(tcp_full_space(sk),
+ tp->rcv_scale) = select_rcv_wscale(tcp_full_space(so),
sysctl_tcp_window_scaling,
tp->window_clamp);
sock_reset_flag(sk, SOCK_DONE);
@@ -1106,9 +1093,9 @@
#endif
/* Purge the send queue so we don't send anything after an abort. */
- t3_purge_write_queue(sk);
+ t3_purge_write_queue(so);
- if (sock_flag(sk, CLOSE_CON_REQUESTED) && is_t3a(TOE_DEV(sk)))
+ if (sock_flag(sk, CLOSE_CON_REQUESTED) && is_t3a(TOE_DEV(so)))
mode |= CPL_ABORT_POST_CLOSE_REQ;
if (!m)
@@ -1150,11 +1137,12 @@
t3_send_reset(child, CPL_ABORT_SEND_RST, m);
sock_orphan(child);
+#ifdef notyet
INC_ORPHAN_COUNT(child);
- if (child->sk_state == TCP_CLOSE)
+ if (sototcpcb(child)->t_state == TCP_CLOSE)
inet_csk_destroy_sock(child);
- sorele_lock(child);
-
+#endif
+ sorele(child);
SOCK_UNLOCK(child);
}
@@ -1231,7 +1219,7 @@
req->mask = cpu_to_be64(mask);
req->val = cpu_to_be64(val);
- m->m_priority = mkprio(CPL_PRIORITY_CONTROL, sk);
+ m->m_priority = mkprio(CPL_PRIORITY_CONTROL, so);
send_or_defer(so, tp, m, 0);
}
@@ -1377,7 +1365,7 @@
req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_GET_TCB, TID(so)));
req->cpuno = htons(qset(sototcpcb(so)));
- if (sk->sk_state == TCP_SYN_SENT)
+ if (sototcpcb(so)->t_state == TCPS_SYN_SENT)
__skb_queue_tail(&tp->out_of_order_queue, m); // defer
else
cxgb_ofld_send(TOE_DEV(so), m);
@@ -1411,7 +1399,7 @@
TID(sototcpcb(so))));
req->credit_dack = htonl(dack | V_RX_CREDITS(credits) |
V_RX_FORCE_ACK(nofail));
- skb->priority = mkprio(CPL_PRIORITY_ACK, sk);
+ m->m_priority = mkprio(CPL_PRIORITY_ACK, so);
cxgb_ofld_send(TOE_DEV(so), m);
return credits;
}
@@ -1448,20 +1436,21 @@
handle_urg_ptr(struct socket *so, uint32_t urg_seq)
{
struct tcpcb *tp = sototcpcb(so);
-
+ struct tcptw *tw = intotw(sotoinpcb(so));
+
urg_seq--; /* initially points past the urgent data, per BSD */
#ifdef notyet
if (tp->urg_data && !after(urg_seq, tp->urg_seq))
return; /* duplicate pointer */
- sk_send_sigurg(sk);
+ sk_send_sigurg(so);
if (tp->urg_seq == tp->copied_seq && tp->urg_data &&
!sock_flag(sk, SOCK_URGINLINE) && tp->copied_seq != tp->rcv_nxt) {
struct mbuf *m = mbufq_peek(&sk->sk_receive_queue); /* XXX ??? */
tp->copied_seq++;
if (m && tp->copied_seq - TCP_SKB_CB(skb)->seq >= skb->len)
- tom_eat_skb(sk, skb, 0);
+ tom_eat_skb(sk, m, 0);
}
tp->urg_data = TCP_URG_NOTYET;
tp->urg_seq = urg_seq;
@@ -1485,7 +1474,7 @@
{
struct cpl_rx_urg_notify *hdr = cplhdr(m);
- if (!sk_no_receive(sk))
+ if (!sk_no_receive(so))
handle_urg_ptr(so, ntohl(hdr->seq));
m_freem(m);
@@ -1677,7 +1666,7 @@
if (!m->m_len) {
if (!ddp_offset)
q->kbuf_posted--;
- BUG_ON(m->m_len);
+ PANIC_IF(m->m_len);
m_freem(m);
return;
}
@@ -1694,17 +1683,19 @@
TCP_SKB_CB(skb)->seq = tp->rcv_nxt;
#endif
tp->rcv_nxt += skb->len;
-
- inet_csk(sk)->icsk_ack.lrcvtime = tcp_time_stamp;
+ /*
+ * XXX ?
+ */
+ sototcpcb(so)->ts_recent = tcp_time_stamp;
skb->h.th = tcphdr_skb->h.th;
#ifdef T3_TRACE
T3_TRACE3(TB(q),
"tcb_rpl_as_ddp_complete: seq 0x%x hwbuf %u lskb->len %u",
- TCP_SKB_CB(skb)->seq, q->cur_buf, skb->len);
+ TCP_SKB_CB(skb)->seq, q->cur_buf, m->m_len);
#endif
-
- __skb_queue_tail(&sk->sk_receive_queue, skb);
+
+ sbappend(&so->so_rcv, m);
if (!sock_flag(so, SOCK_DEAD))
sk->sk_data_ready(sk, 0);
@@ -1761,8 +1752,9 @@
bsp->cur_offset += skb->len;
if (!(bsp->flags & DDP_BF_NOFLIP))
q->cur_buf ^= 1;
- inet_csk(sk)->icsk_ack.lrcvtime = tcp_time_stamp;
- __skb_queue_tail(&sk->sk_receive_queue, skb);
+
+ sototcpcb(so)->ts_recent = tcp_time_stamp;
+ sbappend(so->so_rcv, m);
/* For now, don't re-enable DDP after a connection fell out of DDP
* mode.
@@ -1779,12 +1771,12 @@
struct tcpcb *tp = sototcpcb(so);
if (__predict_false(sk_no_receive(so))) {
- handle_excess_rx(sk, skb);
+ handle_excess_rx(so, m);
return;
}
if (ULP_MODE(so) == ULP_MODE_TCPDDP)
- handle_ddp_data(sk, skb);
+ handle_ddp_data(so, m);
TCP_SKB_CB(skb)->seq = ntohl(hdr->seq);
TCP_SKB_CB(skb)->flags = 0;
@@ -1821,11 +1813,10 @@
#ifdef T3_TRACE
T3_TRACE2(TIDTB(so),
"new_rx_data: seq 0x%x len %u",
- TCP_SKB_CB(skb)->seq, skb->len);
+ TCP_SKB_CB(skb)->seq, m->m_len);
#endif
-
- inet_csk(so)->icsk_ack.lrcvtime = tcp_time_stamp;
- __skb_queue_tail(&sk->sk_receive_queue, skb);
+ sototcpcb(so)->ts_recent = tcp_time_stamp;
+ sbappend(so->so_rcv, m);
if (!sock_flag(sk, SOCK_DEAD))
sk->sk_data_ready(sk, 0);
}
@@ -1843,7 +1834,7 @@
skb->h.th = tcphdr_skb->h.th;
skb->mac.raw = NULL; /* indicates packet is RX_DATA */
- process_cpl_msg(new_rx_data, sk, skb);
+ process_cpl_msg(new_rx_data, so, m);
return 0;
}
@@ -1857,7 +1848,7 @@
unsigned int ddp_len, rcv_nxt, ddp_report, end_offset, buf_idx;
if (__predict_false(sk_no_receive(so))) {
- handle_excess_rx(sk, skb);
+ handle_excess_rx(so, m);
return;
}
@@ -1913,7 +1904,7 @@
*/
if ((bsp->flags & DDP_BF_NOINVAL) && end_offset != bsp->gl->length) {
TCP_SKB_CB(skb)->flags = 0; /* potential spurious completion */
- BUG_ON(1);
+ PANIC_IF(1);
} else {
TCP_SKB_CB(skb)->flags = !!(ddp_report & F_DDP_BUF_COMPLETE);
if (TCP_SKB_CB(skb)->flags && !(bsp->flags & DDP_BF_NOFLIP))
@@ -1928,8 +1919,8 @@
if (ddp_report & F_DDP_PSH)
TCP_SKB_CB(skb)->flags |= DDP_BF_PSH;
- inet_csk(so)->icsk_ack.lrcvtime = tcp_time_stamp;
- __skb_queue_tail(&sk->sk_receive_queue, skb);
+ sototcpcb(so)->ts_recent = tcp_time_stamp;
+ sbappend(&so->so_rcv, m);
if (!sock_flag(sk, SOCK_DEAD))
sk->sk_data_ready(sk, 0);
}
@@ -1957,7 +1948,7 @@
}
skb->h.th = tcphdr_skb->h.th;
- process_cpl_msg(new_rx_data_ddp, sk, skb);
+ process_cpl_msg(new_rx_data_ddp, so, m);
return 0;
}
@@ -2013,8 +2004,9 @@
TCP_SKB_CB(skb)->seq = tp->rcv_nxt;
tp->rcv_nxt += skb->len;
- inet_csk(so)->icsk_ack.lrcvtime = tcp_time_stamp;
- __skb_queue_tail(&sk->sk_receive_queue, skb);
+ sototcpcb(so)->ts_recent = tcp_time_stamp;
+ sbappend(so->so_rcv, m);
+
if (!sock_flag(sk, SOCK_DEAD))
sk->sk_data_ready(sk, 0);
}
@@ -2030,7 +2022,7 @@
VALIDATE_SOCK(so);
skb->h.th = tcphdr_skb->h.th;
- process_cpl_msg(process_ddp_complete, sk, skb);
+ process_cpl_msg(process_ddp_complete, so, m);
return 0;
}
@@ -2054,7 +2046,7 @@
TS_RECENT_STAMP(tp) = 0; /* defeat recycling */
tp->srtt = 0; /* defeat tcp_update_metrics */
- tcp_time_wait(sk, TCP_TIME_WAIT, 0); /* calls tcp_done */
+ tcp_time_wait(so, TCP_TIME_WAIT, 0); /* calls tcp_done */
}
/*
@@ -2078,7 +2070,7 @@
return 0;
if (__predict_false(sk_no_receive(so))) {
- handle_excess_rx(sk, skb);
+ handle_excess_rx(so, m);
/*
* Although we discard the data we want to process the FIN so
@@ -2102,10 +2094,10 @@
bsp->cur_offset += skb->len;
if (!(bsp->flags & DDP_BF_NOFLIP))
q->cur_buf ^= 1;
- inet_csk(so)->icsk_ack.lrcvtime = tcp_time_stamp;
- __skb_queue_tail(&sk->sk_receive_queue, skb);
- if (!sock_flag(sk, SOCK_DEAD))
- sk->sk_data_ready(sk, 0);
+ sototcpcb(so)->ts_recent = tcp_time_stamp;
+ sbappend(&so->so_rcv, m);
+ if (!sock_flag(so, SOCK_DEAD))
+ sk->sk_data_ready(so, 0);
return 1;
}
@@ -2116,32 +2108,32 @@
do_peer_fin(struct socket *so, struct mbuf *skb)
{
struct tcpcb *tp = sototcpcb(so);
- int keep = 0, dead = sock_flag(sk, SOCK_DEAD);
+ int keep = 0, dead = sock_flag(so, SOCK_DEAD);
#ifdef T3_TRACE
T3_TRACE0(TIDTB(so),"do_peer_fin:");
#endif
- if (!is_t3a(TOE_DEV(so)) && sock_flag(sk, ABORT_RPL_PENDING))
+ if (!is_t3a(TOE_DEV(so)) && sock_flag(so, ABORT_RPL_PENDING))
goto out;
if (ULP_MODE(tp) == ULP_MODE_TCPDDP) {
- keep = handle_peer_close_data(sk, skb);
+ keep = handle_peer_close_data(so, m);
if (keep < 0)
return;
}
sk->sk_shutdown |= RCV_SHUTDOWN;
- sock_set_flag(sk, SOCK_DONE);
- switch (sk->sk_state) {
- case TCP_SYN_RECV:
- case TCP_ESTABLISHED:
+ sock_set_flag(so, SOCK_DONE);
+ switch (sototcpcb(so)->t_state) {
+ case TCPS_SYN_RECEIVED:
+ case TCPS_ESTABLISHED:
tcp_set_state(sk, TCP_CLOSE_WAIT);
break;
- case TCP_FIN_WAIT1:
+ case TCPS_FIN_WAIT1:
tcp_set_state(sk, TCP_CLOSING);
break;
- case TCP_FIN_WAIT2:
+ case TCPS_FIN_WAIT2:
/*
* If we've sent an abort_req we must have sent it too late,
* HW will send us a reply telling us so, and this peer_close
@@ -2160,7 +2152,7 @@
default:
log(LOG_ERR,
"%s: TID %u received PEER_CLOSE in bad state %d\n",
- TOE_DEV(so)->name, TID(so), sk->sk_state);
+ TOE_DEV(so)->name, TID(so), sototcpcb(so)->t_state);
}
if (!dead) {
@@ -2168,7 +2160,7 @@
/* Do not send POLL_HUP for half duplex close. */
if ((sk->sk_shutdown & SEND_SHUTDOWN) ||
- sk->sk_state == TCP_CLOSE)
+ sototcpcb(so)->t_state == TCP_CLOSE)
sk_wake_async(sk, 1, POLL_HUP);
else
sk_wake_async(sk, 1, POLL_IN);
@@ -2187,7 +2179,7 @@
VALIDATE_SOCK(so);
- process_cpl_msg_ref(do_peer_fin, sk, skb);
+ process_cpl_msg_ref(do_peer_fin, so, m);
return 0;
}
@@ -2200,15 +2192,15 @@
if (!is_t3a(TOE_DEV(so)) && sock_flag(sk, ABORT_RPL_PENDING))
goto out;
- switch (sk->sk_state) {
- case TCP_CLOSING: /* see FIN_WAIT2 case in do_peer_fin */
+ switch (sototcpcb(so)->t_state) {
+ case TCPS_CLOSING: /* see FIN_WAIT2 case in do_peer_fin */
t3_release_offload_resources(so);
if (sock_flag(sk, ABORT_RPL_PENDING))
connection_done(so);
else
enter_timewait(so);
break;
- case TCP_LAST_ACK:
+ case TCPS_LAST_ACK:
/*
* In this state we don't care about pending abort_rpl.
* If we've sent abort_req it was post-close and was sent too
@@ -2217,7 +2209,7 @@
t3_release_offload_resources(so);
connection_done(so);
break;
- case TCP_FIN_WAIT1:
+ case TCPS_FIN_WAIT1:
tcp_set_state(sk, TCP_FIN_WAIT2);
sk->sk_shutdown |= SEND_SHUTDOWN;
dst_confirm(sk->sk_dst_cache);
@@ -2226,7 +2218,7 @@
sk->sk_state_change(so); // Wake up lingering close()
else if (sototcpcb(so)->linger2 < 0 &&
!sock_flag(sk, ABORT_SHUTDOWN))
- abort_conn(sk, skb, LINUX_MIB_TCPABORTONLINGER);
+ abort_conn(so, m, LINUX_MIB_TCPABORTONLINGER);
break;
default:
log(LOG_ERR,
@@ -2245,7 +2237,7 @@
{
struct socket *so = (struct socket *)ctx;
- VALIDATE_SOCK(sk);
+ VALIDATE_SOCK(so);
process_cpl_msg_ref(process_close_con_rpl, so, m);
return 0;
@@ -2261,22 +2253,22 @@
process_abort_rpl(struct socket *so, struct mbuf *m)
{
#ifdef T3_TRACE
- T3_TRACE1(TIDTB(sk),
+ T3_TRACE1(TIDTB(so),
"process_abort_rpl: GTS rpl pending %d",
sock_flag(sk, ABORT_RPL_PENDING));
#endif
if (sock_flag(sk, ABORT_RPL_PENDING)) {
- if (!sock_flag(sk, ABORT_RPL_RCVD) && !is_t3a(TOE_DEV(sk)))
+ if (!sock_flag(sk, ABORT_RPL_RCVD) && !is_t3a(TOE_DEV(so)))
sock_set_flag(sk, ABORT_RPL_RCVD);
else {
sock_reset_flag(sk, ABORT_RPL_RCVD);
sock_reset_flag(sk, ABORT_RPL_PENDING);
if (!sock_flag(sk, ABORT_REQ_RCVD) ||
- !is_t3a(TOE_DEV(sk))) {
- BUG_ON(sock_flag(sk, ABORT_REQ_RCVD));
- t3_release_offload_resources(sk);
- connection_done(sk);
+ !is_t3a(TOE_DEV(so))) {
+ PANIC_IF(sock_flag(sk, ABORT_REQ_RCVD));
+ t3_release_offload_resources(so);
+ connection_done(so);
}
}
}
@@ -2304,7 +2296,7 @@
return 0;
}
- sk = (struct socket *)ctx;
+ so = (struct socket *)ctx;
/*
* Sometimes we've already closed the socket, e.g., a post-close
@@ -2313,10 +2305,10 @@
* but FW turns the ABORT_REQ into a regular one and so we get
* ABORT_RPL_RSS with status 0 and no socket. Only on T3A.
*/
- if (!sk)
+ if (!so)
goto discard;
- process_cpl_msg_ref(process_abort_rpl, sk, skb);
+ process_cpl_msg_ref(process_abort_rpl, so, m);
return 0;
}
@@ -2333,7 +2325,7 @@
NET_INC_STATS_BH(LINUX_MIB_TCPABORTONSYN); // fall through
case CPL_ERR_CONN_RESET:
// XXX need to handle SYN_RECV due to crossed SYNs
- return sk->sk_state == TCP_CLOSE_WAIT ? EPIPE : ECONNRESET;
+ return sototcpcb(so)->t_state == TCP_CLOSE_WAIT ? EPIPE : ECONNRESET;
case CPL_ERR_XMIT_TIMEDOUT:
case CPL_ERR_PERSIST_TIMEDOUT:
case CPL_ERR_FINWAIT2_TIMEDOUT:
@@ -2363,7 +2355,7 @@
struct cpl_abort_req_rss *req = cplhdr(m);
reply_skb = alloc_skb_nofail(sizeof(struct cpl_abort_rpl));
- reply_skb->priority = CPL_PRIORITY_DATA;
+ reply_skb->m_priority = CPL_PRIORITY_DATA;
__skb_put(reply_skb, sizeof(struct cpl_abort_rpl));
set_abort_rpl_wr(reply_skb, GET_TID(req), req->status);
cxgb_ofld_send(TOM_DATA(tdev)->cdev, reply_skb);
@@ -2395,7 +2387,7 @@
return;
}
- reply_skb->priority = CPL_PRIORITY_DATA;
+ reply_skb->m_priority = CPL_PRIORITY_DATA;
set_abort_rpl_wr(reply_skb, GET_TID(req), rst_status);
m_freem(m);
/*
@@ -2428,7 +2420,7 @@
* otherwise the server already did the clean up as it was purging
* its SYN queue and the skb was just sitting in its backlog.
*/
- if (__predict_true(parent->sk_state == TCP_LISTEN)) {
+ if (__predict_true(sototcpcb(parent)->t_state == TCP_LISTEN)) {
cleanup_syn_rcv_conn(child, parent);
t3_release_offload_resources(child);
connection_done(child);
@@ -2442,9 +2434,9 @@
static void
bl_abort_syn_rcv(struct socket *lso, struct mbuf *m)
{
- struct socket *child = skb->sk;
+ struct socket *child = m->m_pkthdr.priv;
- skb->sk = NULL;
+ m->m_pkthdr.priv = NULL;
do_abort_syn_rcv(child, lso);
send_abort_rpl(skb, BLOG_SKB_CB(skb)->dev, CPL_ABORT_NO_RST);
}
@@ -2457,7 +2449,7 @@
abort_syn_rcv(struct socket *so, struct mbuf *m)
{
struct socket *parent;
- struct toedev *tdev = TOE_DEV(sk);
+ struct toedev *tdev = TOE_DEV(so);
struct toedev *cdev = TOM_DATA(tdev)->cdev;
const struct request_sock *oreq = sk->sk_user_data;
struct toe_tid_entry *toe_stid;
@@ -2475,7 +2467,7 @@
do_abort_syn_rcv(sk, parent);
send_abort_rpl(skb, tdev, CPL_ABORT_NO_RST);
} else {
- skb->sk = sk;
+ m->m_pkthdr.priv = so;
SET_BLOG_CPL_HANDLER(skb, bl_abort_syn_rcv);
sk_add_backlog(parent, skb);
}
@@ -2511,20 +2503,20 @@
* That will generate an abort_rpl with status 0, wait for it.
*/
if (!sock_flag(sk, ABORT_RPL_PENDING) ||
- (is_t3a(TOE_DEV(sk)) && sock_flag(sk, CLOSE_CON_REQUESTED))) {
+ (is_t3a(TOE_DEV(so)) && sock_flag(so, CLOSE_CON_REQUESTED))) {
sk->sk_err = abort_status_to_errno(sk, req->status,
&rst_status);
if (!sock_flag(sk, SOCK_DEAD))
- sk->sk_error_report(sk);
+ sk->sk_error_report(so);
/*
* SYN_RECV needs special processing. If abort_syn_rcv()
* returns 0 is has taken care of the abort.
*/
- if (sk->sk_state == TCP_SYN_RECV && !abort_syn_rcv(sk, skb))
+ if (sototcpcb(so)->t_state == TCPS_SYN_RECV && !abort_syn_rcv(so, m))
return;
- t3_release_offload_resources(sk);
- connection_done(sk);
+ t3_release_offload_resources(so);
+ connection_done(so);
}
send_abort_rpl(skb, BLOG_SKB_CB(skb)->dev, rst_status);
@@ -2544,13 +2536,13 @@
return 0;
}
- VALIDATE_SOCK(sk);
+ VALIDATE_SOCK(so);
/*
* Save the offload device in the skb, we may process this message
* after the socket has closed.
*/
- BLOG_SKB_CB(skb)->dev = TOE_DEV(sk);
+ BLOG_SKB_CB(skb)->dev = TOE_DEV(so);
process_cpl_msg_ref(process_abort_req, sk, skb);
return 0;
@@ -2601,7 +2593,7 @@
}
oreq = sk->sk_user_data;
- cdev = TOE_DEV(sk);
+ cdev = TOE_DEV(so);
t = &(TOE_DATA(cdev))->tid_maps;
toe_stid = lookup_stid(t, oreq->ts_recent);
parent = ((struct listen_ctx *)toe_stid->ctx)->lso;
@@ -2638,7 +2630,7 @@
.nl_u = { .ip4_u =
{ .daddr = req->af.v4_req.rmt_addr,
.saddr = req->af.v4_req.loc_addr,
- .tos = RT_CONN_FLAGS(sk)}},
+ .tos = RT_CONN_FLAGS(so)}},
.proto = IPPROTO_TCP,
.uli_u = { .ports =
{ .sport = sotoinpcb(so)->sport,
@@ -2740,7 +2732,7 @@
struct cpl_pass_accept_rpl *rpl = cplhdr(reply_skb);
unsigned int tid = GET_TID(req);
- reply_skb->priority = CPL_PRIORITY_SETUP;
+ reply_mbuf->m_priority = CPL_PRIORITY_SETUP;
rpl->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_PASS_ACCEPT_RPL, tid));
rpl->peer_ip = req->peer_ip; // req->peer_ip not overwritten yet
@@ -2796,11 +2788,11 @@
goto out;
}
- if (sk->sk_state != TCP_LISTEN)
+ if (sototcpcb(so) != TCP_LISTEN)
goto reject;
- if (inet_csk_reqsk_queue_is_full(sk))
+ if (inet_csk_reqsk_queue_is_full(so))
goto reject;
- if (sk_acceptq_is_full(sk) && d->conf.soft_backlog_limit)
+ if (sk_acceptq_is_full(so) && d->conf.soft_backlog_limit)
goto reject;
tim.mac_addr = req->dst_mac;
@@ -2834,8 +2826,8 @@
ULP_MODE(sototcpcb(newso)) = 0;
}
- reply_skb->sk = newso;
- set_arp_failure_handler(reply_skb, pass_accept_rpl_arp_failure);
+ reply_mbuf->m_pkthdr.priv = newso;
+ set_arp_failure_handler(reply_mbuf, pass_accept_rpl_arp_failure);
e = L2T_ENTRY(newso);
@@ -2850,7 +2842,7 @@
rpl->opt2 = htonl(calc_opt2(newso));
rpl->rsvd = rpl->opt2; /* workaround for HW bug */
- reply_skb->priority = mkprio(CPL_PRIORITY_SETUP, newso);
+ reply_mbuf->m_priority = mkprio(CPL_PRIORITY_SETUP, newso);
l2t_send(cdev, reply_skb, e);
m_freem(m);
if (ULP_MODE(sotcpcb(newso)))
@@ -2936,7 +2928,7 @@
* If the server is closed it has already killed its embryonic
* children. There is nothing further to do about child.
*/
- if (lsk->sk_state != TCP_LISTEN)
+ if (sototcpcb(lso)->t_state != TCP_LISTEN)
return;
oreq = child->sk_user_data;
@@ -2966,10 +2958,10 @@
static void
bl_add_pass_open_to_parent(struct socket *lso, struct mbuf *m)
{
- struct socket *child = skb->sk;
+ struct socket *child = m->m_pkthdr.priv;
- skb->sk = NULL;
- add_pass_open_to_parent(child, lsk, BLOG_SKB_CB(skb)->dev);
+ m->m_pkthdr.priv = NULL;
+ add_pass_open_to_parent(child, lso, BLOG_SKB_CB(skb)->dev);
m_freem(m);
}
@@ -2980,7 +2972,7 @@
static void
assign_rxopt(struct socket *so, unsigned int opt)
{
- const struct toe_data *td = TOE_DATA(TOE_DEV(sk));
+ const struct toe_data *td = TOE_DATA(TOE_DEV(so));
struct tcpcb *tp = sototcpcb(so);
MSS_CLAMP(tp) = td->mtus[G_TCPOPT_MSS(opt)] - 40;
@@ -3039,12 +3031,12 @@
{
struct cpl_pass_establish *req = cplhdr(m);
struct socket *lso, *so = (struct socket *)ctx;
- struct toedev *tdev = TOE_DEV(sk);
+ struct toedev *tdev = TOE_DEV(so);
- VALIDATE_SOCK(sk);
+ VALIDATE_SOCK(so);
SOCK_LOCK(so);
- if (__predict_false(sock_owned_by_user(sk))) {
+ if (__predict_false(sock_owned_by_user(so))) {
// This can only happen in simultaneous opens. XXX TBD
m_freem(m);
} else {
@@ -3060,7 +3052,7 @@
make_established(sk, ntohl(req->snd_isn), ntohs(req->tcp_opt));
if (__predict_false(sk->sk_socket)) { // simultaneous opens only
- sk->sk_state_change(sk);
+ sk->sk_state_change(so);
sk_wake_async(sk, 0, POLL_OUT);
}
@@ -3092,7 +3084,7 @@
m_freem(m);
add_pass_open_to_parent(sk, lso, tdev);
} else {
- skb->sk = sk;
+ m->m_pkthdr.priv = so;
BLOG_SKB_CB(skb)->dev = tdev;
SET_BLOG_CPL_HANDLER(skb, bl_add_pass_open_to_parent);
sk_add_backlog(lso, skb);
@@ -3112,7 +3104,7 @@
fixup_and_send_ofo(struct socket *so)
{
struct mbuf *skb;
- struct toedev *tdev = TOE_DEV(sk);
+ struct toedev *tdev = TOE_DEV(so);
struct tcpcb *tp = sototcpcb(so);
unsigned int tid = TID(so);
@@ -3179,13 +3171,12 @@
* defer for lack of a TID.
*/
if (skb_queue_len(&tp->out_of_order_queue))
- fixup_and_send_ofo(sk);
+ fixup_and_send_ofo(so);
- if (__predict_true(!sock_flag(sk, SOCK_DEAD))) {
- sk->sk_state_change(sk);
+ if (__predict_true(!sock_flag(so, SOCK_DEAD))) {
+ sk->sk_state_change(so);
sk_wake_async(sk, 0, POLL_OUT);
}
-
m_freem(m);
/*
@@ -3197,9 +3188,9 @@
* buffers according to the just learned write_seq, and then we send
* them on their way.
*/
- fixup_pending_writeq_buffers(sk);
- if (t3_push_frames(sk, 1))
- sk->sk_write_space(sk);
+ fixup_pending_writeq_buffers(so);
+ if (t3_push_frames(so, 1))
+ sk->sk_write_space(so);
}
/*
@@ -3212,7 +3203,7 @@
unsigned int tid = GET_TID(req);
unsigned int atid = G_PASS_OPEN_TID(ntohl(req->tos_tid));
struct socket *so = (struct socket *)ctx;
- struct toedev *tdev = TOE_DEV(sk);
+ struct toedev *tdev = TOE_DEV(so);
struct tom_data *d = TOM_DATA(tdev);
/*
@@ -3251,7 +3242,7 @@
if (__predict_false(!p)) {
printf(LOG_ERR, "%u WR_ACK credits for TID %u with "
"nothing pending, state %u\n",
- credits, TID(so), sk->sk_state);
+ credits, TID(so), sototcpcb(so)->t_state);
break;
}
if (__predict_false(credits < p->csum)) {
@@ -3282,7 +3273,7 @@
if (__predict_false(before(snd_una, tp->snd_una))) {
#if VALIDATE_SEQ
- struct tom_data *d = TOM_DATA(TOE_DEV(sk));
+ struct tom_data *d = TOM_DATA(TOE_DEV(so));
log(LOG_ERR, "%s: unexpected sequence # %u in WR_ACK "
"for TID %u, snd_una %u\n", (&d->tdev)->name, snd_una,
@@ -3293,10 +3284,10 @@
if (tp->snd_una != snd_una) {
tp->snd_una = snd_una;
- dst_confirm(sk->sk_dst_cache);
+ dst_confirm(so->sk_dst_cache);
tp->rcv_tstamp = tcp_time_stamp;
if (tp->snd_una == tp->snd_nxt)
- sock_reset_flag(sk, TX_WAIT_IDLE);
+ sock_reset_flag(so, TX_WAIT_IDLE);
}
if (skb_queue_len(&sk->sk_write_queue) && t3_push_frames(sk, 0))
@@ -3394,10 +3385,12 @@
unsigned int ppod_addr = tag * PPOD_SIZE + td->ddp_llimit;
for (i = 0; i < nppods; ++i) {
- skb = alloc_ctrl_skb(tp, sizeof(*req) + PPOD_SIZE);
- skb->priority = mkprio(CPL_PRIORITY_CONTROL, sk);
- req = (struct ulp_mem_io *)__skb_put(skb,
- sizeof(*req) + PPOD_SIZE);
+ m = alloc_ctrl_skb(tp, sizeof(*req) + PPOD_SIZE);
+
+ MH_ALIGN(m, sizeof(*req) + PPOD_SIZE);
+ req = mtod(m, struct ulp_mem_io *);
+ m->m_priority = mkprio(CPL_PRIORITY_CONTROL, sk);
+
req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_BYPASS));
req->cmd_lock_addr = htonl(V_ULP_MEMIO_ADDR(ppod_addr >> 5) |
V_ULPTX_CMD(ULP_MEM_WRITE));
@@ -3500,8 +3493,8 @@
wrlen = sizeof(*wr) + sizeof(*req) + 2 * sizeof(*lock) +
sizeof(*getreq);
- skb = alloc_ctrl_skb(tp, wrlen);
- skb->priority = mkprio(CPL_PRIORITY_CONTROL, sk);
+ m = alloc_ctrl_skb(tp, wrlen);
+ m->m_priority = mkprio(CPL_PRIORITY_CONTROL, so);
wr = (struct work_request_hdr *)__skb_put(skb, wrlen);
wr->wr_hi = htonl(V_WR_OP(FW_WROPCODE_BYPASS));
@@ -3536,10 +3529,10 @@
p->get_tcb_count++;
#ifdef T3_TRACE
- T3_TRACE1(TIDTB(sk),
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list