Author: yongari
Date: Fri Oct  8 19:32:39 2010
New Revision: 213605
URL: http://svn.freebsd.org/changeset/base/213605

Log:
  MFC r212972,21300:
  r212972:
    Remove unnecessary controller reinitialization.
  
    PR: kern/87506
  
  r213000:
    Fix build breakage introduced in r212972.

Modified:
  stable/8/sys/dev/stge/if_stge.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/dev/stge/if_stge.c
==============================================================================
--- stable/8/sys/dev/stge/if_stge.c     Fri Oct  8 19:29:17 2010        
(r213604)
+++ stable/8/sys/dev/stge/if_stge.c     Fri Oct  8 19:32:39 2010        
(r213605)
@@ -1384,6 +1384,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);
@@ -1412,7 +1413,10 @@ stge_ioctl(struct ifnet *ifp, u_long cmd
                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;
@@ -1646,8 +1650,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);
@@ -1943,11 +1949,14 @@ stge_poll(struct ifnet *ifp, enum poll_c
                        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);
                        }
                        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);
+                               }
                        }
                }
 
@@ -2128,6 +2137,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);
 
        /*
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to