Panic during kernel booting on HP Proliant DL180G6 and latest STABLE

David G Lawrence dg at dglawrence.com
Thu Sep 22 10:11:58 UTC 2011


> 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;
  	/*


More information about the freebsd-stable mailing list