svn commit: r204370 - head/sys/dev/bce

Pyun YongHyeon yongari at FreeBSD.org
Fri Feb 26 20:26:17 UTC 2010


Author: yongari
Date: Fri Feb 26 20:26:17 2010
New Revision: 204370
URL: http://svn.freebsd.org/changeset/base/204370

Log:
  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

Modified:
  head/sys/dev/bce/if_bce.c

Modified: head/sys/dev/bce/if_bce.c
==============================================================================
--- head/sys/dev/bce/if_bce.c	Fri Feb 26 20:25:30 2010	(r204369)
+++ head/sys/dev/bce/if_bce.c	Fri Feb 26 20:26:17 2010	(r204370)
@@ -6989,7 +6989,7 @@ bce_ioctl(struct ifnet *ifp, u_long comm
 	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 comm
 
 			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 comm
 			}
 #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 comm
 			}
 
 			BCE_UNLOCK(sc);
-			error = 0;
 
 			break;
 
@@ -7072,10 +7081,8 @@ bce_ioctl(struct ifnet *ifp, u_long comm
 			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;


More information about the svn-src-all mailing list