mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Remove unnecessary controller reinitialization.
PR: kern/87506
This commit is contained in:
parent
e9dfd82ff1
commit
fc05868abd
1 changed files with 16 additions and 3 deletions
|
|
@ -1377,6 +1377,7 @@ stge_watchdog(struct stge_softc *sc)
|
|||
ifp = sc->sc_ifp;
|
||||
if_printf(sc->sc_ifp, "device timeout\n");
|
||||
ifp->if_oerrors++;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
stge_init_locked(sc);
|
||||
if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
stge_start_locked(ifp);
|
||||
|
|
@ -1405,7 +1406,10 @@ stge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
|||
else if (ifp->if_mtu != ifr->ifr_mtu) {
|
||||
ifp->if_mtu = ifr->ifr_mtu;
|
||||
STGE_LOCK(sc);
|
||||
stge_init_locked(sc);
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
stge_init_locked(sc);
|
||||
}
|
||||
STGE_UNLOCK(sc);
|
||||
}
|
||||
break;
|
||||
|
|
@ -1639,8 +1643,10 @@ stge_intr(void *arg)
|
|||
}
|
||||
|
||||
force_init:
|
||||
if (reinit != 0)
|
||||
if (reinit != 0) {
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
stge_init_locked(sc);
|
||||
}
|
||||
|
||||
/* Re-enable interrupts. */
|
||||
CSR_WRITE_2(sc, STGE_IntEnable, sc->sc_IntEnable);
|
||||
|
|
@ -1936,11 +1942,16 @@ stge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
|
|||
if ((status & IS_HostError) != 0) {
|
||||
device_printf(sc->sc_dev,
|
||||
"Host interface error, resetting...\n");
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
stge_init_locked(sc);
|
||||
break;
|
||||
}
|
||||
if ((status & IS_TxComplete) != 0) {
|
||||
if (stge_tx_error(sc) != 0)
|
||||
if (stge_tx_error(sc) != 0) {
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
stge_init_locked(sc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2121,6 +2132,8 @@ stge_init_locked(struct stge_softc *sc)
|
|||
STGE_LOCK_ASSERT(sc);
|
||||
|
||||
ifp = sc->sc_ifp;
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
|
||||
return;
|
||||
mii = device_get_softc(sc->sc_miibus);
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue