kern/172113: [panic] [igb] [patch] 9.1-RC1/amd64 panices in igb(4):
m_getjcl: invalid cluster type
Eugene Grosbein
egrosbein at rdtc.ru
Thu Sep 27 11:10:11 UTC 2012
>Number: 172113
>Category: kern
>Synopsis: [panic] [igb] [patch] 9.1-RC1/amd64 panices in igb(4): m_getjcl: invalid cluster type
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Sep 27 11:10:09 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Eugene Grosbein
>Release: FreeBSD 9.1-RC1 amd64
>Organization:
RDTC JSC
>Environment:
System: FreeBSD 9.1-RC1
>Description:
We have got SuperMicro-based server (X8DTU-6+ motherboard),
with CPU having 12 cores (with hyperthreadng that's 24 CPUs).
We downloaded 9.1-RC1 installation CD and tried to boot it.
It panices during igb(4) driver init:
http://www.grosbein.net/img/crash-91rc.png
This is 100% repeatable.
>How-To-Repeat:
See above.
>Fix:
Workaround is to disable MSI-X in /boot/loader.conf:
hw.pci.enable_msix=0
This allows us to boot installation CD and install the system.
I've found this problem is pretty old and should have been fixed
over a year ago in 9.0 but it wasn't.
I've found patch by David G. Lawrence in that thread:
http://lists.freebsd.org/pipermail/freebsd-stable/2011-September/063963.html
The patch needed some corrections to be applied to 9.1-RC1,
so I've corrected it and it solved the problem.
Here is version for 9.1-RC1:
--- sys/dev/e1000/if_igb.c.orig 2012-09-27 14:57:22.000000000 +0700
+++ sys/dev/e1000/if_igb.c 2012-09-27 15:04:35.000000000 +0700
@@ -1328,9 +1328,6 @@
/* 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);
@@ -1356,6 +1353,9 @@
/* Set Energy Efficient Ethernet */
if (adapter->hw.phy.media_type == e1000_media_type_copper)
e1000_set_eee_i350(&adapter->hw);
+
+ ifp->if_drv_flags |= IFF_DRV_RUNNING;
+ ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
}
static void
@@ -1570,6 +1570,11 @@
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);
igb_txeof(txr);
#if __FreeBSD_version >= 800000
@@ -1583,8 +1588,6 @@
#endif
IGB_TX_UNLOCK(txr);
- more_rx = igb_rxeof(que, adapter->rx_process_limit, NULL);
-
if (adapter->enable_aim == FALSE)
goto no_calc;
/*
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list