summaryrefslogtreecommitdiffstats
path: root/sys/dev/em
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2005-10-20 09:55:49 +0000
committerglebius <glebius@FreeBSD.org>2005-10-20 09:55:49 +0000
commit8f54edce784a70aa6cc0989bcc9d48659f47db8f (patch)
treebf9f729b5ba19bc1c84d38c05c63c314ee94ac46 /sys/dev/em
parentdfc409a7f8c5e92350da19dcf29892cecb411225 (diff)
downloadFreeBSD-src-8f54edce784a70aa6cc0989bcc9d48659f47db8f.zip
FreeBSD-src-8f54edce784a70aa6cc0989bcc9d48659f47db8f.tar.gz
Some more minor cleanups of em(4) driver:
- Destroy mutex in case of attach failure. [1] - Lock properly em_watchdog(). [1] - Lock properly em_sysctl_int_delay(). [1] - Remove unused global adapter linked list. - Remove unused dma_size field from struct em_dma_alloc. - Do not touch interface statistics, that must be edited only by upper layers. [1] Submitted by: yongari [1]
Diffstat (limited to 'sys/dev/em')
-rw-r--r--sys/dev/em/if_em.c43
-rw-r--r--sys/dev/em/if_em.h3
2 files changed, 10 insertions, 36 deletions
diff --git a/sys/dev/em/if_em.c b/sys/dev/em/if_em.c
index 75d3d59..5842017 100644
--- a/sys/dev/em/if_em.c
+++ b/sys/dev/em/if_em.c
@@ -45,13 +45,6 @@ POSSIBILITY OF SUCH DAMAGE.
int em_display_debug_stats = 0;
/*********************************************************************
- * Linked list of board private structures for all NICs found
- *********************************************************************/
-
-struct adapter *em_adapter_list = NULL;
-
-
-/*********************************************************************
* Driver version
*********************************************************************/
@@ -326,11 +319,6 @@ em_attach(device_t dev)
adapter->unit = device_get_unit(dev);
EM_LOCK_INIT(adapter, device_get_nameunit(dev));
- if (em_adapter_list != NULL)
- em_adapter_list->prev = adapter;
- adapter->next = em_adapter_list;
- em_adapter_list = adapter;
-
/* SYSCTL stuff */
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
@@ -511,6 +499,7 @@ err_rx_desc:
err_tx_desc:
err_pci:
em_free_pci_resources(adapter);
+ EM_LOCK_DESTROY(adapter);
return(error);
}
@@ -561,14 +550,6 @@ em_detach(device_t dev)
adapter->rx_desc_base = NULL;
}
- /* Remove from the adapter list */
- if (em_adapter_list == adapter)
- em_adapter_list = adapter->next;
- if (adapter->next != NULL)
- adapter->next->prev = adapter->prev;
- if (adapter->prev != NULL)
- adapter->prev->next = adapter->next;
-
EM_LOCK_DESTROY(adapter);
return(0);
@@ -786,11 +767,13 @@ em_watchdog(struct ifnet *ifp)
struct adapter * adapter;
adapter = ifp->if_softc;
+ EM_LOCK(adapter);
/* If we are in this routine because of pause frames, then
* don't reset the hardware.
*/
if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF) {
ifp->if_timer = EM_TX_TIMEOUT;
+ EM_UNLOCK(adapter);
return;
}
@@ -798,11 +781,10 @@ em_watchdog(struct ifnet *ifp)
printf("em%d: watchdog timeout -- resetting\n", adapter->unit);
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-
- em_init(adapter);
-
ifp->if_oerrors++;
- return;
+
+ em_init_locked(adapter);
+ EM_UNLOCK(adapter);
}
/*********************************************************************
@@ -2093,7 +2075,6 @@ em_dma_malloc(struct adapter *adapter, bus_size_t size,
goto fail_3;
}
- dma->dma_size = size;
return (0);
fail_3:
@@ -3193,10 +3174,6 @@ em_update_stats_counters(struct adapter *adapter)
}
ifp = adapter->ifp;
- /* Fill out the OS statistics structure */
- ifp->if_ibytes = adapter->stats.gorcl;
- ifp->if_obytes = adapter->stats.gotcl;
- ifp->if_imcasts = adapter->stats.mprc;
ifp->if_collisions = adapter->stats.colc;
/* Rx Errors */
@@ -3358,10 +3335,8 @@ em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
int error;
int usecs;
int ticks;
- int s;
info = (struct em_int_delay_info *)arg1;
- adapter = info->adapter;
usecs = info->value;
error = sysctl_handle_int(oidp, &usecs, 0, req);
if (error != 0 || req->newptr == NULL)
@@ -3370,8 +3345,10 @@ em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
return EINVAL;
info->value = usecs;
ticks = E1000_USECS_TO_TICKS(usecs);
+
+ adapter = info->adapter;
- s = splimp();
+ EM_LOCK(adapter);
regval = E1000_READ_OFFSET(&adapter->hw, info->offset);
regval = (regval & ~0xffff) | (ticks & 0xffff);
/* Handle a few special cases. */
@@ -3391,7 +3368,7 @@ em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
break;
}
E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval);
- splx(s);
+ EM_UNLOCK(adapter);
return 0;
}
diff --git a/sys/dev/em/if_em.h b/sys/dev/em/if_em.h
index 82abdcc..e51d1ca 100644
--- a/sys/dev/em/if_em.h
+++ b/sys/dev/em/if_em.h
@@ -282,7 +282,6 @@ struct em_dma_alloc {
bus_dma_tag_t dma_tag;
bus_dmamap_t dma_map;
bus_dma_segment_t dma_seg;
- bus_size_t dma_size;
int dma_nseg;
};
@@ -315,8 +314,6 @@ typedef struct _DESCRIPTOR_PAIR
/* Our adapter structure */
struct adapter {
struct ifnet *ifp;
- struct adapter *next;
- struct adapter *prev;
struct em_hw hw;
/* FreeBSD operating-system-specific structures */
OpenPOWER on IntegriCloud