summaryrefslogtreecommitdiff
path: root/sys/dev/jme
diff options
context:
space:
mode:
authorPyun YongHyeon <yongari@FreeBSD.org>2009-09-28 19:33:52 +0000
committerPyun YongHyeon <yongari@FreeBSD.org>2009-09-28 19:33:52 +0000
commit32f8942a2177ae0aeae87bcc9f29aa81eaea77ee (patch)
treec407e664d6d3e3a0227faeb5636b7aa819ea7daa /sys/dev/jme
parentc408f06b5e3187a2b17e2e4b5b4f34216af9936a (diff)
Notes
Diffstat (limited to 'sys/dev/jme')
-rw-r--r--sys/dev/jme/if_jme.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/sys/dev/jme/if_jme.c b/sys/dev/jme/if_jme.c
index 86d9c57ee015..c2e64f02f8cc 100644
--- a/sys/dev/jme/if_jme.c
+++ b/sys/dev/jme/if_jme.c
@@ -306,6 +306,10 @@ jme_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
sc = ifp->if_softc;
JME_LOCK(sc);
+ if ((ifp->if_flags & IFF_UP) == 0) {
+ JME_UNLOCK(sc);
+ return;
+ }
mii = device_get_softc(sc->jme_miibus);
mii_pollstat(mii);
@@ -1585,8 +1589,10 @@ jme_resume(device_t dev)
pmc + PCIR_POWER_STATUS, pmstat, 2);
}
ifp = sc->jme_ifp;
- if ((ifp->if_flags & IFF_UP) != 0)
+ if ((ifp->if_flags & IFF_UP) != 0) {
+ ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
jme_init_locked(sc);
+ }
JME_UNLOCK(sc);
@@ -1861,6 +1867,7 @@ jme_watchdog(struct jme_softc *sc)
if ((sc->jme_flags & JME_FLAG_LINK) == 0) {
if_printf(sc->jme_ifp, "watchdog timeout (missed link)\n");
ifp->if_oerrors++;
+ ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
jme_init_locked(sc);
return;
}
@@ -1875,6 +1882,7 @@ jme_watchdog(struct jme_softc *sc)
if_printf(sc->jme_ifp, "watchdog timeout\n");
ifp->if_oerrors++;
+ ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
jme_init_locked(sc);
if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
taskqueue_enqueue(sc->jme_tq, &sc->jme_tx_task);
@@ -1917,8 +1925,10 @@ jme_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
VLAN_CAPABILITIES(ifp);
}
ifp->if_mtu = ifr->ifr_mtu;
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+ if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
+ ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
jme_init_locked(sc);
+ }
JME_UNLOCK(sc);
}
break;
@@ -2642,6 +2652,8 @@ jme_init_locked(struct jme_softc *sc)
ifp = sc->jme_ifp;
mii = device_get_softc(sc->jme_miibus);
+ if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+ return;
/*
* Cancel any pending I/O.
*/