summaryrefslogtreecommitdiffstats
path: root/sys/dev/bce
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2010-02-26 20:26:17 +0000
committeryongari <yongari@FreeBSD.org>2010-02-26 20:26:17 +0000
commitc08d71acc77a9b5828d94d12fcd7145a33c2f2ac (patch)
tree0b3661096c8cfd095ff016289a9f61ef5d0b4ea4 /sys/dev/bce
parentce9f29768bfd25b826f77bb33e2c43dee3b7ede4 (diff)
downloadFreeBSD-src-c08d71acc77a9b5828d94d12fcd7145a33c2f2ac.zip
FreeBSD-src-c08d71acc77a9b5828d94d12fcd7145a33c2f2ac.tar.gz
Make sure to stop controller first before changing MTU. And if
interface is not running don't initialize controller. While here remove unnecessary update of error variable. Reviewed by: davidch
Diffstat (limited to 'sys/dev/bce')
-rw-r--r--sys/dev/bce/if_bce.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c
index 268c632..d5013d1 100644
--- a/sys/dev/bce/if_bce.c
+++ b/sys/dev/bce/if_bce.c
@@ -6989,7 +6989,7 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
struct bce_softc *sc = ifp->if_softc;
struct ifreq *ifr = (struct ifreq *) data;
struct mii_data *mii;
- int mask, error = 0;
+ int mask, error = 0, reinit;
DBENTER(BCE_VERBOSE_MISC);
@@ -7010,7 +7010,16 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
BCE_LOCK(sc);
ifp->if_mtu = ifr->ifr_mtu;
- ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+ reinit = 0;
+ if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+ /*
+ * Because allocation size is used in RX
+ * buffer allocation, stop controller if
+ * it is already running.
+ */
+ bce_stop(sc);
+ reinit = 1;
+ }
#ifdef BCE_JUMBO_HDRSPLIT
/* No buffer allocation size changes are necessary. */
#else
@@ -7028,7 +7037,8 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
}
#endif
- bce_init_locked(sc);
+ if (reinit != 0)
+ bce_init_locked(sc);
BCE_UNLOCK(sc);
break;
@@ -7062,7 +7072,6 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
}
BCE_UNLOCK(sc);
- error = 0;
break;
@@ -7072,10 +7081,8 @@ bce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
DBPRINT(sc, BCE_VERBOSE_MISC, "Received SIOCADDMULTI/SIOCDELMULTI\n");
BCE_LOCK(sc);
- if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+ if (ifp->if_drv_flags & IFF_DRV_RUNNING)
bce_set_rx_mode(sc);
- error = 0;
- }
BCE_UNLOCK(sc);
break;
OpenPOWER on IntegriCloud