summaryrefslogtreecommitdiffstats
path: root/sys/dev/em
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2006-09-01 16:08:36 +0000
committerjhb <jhb@FreeBSD.org>2006-09-01 16:08:36 +0000
commitd8270676efcc05ec63aa80b7ee698b5f5aea7515 (patch)
tree0e3b2d5664145312a99e19f040383dae054a57bc /sys/dev/em
parentd7c02001bccf5a7d4e1b5398260b4a7bd29e14e6 (diff)
downloadFreeBSD-src-d8270676efcc05ec63aa80b7ee698b5f5aea7515.zip
FreeBSD-src-d8270676efcc05ec63aa80b7ee698b5f5aea7515.tar.gz
Add locking to the ifmedia callouts.
Reviewed by: jvogel, yongari
Diffstat (limited to 'sys/dev/em')
-rw-r--r--sys/dev/em/if_em.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/dev/em/if_em.c b/sys/dev/em/if_em.c
index 27a8e6a..8d9a1d3 100644
--- a/sys/dev/em/if_em.c
+++ b/sys/dev/em/if_em.c
@@ -1321,14 +1321,17 @@ em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
INIT_DEBUGOUT("em_media_status: begin");
+ EM_LOCK(adapter);
em_check_for_link(&adapter->hw);
em_update_link_status(adapter);
ifmr->ifm_status = IFM_AVALID;
ifmr->ifm_active = IFM_ETHER;
- if (!adapter->link_active)
+ if (!adapter->link_active) {
+ EM_UNLOCK(adapter);
return;
+ }
ifmr->ifm_status |= IFM_ACTIVE;
@@ -1355,6 +1358,7 @@ em_media_status(struct ifnet *ifp, struct ifmediareq *ifmr)
else
ifmr->ifm_active |= IFM_HDX;
}
+ EM_UNLOCK(adapter);
}
/*********************************************************************
@@ -1376,6 +1380,7 @@ em_media_change(struct ifnet *ifp)
if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
return (EINVAL);
+ EM_LOCK(adapter);
switch (IFM_SUBTYPE(ifm->ifm_media)) {
case IFM_AUTO:
adapter->hw.autoneg = DO_AUTO_NEG;
@@ -1412,7 +1417,8 @@ em_media_change(struct ifnet *ifp)
*/
adapter->hw.phy_reset_disable = FALSE;
- em_init(adapter);
+ em_init_locked(adapter);
+ EM_UNLOCK(adapter);
return (0);
}
OpenPOWER on IntegriCloud