changeset 10434:7a008d5633fc

6846262 T2000 fma shows fault.io.pciex.device-interr in snv_115 6870404 e1000g_reset can call e1000g_start after releasing dma resources
author guoqing zhu - Sun Microsystems - Beijing China <Guoqing.Zhu@Sun.COM>
date Tue, 01 Sep 2009 17:16:01 +0800
parents 31c72988d7f4
children a8086b52d48a
files usr/src/uts/common/io/e1000g/README usr/src/uts/common/io/e1000g/e1000g_main.c usr/src/uts/common/io/e1000g/e1000g_tx.c
diffstat 3 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/e1000g/README	Mon Aug 31 23:25:09 2009 -0700
+++ b/usr/src/uts/common/io/e1000g/README	Tue Sep 01 17:16:01 2009 +0800
@@ -682,3 +682,9 @@
 ====
   This version has the following fix:
    6848586 rw_enter()/rw_exit() could be called on uninitialized rw lock
+
+5.3.12
+====
+   This version has the following fix:
+    6846262 T2000 fma shows fault.io.pciex.device-interr in snv_115
+    6870404 e1000g_reset can call e1000g_start after releasing dma resources
--- a/usr/src/uts/common/io/e1000g/e1000g_main.c	Mon Aug 31 23:25:09 2009 -0700
+++ b/usr/src/uts/common/io/e1000g/e1000g_main.c	Tue Sep 01 17:16:01 2009 +0800
@@ -46,7 +46,7 @@
 
 static char ident[] = "Intel PRO/1000 Ethernet";
 static char e1000g_string[] = "Intel(R) PRO/1000 Network Connection";
-static char e1000g_version[] = "Driver Ver. 5.3.11";
+static char e1000g_version[] = "Driver Ver. 5.3.12";
 
 /*
  * Proto types for DDI entry points
@@ -1965,6 +1965,11 @@
 
 	rw_enter(&Adapter->chip_lock, RW_WRITER);
 
+	if (!(Adapter->e1000g_state & E1000G_STARTED)) {
+		rw_exit(&Adapter->chip_lock);
+		return (B_TRUE);
+	}
+
 	e1000g_stop(Adapter, B_FALSE);
 
 	if (e1000g_start(Adapter, B_FALSE) != DDI_SUCCESS) {
--- a/usr/src/uts/common/io/e1000g/e1000g_tx.c	Mon Aug 31 23:25:09 2009 -0700
+++ b/usr/src/uts/common/io/e1000g/e1000g_tx.c	Tue Sep 01 17:16:01 2009 +0800
@@ -1053,10 +1053,13 @@
 	if (desc_count == 0) {
 		E1000G_DEBUG_STAT(tx_ring->stat_recycle_none);
 		/*
-		 * If the packet hasn't been sent out for seconds,
+		 * If the packet hasn't been sent out for seconds and
+		 * the transmitter is not under paused flowctrl condition,
 		 * the transmitter is considered to be stalled.
 		 */
-		if (delta > Adapter->stall_threshold) {
+		if ((delta > Adapter->stall_threshold) &&
+		    !(E1000_READ_REG(&Adapter->shared,
+		    E1000_STATUS) & E1000_STATUS_TXOFF)) {
 			Adapter->stall_flag = B_TRUE;
 		}
 		return (0);