From 34de220dcf5086bc0c13420d390d6eeb026d6c66 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Fri, 1 Sep 2006 16:08:36 +0000 Subject: [PATCH] Add locking to the ifmedia callouts. Reviewed by: jvogel, yongari --- sys/dev/em/if_em.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/dev/em/if_em.c b/sys/dev/em/if_em.c index 27a8e6a6cc73..8d9a1d3b98a3 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); }