svn commit: r274376 - in head/sys: net netinet

Hans Petter Selasky hselasky at FreeBSD.org
Tue Nov 11 12:06:01 UTC 2014


Author: hselasky
Date: Tue Nov 11 12:05:59 2014
New Revision: 274376
URL: https://svnweb.freebsd.org/changeset/base/274376

Log:
  Fix some minor TSO issues:
  - Improve description of TSO limits.
  - Remove a not needed KASSERT()
  - Remove some not needed variable casts.
  
  Sponsored by:	Mellanox Technologies
  Discussed with:	lstewart @
  MFC after:	1 week

Modified:
  head/sys/net/if.c
  head/sys/net/if_var.h
  head/sys/netinet/tcp_output.c

Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c	Tue Nov 11 11:06:10 2014	(r274375)
+++ head/sys/net/if.c	Tue Nov 11 12:05:59 2014	(r274376)
@@ -717,13 +717,6 @@ if_attach_internal(struct ifnet *ifp, in
 				    ifp->if_hw_tsomaxsegsize);
 			}
 		}
-		/*
-		 * If the "if_hw_tsomax" limit is set, check if it is
-		 * too small:
-		 */
-		KASSERT(ifp->if_hw_tsomax == 0 ||
-		    ifp->if_hw_tsomax >= (IP_MAXPACKET / 8),
-		    ("%s: if_hw_tsomax is outside of range", __func__));
 #endif
 	}
 #ifdef VIMAGE

Modified: head/sys/net/if_var.h
==============================================================================
--- head/sys/net/if_var.h	Tue Nov 11 11:06:10 2014	(r274375)
+++ head/sys/net/if_var.h	Tue Nov 11 12:05:59 2014	(r274376)
@@ -232,16 +232,24 @@ struct ifnet {
 	counter_u64_t	if_counters[IFCOUNTERS];
 
 	/* Stuff that's only temporary and doesn't belong here. */
-	u_int	if_hw_tsomax;		/* TSO total burst length
-					 * limit in bytes. A value of
-					 * zero means no limit. Have
-					 * to find a better place for
-					 * it eventually. */
 
 	/*
-	 * TSO fields for segment limits. If a field below is zero,
-	 * there is no TSO segment limit.
+	 * Network adapter TSO limits:
+	 * ===========================
+	 *
+	 * If the "if_hw_tsomax" field is zero the maximum segment
+	 * length limit does not apply. If the "if_hw_tsomaxsegcount"
+	 * or the "if_hw_tsomaxsegsize" field is zero the TSO segment
+	 * count limit does not apply. If all three fields are zero,
+	 * there is no TSO limit.
+	 *
+	 * NOTE: The TSO limits only apply to the data payload part of
+	 * a TCP/IP packet. That means there is no need to subtract
+	 * space for ethernet-, vlan-, IP- or TCP- headers from the
+	 * TSO limits unless the hardware driver in question requires
+	 * so.
 	 */
+	u_int	if_hw_tsomax;		/* TSO maximum size in bytes */
 	u_int	if_hw_tsomaxsegcount;	/* TSO maximum segment count */
 	u_int	if_hw_tsomaxsegsize;	/* TSO maximum segment size in bytes */
 

Modified: head/sys/netinet/tcp_output.c
==============================================================================
--- head/sys/netinet/tcp_output.c	Tue Nov 11 11:06:10 2014	(r274375)
+++ head/sys/netinet/tcp_output.c	Tue Nov 11 12:05:59 2014	(r274376)
@@ -802,9 +802,9 @@ send:
 				max_len = (if_hw_tsomax - hdrlen);
 				if (max_len <= 0) {
 					len = 0;
-				} else if (len > (u_int)max_len) {
+				} else if (len > max_len) {
 					sendalot = 1;
-					len = (u_int)max_len;
+					len = max_len;
 				}
 			}
 
@@ -817,7 +817,7 @@ send:
 				max_len = 0;
 				mb = sbsndmbuf(&so->so_snd, off, &moff);
 
-				while (mb != NULL && (u_int)max_len < len) {
+				while (mb != NULL && max_len < len) {
 					u_int mlen;
 					u_int frags;
 
@@ -851,9 +851,9 @@ send:
 				}
 				if (max_len <= 0) {
 					len = 0;
-				} else if (len > (u_int)max_len) {
+				} else if (len > max_len) {
 					sendalot = 1;
-					len = (u_int)max_len;
+					len = max_len;
 				}
 			}
 
@@ -864,7 +864,7 @@ send:
 			 */
 			max_len = (tp->t_maxopd - optlen);
 			if ((off + len) < so->so_snd.sb_cc) {
-				moff = len % (u_int)max_len;
+				moff = len % max_len;
 				if (moff != 0) {
 					len -= moff;
 					sendalot = 1;
@@ -875,8 +875,8 @@ send:
 			 * In case there are too many small fragments
 			 * don't use TSO:
 			 */
-			if (len <= (u_int)max_len) {
-				len = (u_int)max_len;
+			if (len <= max_len) {
+				len = max_len;
 				sendalot = 1;
 				tso = 0;
 			}


More information about the svn-src-head mailing list