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-all
mailing list