> I have a lot of supermicro motherboards and the newest ones have igb > chipsets; they've been quite a headache with respect to FreeBSD 8. I'm > running 8.2-RELEASE but have upgraded parts of my kernel to 8-RELENG (as > of a few months ago). Some of them work ok while others panic on bootup. > Upgrading to newer versions of the intel igb code fixes some but breaks > others. It's been frustrating. > > While working on this today, I saw two different kernel panics: > > Could not setup receive structures > m_getzone: m_getjcl: invalid cluster type
I fixed this awhile back in my local sources. A 12 core Supermicro MB system I'm building here was hitting the bug 100% of the time during startup. Patch attached. -DG Dr. David G. Lawrence President Download Technologies, Inc. - http://www.downloadtech.com - (866) 399 8500 Pave the road of life with opportunities. Index: if_igb.c =================================================================== RCS file: /home/ncvs/src/sys/dev/e1000/if_igb.c,v retrieving revision 1.21.2.20 diff -c -r1.21.2.20 if_igb.c *** if_igb.c 29 Jun 2011 16:16:59 -0000 1.21.2.20 --- if_igb.c 22 Sep 2011 10:04:31 -0000 *************** *** 1278,1286 **** /* Don't lose promiscuous settings */ igb_set_promisc(adapter); - ifp->if_drv_flags |= IFF_DRV_RUNNING; - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; - callout_reset(&adapter->timer, hz, igb_local_timer, adapter); e1000_clear_hw_cntrs_base_generic(&adapter->hw); --- 1278,1283 ---- *************** *** 1308,1313 **** --- 1305,1313 ---- /* Don't reset the phy next time init gets called */ adapter->hw.phy.reset_disable = TRUE; + + ifp->if_drv_flags |= IFF_DRV_RUNNING; + ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; } static void *************** *** 1490,1501 **** E1000_WRITE_REG(&adapter->hw, E1000_EIMC, que->eims); ++que->irqs; IGB_TX_LOCK(txr); more_tx = igb_txeof(txr); IGB_TX_UNLOCK(txr); - more_rx = igb_rxeof(que, adapter->rx_process_limit, NULL); - if (igb_enable_aim == FALSE) goto no_calc; /* --- 1490,1505 ---- E1000_WRITE_REG(&adapter->hw, E1000_EIMC, que->eims); ++que->irqs; + if (!(adapter->ifp->if_drv_flags & IFF_DRV_RUNNING)) { + return; + } + + more_rx = igb_rxeof(que, adapter->rx_process_limit, NULL); + IGB_TX_LOCK(txr); more_tx = igb_txeof(txr); IGB_TX_UNLOCK(txr); if (igb_enable_aim == FALSE) goto no_calc; /* _______________________________________________ freebsd-stable@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-stable To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"