Sporadic 9.0-RC2 boot-time panic

Mike Andrews mandrews at bit0.com
Tue Nov 29 20:28:23 UTC 2011


On 11/29/2011 10:50 AM, John Baldwin wrote:
> On Monday, November 28, 2011 5:37:27 pm Mike Andrews wrote:
>> *Sometimes* when booting 9.0-RC2 on *some* of my machines, I'll get one of
>> the following two panics during multiuser startup, usually while running
>> the /usr/local/etc/rc.d scripts.  (The instruction pointer is always
>> exactly one of these two, and they look fairly related.)  If after two or
>> three reboots it manages to not panic, the system will run perfectly
>> stable.
>>
>> For some probably-unrelated reason, the dump never finishes in either case.
>>
>> First panic (note em0 warning before it):
>> -----
>> em0: discard frame w/o packet header
> This is odd.  I see one bug that could possibly trigger this, but not on
> x86:

This is amd64, which of course depending on what you meant by "not on 
x86" may or may not be the same thing ;-)

This is with RELENG_9_0 sources built yesterday morning (Nov 28).  
Kernel config's reasonably close to GENERIC with many unused drivers 
removed.  Hardware is Supermicro X8STi-F -- we do have other (older) 
systems we haven't yet tried upgrading that have slightly different em 
revs -- maybe I'll try one of those today just to see if it's 82574L 
specific.

em0: <Intel(R) PRO/1000 Network Connection 7.2.3> port 0xdc00-0xdc1f mem 
0xfbce0000-0xfbcfffff,0xfbcdc000-0xfbcdffff irq 16 at device 0.0 on pci1
em0: Using MSIX interrupts with 3 vectors
em0: Ethernet address: 00:25:90:xx:xx:xx
em1: <Intel(R) PRO/1000 Network Connection 7.2.3> port 0xec00-0xec1f mem 
0xfbde0000-0xfbdfffff,0xfbddc000-0xfbddffff irq 16 at device 0.0 on pci2
em1: Using MSIX interrupts with 3 vectors
em1: Ethernet address: 00:25:90:xx:xx:xx

em0 at pci0:1:0:0: class=0x020000 card=0x10d315d9 chip=0x10d38086 rev=0x00 
hdr=0x00
     vendor     = 'Intel Corporation'
     device     = '82574L Gigabit Network Connection'
     class      = network
     subclass   = ethernet
     bar   [10] = type Memory, range 32, base 0xfbce0000, size 131072, 
enabled
     bar   [18] = type I/O Port, range 32, base 0xdc00, size 32, enabled
     bar   [1c] = type Memory, range 32, base 0xfbcdc000, size 16384, 
enabled
     cap 01[c8] = powerspec 2  supports D0 D3  current D0
     cap 05[d0] = MSI supports 1 message, 64 bit
     cap 10[e0] = PCI-Express 1 endpoint max data 128(256) link x1(x1)
     cap 11[a0] = MSI-X supports 5 messages in map 0x1c enabled
ecap 0001[100] = AER 1 0 fatal 0 non-fatal 1 corrected
em1 at pci0:2:0:0: class=0x020000 card=0x10d315d9 chip=0x10d38086 rev=0x00 
hdr=0x00
     vendor     = 'Intel Corporation'
     device     = '82574L Gigabit Network Connection'
     class      = network
     subclass   = ethernet
     bar   [10] = type Memory, range 32, base 0xfbde0000, size 131072, 
enabled
     bar   [18] = type I/O Port, range 32, base 0xec00, size 32, enabled
     bar   [1c] = type Memory, range 32, base 0xfbddc000, size 16384, 
enabled
     cap 01[c8] = powerspec 2  supports D0 D3  current D0
     cap 05[d0] = MSI supports 1 message, 64 bit
     cap 10[e0] = PCI-Express 1 endpoint max data 128(256) link x1(x1)
     cap 11[a0] = MSI-X supports 5 messages in map 0x1c enabled
ecap 0001[100] = AER 1 0 fatal 0 non-fatal 1 corrected


>
> Index: if_em.c
> ===================================================================
> --- if_em.c	(revision 228074)
> +++ if_em.c	(working copy)
> @@ -4305,8 +4305,10 @@ em_rxeof(struct rx_ring *rxr, int count, int *done
>   #ifndef __NO_STRICT_ALIGNMENT
>   			if (adapter->max_frame_size>
>   			(MCLBYTES - ETHER_ALIGN)&&
> -			    em_fixup_rx(rxr) != 0)
> -				goto skip;
> +			    em_fixup_rx(rxr) != 0) {
> +				sendmp = NULL;
> +				goto next_desc;
> +			}
>   #endif
>   			if (status&  E1000_RXD_STAT_VP) {
>   				sendmp->m_pkthdr.ether_vtag =
> @@ -4318,9 +4320,6 @@ em_rxeof(struct rx_ring *rxr, int count, int *done
>   			sendmp->m_pkthdr.flowid = rxr->msix;
>   			sendmp->m_flags |= M_FLOWID;
>   #endif
> -#ifndef __NO_STRICT_ALIGNMENT
> -skip:
> -#endif
>   			rxr->fmp = rxr->lmp = NULL;
>   		}
>   next_desc:
> @@ -4426,6 +4425,7 @@ em_fixup_rx(struct rx_ring *rxr)
>   			adapter->dropped_pkts++;
>   			m_freem(rxr->fmp);
>   			rxr->fmp = NULL;
> +			rxr->lmp = NULL;
>   			error = ENOMEM;
>   		}
>   	}
>
>


More information about the freebsd-stable mailing list