Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Aug 2015 11:25:58 -0700
From:      Sean Bruno <sbruno@freebsd.org>
To:        Rick Macklem <rmacklem@uoguelph.ca>
Cc:        current@freebsd.org
Subject:   Re: Kernel panic with fresh current, probably nfs related
Message-ID:  <55D8BEB6.7090202@freebsd.org>
In-Reply-To: <914810061.28949434.1440248260373.JavaMail.zimbra@uoguelph.ca>
References:  <20150822115519.GA79434@ymer.vnode.se> <914810061.28949434.1440248260373.JavaMail.zimbra@uoguelph.ca>

next in thread | previous in thread | raw e-mail | index | archive | help



> I'm going to guess that you're using an "em" net driver, since that is the
> only one that sets if_hw_tsomax > IP_MAXPACKET (65535) from what I can see.
> 
> Sean, EM_TSO_SIZE is defined as (65535 + sizeof(struct ether_vlan_header)),
> which makes it > IP_MAXPACKET. The value of if_hw_tsomax must be <= IP_MAXPACKET
> and I'm guessing this is what caused the above panic. (Someday it would be
> nice if TSO segments > IP_MAXPACKET could be handled, but that will take changes
> in the ip layer and router software so that a bogus ip_len field doesn't cause
> problems.)
> 
> if_hw_tsomax needs to be the maximum segment size that the driver can accept
> from IP. Since the driver adds any MAC header after accepting the TSO segment
> from the IP layer, it shouldn't include MAC header(s) in the value for if_hw_tsomax.
> (If its limit includes MAC header(s), it needs to subtract those out when setting
>  if_hw_tsomax, not add them.)
> 
> Since I am working up a patch for the value of if_hw_tsomaxsegcount, I think I'll
> add a check for > IP_MAXPACKET for if_hw_tsomax as well.
> 
> rick

Huh, ok.  You want to try something like this then?

sean


Index: if_em.h
===================================================================
--- if_em.h	(revision 286991)
+++ if_em.h	(working copy)
@@ -268,7 +268,7 @@

 #define EM_MAX_SCATTER		64
 #define EM_VFTA_SIZE		128
-#define EM_TSO_SIZE		(65535 + sizeof(struct ether_vlan_header))
+#define EM_TSO_SIZE		(65535 - sizeof(struct ether_vlan_header))
 #define EM_TSO_SEG_SIZE		4096	/* Max dma segment size */
 #define EM_MSIX_MASK		0x01F00000 /* For 82574 use */
 #define EM_MSIX_LINK		0x01000000 /* For 82574 use */
Index: if_lem.h
===================================================================
--- if_lem.h	(revision 286991)
+++ if_lem.h	(working copy)
@@ -238,7 +238,7 @@

 #define EM_MAX_SCATTER		64
 #define EM_VFTA_SIZE		128
-#define EM_TSO_SIZE		(65535 + sizeof(struct ether_vlan_header))
+#define EM_TSO_SIZE		(65535 - sizeof(struct ether_vlan_header))
 #define EM_TSO_SEG_SIZE		4096	/* Max dma segment size */
 #define EM_MSIX_MASK		0x01F00000 /* For 82574 use */
 #define ETH_ZLEN		60




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