> 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"

Reply via email to