diff options
author | chenlu chen - Sun Microsystems - Beijing China <Chenlu.Chen@Sun.COM> | 2010-01-20 07:47:06 +0800 |
---|---|---|
committer | chenlu chen - Sun Microsystems - Beijing China <Chenlu.Chen@Sun.COM> | 2010-01-20 07:47:06 +0800 |
commit | b227c420ebc30f71999e5e7cd26ca1b23d2cb088 (patch) | |
tree | f425aad558cbde310e48e13eccbd1c91ca2f1e5a | |
parent | c40ba10d39e7750947725517ec5639ef2d6e90e5 (diff) | |
download | illumos-gate-b227c420ebc30f71999e5e7cd26ca1b23d2cb088.tar.gz |
6917570 mutex lock leak in igb
-rw-r--r-- | usr/src/uts/common/io/igb/igb_main.c | 3 | ||||
-rw-r--r-- | usr/src/uts/common/io/igb/igb_tx.c | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/usr/src/uts/common/io/igb/igb_main.c b/usr/src/uts/common/io/igb/igb_main.c index 635930b5be..6cd7e1cb7f 100644 --- a/usr/src/uts/common/io/igb/igb_main.c +++ b/usr/src/uts/common/io/igb/igb_main.c @@ -29,7 +29,7 @@ #include "igb_sw.h" static char ident[] = "Intel 1Gb Ethernet"; -static char igb_version[] = "igb 1.1.11"; +static char igb_version[] = "igb 1.1.12"; /* * Local function protoypes @@ -3974,6 +3974,7 @@ igb_intr_legacy(void *arg1, void *arg2) icr = E1000_READ_REG(&igb->hw, E1000_ICR); if (igb_check_acc_handle(igb->osdep.reg_handle) != DDI_FM_OK) { + mutex_exit(&igb->gen_lock); ddi_fm_service_impact(igb->dip, DDI_SERVICE_DEGRADED); atomic_or_32(&igb->igb_state, IGB_ERROR); return (DDI_INTR_UNCLAIMED); diff --git a/usr/src/uts/common/io/igb/igb_tx.c b/usr/src/uts/common/io/igb/igb_tx.c index 9deef24989..b77afe1a5d 100644 --- a/usr/src/uts/common/io/igb/igb_tx.c +++ b/usr/src/uts/common/io/igb/igb_tx.c @@ -1091,6 +1091,7 @@ igb_tx_recycle_legacy(igb_tx_ring_t *tx_ring) if (igb_check_dma_handle( tx_ring->tbd_area.dma_handle) != DDI_FM_OK) { + mutex_exit(&tx_ring->recycle_lock); ddi_fm_service_impact(igb->dip, DDI_SERVICE_DEGRADED); atomic_or_32(&igb->igb_state, IGB_ERROR); return (0); @@ -1239,6 +1240,7 @@ igb_tx_recycle_head_wb(igb_tx_ring_t *tx_ring) if (igb_check_dma_handle( tx_ring->tbd_area.dma_handle) != DDI_FM_OK) { + mutex_exit(&tx_ring->recycle_lock); ddi_fm_service_impact(igb->dip, DDI_SERVICE_DEGRADED); atomic_or_32(&igb->igb_state, IGB_ERROR); return (0); |