Panic during kernel booting on HP Proliant DL180G6 and latest STABLE

Vogel, Jack jack.vogel at intel.com
Thu Sep 22 17:59:10 UTC 2011


-----Original Message-----
From: Jeremy Chadwick [mailto:freebsd at jdc.parodius.com] 
Sent: Thursday, September 22, 2011 3:28 AM
To: David G Lawrence
Cc: Craig Leres; freebsd-stable at freebsd.org; John Baldwin; Vogel, Jack
Subject: Re: Panic during kernel booting on HP Proliant DL180G6 and latest STABLE

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.



I have a slight modification to John's earlier changes, namely, it masks the full EIMC register when setup to use MSIX, I'm thinking this might be why the earlier patch failed?  The code in this latest email is something that I would not want to use if possible, it's just trying to avoid the problem.  Please test with this change instead.

Regards,

Jack

-------------- next part --------------
A non-text attachment was scrubbed...
Name: igb-irq.patch
Type: application/octet-stream
Size: 1791 bytes
Desc: igb-irq.patch
Url : http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20110922/a989201d/igb-irq.obj


More information about the freebsd-stable mailing list