Author: yongari
Date: Wed Sep  1 22:08:23 2010
New Revision: 212119
URL: http://svn.freebsd.org/changeset/base/212119

Log:
  Do not reinitialize controller whenever promiscuous mode or
  allmulti is toggled. Controller does not require reinitialization.
  This removes unnecessary controller reinitialization whenever
  tcpdump is used.
  While I'm here remove unnecessary variable reinitialization.

Modified:
  head/sys/dev/sis/if_sis.c
  head/sys/dev/sis/if_sisreg.h

Modified: head/sys/dev/sis/if_sis.c
==============================================================================
--- head/sys/dev/sis/if_sis.c   Wed Sep  1 21:51:29 2010        (r212118)
+++ head/sys/dev/sis/if_sis.c   Wed Sep  1 22:08:23 2010        (r212119)
@@ -2185,10 +2185,19 @@ sis_ioctl(struct ifnet *ifp, u_long comm
        case SIOCSIFFLAGS:
                SIS_LOCK(sc);
                if (ifp->if_flags & IFF_UP) {
-                       sis_initl(sc);
+                       if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
+                           ((ifp->if_flags ^ sc->sis_if_flags) &
+                           (IFF_PROMISC | IFF_ALLMULTI)) != 0) {
+                               if (sc->sis_type == SIS_TYPE_83815)
+                                       sis_setmulti_ns(sc);
+                               else
+                                       sis_setmulti_sis(sc);
+                       } else
+                               sis_initl(sc);
                } else if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
                        sis_stop(sc);
                }
+               sc->sis_if_flags = ifp->if_flags;
                SIS_UNLOCK(sc);
                error = 0;
                break;
@@ -2200,7 +2209,6 @@ sis_ioctl(struct ifnet *ifp, u_long comm
                else
                        sis_setmulti_sis(sc);
                SIS_UNLOCK(sc);
-               error = 0;
                break;
        case SIOCGIFMEDIA:
        case SIOCSIFMEDIA:

Modified: head/sys/dev/sis/if_sisreg.h
==============================================================================
--- head/sys/dev/sis/if_sisreg.h        Wed Sep  1 21:51:29 2010        
(r212118)
+++ head/sys/dev/sis/if_sisreg.h        Wed Sep  1 22:08:23 2010        
(r212119)
@@ -471,6 +471,7 @@ struct sis_softc {
        bus_addr_t              sis_tx_paddr;
        struct callout          sis_stat_ch;
        int                     sis_watchdog_timer;
+       int                     sis_if_flags;
 #ifdef DEVICE_POLLING
        int                     rxcycles;
 #endif
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to