Panic during kernel booting on HP Proliant DL180G6 and latest STABLE

Jeremy Chadwick freebsd at jdc.parodius.com
Thu Sep 22 10:27:36 UTC 2011


On Thu, Sep 22, 2011 at 03:11:56AM -0700, David G Lawrence wrote:
> > 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;
>   	/*

CC'ing Jack Vogel.

Jack, any insights with regards to this patch?  This also touches on
what Adrian was mentioning as well, at least to some degree.

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                   Mountain View, CA, US |
| Making life hard for others since 1977.               PGP 4BD6C0CB |



More information about the freebsd-stable mailing list