Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 May 2016 08:13:25 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r298974 - head/sys/netinet
Message-ID:  <201605030813.u438DPTe048180@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Tue May  3 08:13:25 2016
New Revision: 298974
URL: https://svnweb.freebsd.org/changeset/base/298974

Log:
  tcp/lro: Refactor the active list operation.
  
  Ease more work concerning active list, e.g. hash table etc.
  
  Reviewed by:	gallatin, rrs (earlier version)
  Sponsored by:	Microsoft OSTC
  Differential Revision:	https://reviews.freebsd.org/D6137

Modified:
  head/sys/netinet/tcp_lro.c

Modified: head/sys/netinet/tcp_lro.c
==============================================================================
--- head/sys/netinet/tcp_lro.c	Tue May  3 08:07:38 2016	(r298973)
+++ head/sys/netinet/tcp_lro.c	Tue May  3 08:13:25 2016	(r298974)
@@ -69,6 +69,20 @@ static MALLOC_DEFINE(M_LRO, "LRO", "LRO 
 
 static void	tcp_lro_rx_done(struct lro_ctrl *lc);
 
+static __inline void
+tcp_lro_active_insert(struct lro_ctrl *lc, struct lro_entry *le)
+{
+
+	LIST_INSERT_HEAD(&lc->lro_active, le, next);
+}
+
+static __inline void
+tcp_lro_active_remove(struct lro_entry *le)
+{
+
+	LIST_REMOVE(le, next);
+}
+
 int
 tcp_lro_init(struct lro_ctrl *lc)
 {
@@ -129,7 +143,7 @@ tcp_lro_free(struct lro_ctrl *lc)
 
 	/* free active mbufs, if any */
 	while ((le = LIST_FIRST(&lc->lro_active)) != NULL) {
-		LIST_REMOVE(le, next);
+		tcp_lro_active_remove(le);
 		m_freem(le->m_head);
 	}
 
@@ -234,7 +248,7 @@ tcp_lro_rx_done(struct lro_ctrl *lc)
 	struct lro_entry *le;
 
 	while ((le = LIST_FIRST(&lc->lro_active)) != NULL) {
-		LIST_REMOVE(le, next);
+		tcp_lro_active_remove(le);
 		tcp_lro_flush(lc, le);
 	}
 }
@@ -252,7 +266,7 @@ tcp_lro_flush_inactive(struct lro_ctrl *
 	timevalsub(&tv, timeout);
 	LIST_FOREACH_SAFE(le, &lc->lro_active, next, le_tmp) {
 		if (timevalcmp(&tv, &le->mtime, >=)) {
-			LIST_REMOVE(le, next);
+			tcp_lro_active_remove(le);
 			tcp_lro_flush(lc, le);
 		}
 	}
@@ -620,7 +634,7 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m
 
 		/* Flush now if appending will result in overflow. */
 		if (le->p_len > (lc->lro_length_lim - tcp_data_len)) {
-			LIST_REMOVE(le, next);
+			tcp_lro_active_remove(le);
 			tcp_lro_flush(lc, le);
 			break;
 		}
@@ -629,7 +643,7 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m
 		if (__predict_false(seq != le->next_seq ||
 		    (tcp_data_len == 0 && le->ack_seq == th->th_ack))) {
 			/* Out of order packet or duplicate ACK. */
-			LIST_REMOVE(le, next);
+			tcp_lro_active_remove(le);
 			tcp_lro_flush(lc, le);
 			return (TCP_LRO_CANNOT);
 		}
@@ -662,7 +676,7 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m
 			 * be further delayed.
 			 */
 			if (le->append_cnt >= lc->lro_ackcnt_lim) {
-				LIST_REMOVE(le, next);
+				tcp_lro_active_remove(le);
 				tcp_lro_flush(lc, le);
 			}
 			return (0);
@@ -686,7 +700,7 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m
 		 * overflow, pro-actively flush now.
 		 */
 		if (le->p_len > (lc->lro_length_lim - lc->ifp->if_mtu)) {
-			LIST_REMOVE(le, next);
+			tcp_lro_active_remove(le);
 			tcp_lro_flush(lc, le);
 		} else
 			getmicrotime(&le->mtime);
@@ -701,7 +715,7 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m
 	/* Start a new segment chain. */
 	le = LIST_FIRST(&lc->lro_free);
 	LIST_REMOVE(le, next);
-	LIST_INSERT_HEAD(&lc->lro_active, le, next);
+	tcp_lro_active_insert(lc, le);
 	getmicrotime(&le->mtime);
 
 	/* Start filling in details. */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605030813.u438DPTe048180>