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