diff options
author | changqing li - Sun Microsystems - Beijing China <Changqing.Li@Sun.COM> | 2009-10-16 10:51:13 +0800 |
---|---|---|
committer | changqing li - Sun Microsystems - Beijing China <Changqing.Li@Sun.COM> | 2009-10-16 10:51:13 +0800 |
commit | ec39b9cf9a38586835b89f8cc2150710071adce3 (patch) | |
tree | 493d3ac0628656ceff710ab30c9399198e143e13 /usr/src | |
parent | 47310cedf870824837b096885cca62a0f10f5ff1 (diff) | |
download | illumos-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/README | 13 | ||||
-rw-r--r-- | usr/src/uts/common/io/e1000g/e1000_osdep.c | 3 | ||||
-rw-r--r-- | usr/src/uts/common/io/e1000g/e1000g_main.c | 34 | ||||
-rw-r--r-- | usr/src/uts/common/io/e1000g/e1000g_rx.c | 5 | ||||
-rw-r--r-- | usr/src/uts/common/io/e1000g/e1000g_stat.c | 8 |
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); } |