svn commit: r188238 - in stable/7/sys: . contrib/pf dev/ath/ath_hal dev/cxgb net

John Baldwin jhb at FreeBSD.org
Fri Feb 6 07:28:10 PST 2009


Author: jhb
Date: Fri Feb  6 15:28:08 2009
New Revision: 188238
URL: http://svn.freebsd.org/changeset/base/188238

Log:
  MFC: Only start the if_slowtimo timer if it is needed.

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/sys/dev/ath/ath_hal/   (props changed)
  stable/7/sys/dev/cxgb/   (props changed)
  stable/7/sys/net/if.c

Modified: stable/7/sys/net/if.c
==============================================================================
--- stable/7/sys/net/if.c	Fri Feb  6 15:27:40 2009	(r188237)
+++ stable/7/sys/net/if.c	Fri Feb  6 15:28:08 2009	(r188238)
@@ -84,6 +84,8 @@
 
 #include <security/mac/mac_framework.h>
 
+static int slowtimo_started;
+
 SYSCTL_NODE(_net, PF_LINK, link, CTLFLAG_RW, 0, "Link layers");
 SYSCTL_NODE(_net_link, 0, generic, CTLFLAG_RW, 0, "Generic link-management");
 
@@ -399,7 +401,13 @@ if_check(void *dummy __unused)
 	}
 	IFNET_RUNLOCK();
 	splx(s);
-	if_slowtimo(0);
+
+	/*
+	 * If at least one interface added during boot uses
+	 * if_watchdog then start the timer.
+	 */
+	if (slowtimo_started)
+		if_slowtimo(0);
 }
 
 /*
@@ -602,9 +610,17 @@ if_attach(struct ifnet *ifp)
 	/* Announce the interface. */
 	rt_ifannouncemsg(ifp, IFAN_ARRIVAL);
 
-	if (ifp->if_watchdog != NULL)
+	if (ifp->if_watchdog != NULL) {
 		if_printf(ifp,
 		    "WARNING: using obsoleted if_watchdog interface\n");
+	      
+		/*
+		 * Note that we need if_slowtimo().  If this happens after
+		 * boot, then call if_slowtimo() directly.
+		 */
+		if (atomic_cmpset_int(&slowtimo_started, 0, 1) && !cold)
+			if_slowtimo(0);
+	}
 	if (ifp->if_flags & IFF_NEEDSGIANT)
 		if_printf(ifp,
 		    "WARNING: using obsoleted IFF_NEEDSGIANT flag\n");


More information about the svn-src-stable mailing list