summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2010-09-01 22:08:23 +0000
committeryongari <yongari@FreeBSD.org>2010-09-01 22:08:23 +0000
commit7e669b1d632837c794787a61a9d7838a896b7a7e (patch)
treef30fdedffe4d55019b413df23a528855238c9296
parent481f78e425c4eed7a41193f93aaa8e4af1aa3274 (diff)
downloadFreeBSD-src-7e669b1d632837c794787a61a9d7838a896b7a7e.zip
FreeBSD-src-7e669b1d632837c794787a61a9d7838a896b7a7e.tar.gz
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.
-rw-r--r--sys/dev/sis/if_sis.c12
-rw-r--r--sys/dev/sis/if_sisreg.h1
2 files changed, 11 insertions, 2 deletions
diff --git a/sys/dev/sis/if_sis.c b/sys/dev/sis/if_sis.c
index 3a8b352..cecffe2 100644
--- a/sys/dev/sis/if_sis.c
+++ b/sys/dev/sis/if_sis.c
@@ -2185,10 +2185,19 @@ sis_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
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 command, caddr_t data)
else
sis_setmulti_sis(sc);
SIS_UNLOCK(sc);
- error = 0;
break;
case SIOCGIFMEDIA:
case SIOCSIFMEDIA:
diff --git a/sys/dev/sis/if_sisreg.h b/sys/dev/sis/if_sisreg.h
index 9e08a1b..5bcdcae 100644
--- a/sys/dev/sis/if_sisreg.h
+++ b/sys/dev/sis/if_sisreg.h
@@ -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
OpenPOWER on IntegriCloud