summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorchangqing li - Sun Microsystems - Beijing China <Changqing.Li@Sun.COM>2009-10-16 10:51:13 +0800
committerchangqing li - Sun Microsystems - Beijing China <Changqing.Li@Sun.COM>2009-10-16 10:51:13 +0800
commitec39b9cf9a38586835b89f8cc2150710071adce3 (patch)
tree493d3ac0628656ceff710ab30c9399198e143e13 /usr/src
parent47310cedf870824837b096885cca62a0f10f5ff1 (diff)
downloadillumos-gate-ec39b9cf9a38586835b89f8cc2150710071adce3.tar.gz
6881588 e1000g functions should return when e1000g_check_dma_handle() fails
6888320 e1000g emits scary mutex message on the console
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/io/e1000g/README13
-rw-r--r--usr/src/uts/common/io/e1000g/e1000_osdep.c3
-rw-r--r--usr/src/uts/common/io/e1000g/e1000g_main.c34
-rw-r--r--usr/src/uts/common/io/e1000g/e1000g_rx.c5
-rw-r--r--usr/src/uts/common/io/e1000g/e1000g_stat.c8
5 files changed, 46 insertions, 17 deletions
diff --git a/usr/src/uts/common/io/e1000g/README b/usr/src/uts/common/io/e1000g/README
index e9a494b158..bb3f892d29 100644
--- a/usr/src/uts/common/io/e1000g/README
+++ b/usr/src/uts/common/io/e1000g/README
@@ -685,7 +685,7 @@ Notes on packaging:
5.3.12
====
- This version has the following fix:
+ This version has the following fixes:
6846262 T2000 fma shows fault.io.pciex.device-interr in snv_115
6870404 e1000g_reset can call e1000g_start after releasing dma resources
@@ -697,13 +697,20 @@ Notes on packaging:
5.3.14
====
- This version has the following fix:
+ This version has the following fixes:
6820747 kstat output incorrect for MMF version of e1000g making it impossible to troubleshoot
6847888 HW initialization updates for 82541 and 82547 chips
5.3.15
======
- This version has the following fix:
+ This version has the following fixes:
6797885 need to add support for network device (8086,10ea) in a new Intel system
6803799 need to add network device support (8086,10ef) for a new Intel system
6808388 e1000g inteface experience packet lost when switch between joining and leaving a multicast stream
+
+5.3.16
+======
+ This version has the following fixes:
+ 6881588 e1000g functions should return when e1000g_check_dma_handle() fails
+ 6888320 e1000g emits scary mutex message on the console
+
diff --git a/usr/src/uts/common/io/e1000g/e1000_osdep.c b/usr/src/uts/common/io/e1000g/e1000_osdep.c
index 71f46afcf3..12ae161a1d 100644
--- a/usr/src/uts/common/io/e1000g/e1000_osdep.c
+++ b/usr/src/uts/common/io/e1000g/e1000_osdep.c
@@ -20,7 +20,7 @@
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms of the CDDLv1.
+ * Use is subject to license terms.
*/
#include "e1000_osdep.h"
@@ -129,7 +129,6 @@ e1000_destroy_hw_mutex(struct e1000_hw *hw)
case e1000_ich9lan:
case e1000_ich10lan:
case e1000_pchlan:
- cmn_err(CE_WARN, "destroy mutexes in e1000_destroy_hw_mutex\n");
dev_spec = &hw->dev_spec.ich8lan;
E1000_MUTEX_DESTROY(&dev_spec->nvm_mutex);
E1000_MUTEX_DESTROY(&dev_spec->swflag_mutex);
diff --git a/usr/src/uts/common/io/e1000g/e1000g_main.c b/usr/src/uts/common/io/e1000g/e1000g_main.c
index ce02465fe3..5dbce69bd2 100644
--- a/usr/src/uts/common/io/e1000g/e1000g_main.c
+++ b/usr/src/uts/common/io/e1000g/e1000g_main.c
@@ -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.15";
+static char e1000g_version[] = "Driver Ver. 5.3.16";
/*
* Proto types for DDI entry points
@@ -2091,8 +2091,10 @@ e1000g_intr_pciexpress(caddr_t arg)
Adapter = (struct e1000g *)(uintptr_t)arg;
icr = E1000_READ_REG(&Adapter->shared, E1000_ICR);
- if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK)
+ if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED);
+ return (DDI_INTR_CLAIMED);
+ }
if (icr & E1000_ICR_INT_ASSERTED) {
/*
@@ -2127,8 +2129,10 @@ e1000g_intr(caddr_t arg)
Adapter = (struct e1000g *)(uintptr_t)arg;
icr = E1000_READ_REG(&Adapter->shared, E1000_ICR);
- if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK)
+ if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED);
+ return (DDI_INTR_CLAIMED);
+ }
if (icr) {
/*
@@ -3318,9 +3322,11 @@ e1000g_set_priv_prop(struct e1000g *Adapter, const char *pr_name,
else
e1000g_clear_tx_interrupt(Adapter);
if (e1000g_check_acc_handle(
- Adapter->osdep.reg_handle) != DDI_FM_OK)
+ Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip,
DDI_SERVICE_DEGRADED);
+ err = EIO;
+ }
}
return (err);
}
@@ -3337,9 +3343,11 @@ e1000g_set_priv_prop(struct e1000g *Adapter, const char *pr_name,
Adapter->tx_intr_delay = (uint32_t)result;
E1000_WRITE_REG(hw, E1000_TIDV, Adapter->tx_intr_delay);
if (e1000g_check_acc_handle(
- Adapter->osdep.reg_handle) != DDI_FM_OK)
+ Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip,
DDI_SERVICE_DEGRADED);
+ err = EIO;
+ }
}
return (err);
}
@@ -3357,9 +3365,11 @@ e1000g_set_priv_prop(struct e1000g *Adapter, const char *pr_name,
E1000_WRITE_REG(hw, E1000_TADV,
Adapter->tx_intr_abs_delay);
if (e1000g_check_acc_handle(
- Adapter->osdep.reg_handle) != DDI_FM_OK)
+ Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip,
DDI_SERVICE_DEGRADED);
+ err = EIO;
+ }
}
return (err);
}
@@ -3402,9 +3412,11 @@ e1000g_set_priv_prop(struct e1000g *Adapter, const char *pr_name,
Adapter->rx_intr_delay = (uint32_t)result;
E1000_WRITE_REG(hw, E1000_RDTR, Adapter->rx_intr_delay);
if (e1000g_check_acc_handle(
- Adapter->osdep.reg_handle) != DDI_FM_OK)
+ Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip,
DDI_SERVICE_DEGRADED);
+ err = EIO;
+ }
}
return (err);
}
@@ -3422,9 +3434,11 @@ e1000g_set_priv_prop(struct e1000g *Adapter, const char *pr_name,
E1000_WRITE_REG(hw, E1000_RADV,
Adapter->rx_intr_abs_delay);
if (e1000g_check_acc_handle(
- Adapter->osdep.reg_handle) != DDI_FM_OK)
+ Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip,
DDI_SERVICE_DEGRADED);
+ err = EIO;
+ }
}
return (err);
}
@@ -3444,9 +3458,11 @@ e1000g_set_priv_prop(struct e1000g *Adapter, const char *pr_name,
E1000_WRITE_REG(hw, E1000_ITR,
Adapter->intr_throttling_rate);
if (e1000g_check_acc_handle(
- Adapter->osdep.reg_handle) != DDI_FM_OK)
+ Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip,
DDI_SERVICE_DEGRADED);
+ err = EIO;
+ }
} else
err = EINVAL;
}
diff --git a/usr/src/uts/common/io/e1000g/e1000g_rx.c b/usr/src/uts/common/io/e1000g/e1000g_rx.c
index 403073f801..c2ed590061 100644
--- a/usr/src/uts/common/io/e1000g/e1000g_rx.c
+++ b/usr/src/uts/common/io/e1000g/e1000g_rx.c
@@ -441,6 +441,7 @@ e1000g_receive(e1000g_rx_ring_t *rx_ring, mblk_t **tail, uint_t sz)
if (e1000g_check_dma_handle(rx_data->rbd_dma_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_DEGRADED);
Adapter->e1000g_state |= E1000G_ERROR;
+ return (NULL);
}
current_desc = rx_data->rbd_next;
@@ -449,7 +450,7 @@ e1000g_receive(e1000g_rx_ring_t *rx_ring, mblk_t **tail, uint_t sz)
* don't send anything up. just clear the RFD
*/
E1000G_DEBUG_STAT(rx_ring->stat_none);
- return (ret_mp);
+ return (NULL);
}
max_size = Adapter->max_frame_size - ETHERFCSL - VLAN_TAGSZ;
@@ -512,6 +513,8 @@ e1000g_receive(e1000g_rx_ring_t *rx_ring, mblk_t **tail, uint_t sz)
ddi_fm_service_impact(Adapter->dip,
DDI_SERVICE_DEGRADED);
Adapter->e1000g_state |= E1000G_ERROR;
+
+ goto rx_drop;
}
accept_frame = (current_desc->errors == 0) ||
diff --git a/usr/src/uts/common/io/e1000g/e1000g_stat.c b/usr/src/uts/common/io/e1000g/e1000g_stat.c
index 4a8b2784f0..2d3447b058 100644
--- a/usr/src/uts/common/io/e1000g/e1000g_stat.c
+++ b/usr/src/uts/common/io/e1000g/e1000g_stat.c
@@ -307,8 +307,10 @@ e1000g_update_stats(kstat_t *ksp, int rw)
rw_exit(&Adapter->chip_lock);
- if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK)
+ if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_UNAFFECTED);
+ return (EIO);
+ }
return (0);
}
@@ -690,8 +692,10 @@ e1000g_m_stat(void *arg, uint_t stat, uint64_t *val)
rw_exit(&Adapter->chip_lock);
- if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK)
+ if (e1000g_check_acc_handle(Adapter->osdep.reg_handle) != DDI_FM_OK) {
ddi_fm_service_impact(Adapter->dip, DDI_SERVICE_UNAFFECTED);
+ return (EIO);
+ }
return (0);
}