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>