Sporadic 9.0-RC2 boot-time panic

John Baldwin jhb at freebsd.org
Tue Nov 29 15:50:32 UTC 2011


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:

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;
 		}
 	}


-- 
John Baldwin


More information about the freebsd-stable mailing list