Module Name:    src
Committed By:   jmcneill
Date:           Tue Oct 18 12:25:31 UTC 2011

Modified Files:
        src/sys/kern: kern_module.c
        src/sys/sys: module.h

Log Message:
Don't try to auto-unload modules unless they were auto-loaded.


To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 src/sys/kern/kern_module.c
cvs rdiff -u -r1.27 -r1.28 src/sys/sys/module.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/kern_module.c
diff -u src/sys/kern/kern_module.c:1.82 src/sys/kern/kern_module.c:1.83
--- src/sys/kern/kern_module.c:1.82	Mon Sep 19 00:40:22 2011
+++ src/sys/kern/kern_module.c	Tue Oct 18 12:25:31 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_module.c,v 1.82 2011/09/19 00:40:22 pgoyette Exp $	*/
+/*	$NetBSD: kern_module.c,v 1.83 2011/10/18 12:25:31 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.82 2011/09/19 00:40:22 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.83 2011/10/18 12:25:31 jmcneill Exp $");
 
 #define _MODULE_INTERNAL
 
@@ -1089,6 +1089,7 @@ module_do_load(const char *name, bool is
 		 * a short delay.
 		 */
 		mod->mod_autotime = time_second + module_autotime;
+		mod->mod_flags |= MODFLG_AUTO_LOADED;
 		module_thread_kick();
 	}
 	depth--;
@@ -1273,8 +1274,14 @@ module_thread(void *cookie)
 		kernconfig_lock();
 		for (mod = TAILQ_FIRST(&module_list); mod != NULL; mod = next) {
 			next = TAILQ_NEXT(mod, mod_chain);
+
+			/* skip built-in modules */
 			if (mod->mod_source == MODULE_SOURCE_KERNEL)
 				continue;
+			/* skip modules that weren't auto-loaded */
+			if ((mod->mod_flags & MODFLG_AUTO_LOADED) == 0)
+				continue;
+
 			if (uvmexp.free < uvmexp.freemin) {
 				module_thread_ticks = hz;
 			} else if (mod->mod_autotime == 0) {
@@ -1285,6 +1292,7 @@ module_thread(void *cookie)
 			} else {
 				mod->mod_autotime = 0;
 			}
+
 			/*
 			 * If this module wants to avoid autounload then
 			 * skip it.  Some modules can ping-pong in and out

Index: src/sys/sys/module.h
diff -u src/sys/sys/module.h:1.27 src/sys/sys/module.h:1.28
--- src/sys/sys/module.h:1.27	Sat Aug 13 21:04:07 2011
+++ src/sys/sys/module.h	Tue Oct 18 12:25:30 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: module.h,v 1.27 2011/08/13 21:04:07 christos Exp $	*/
+/*	$NetBSD: module.h,v 1.28 2011/10/18 12:25:30 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -92,6 +92,7 @@ typedef struct module {
 	u_int			mod_fbtentries;	/* DTrace FBT entrie count */
 	int			mod_flags;
 #define MODFLG_MUST_FORCE	0x01
+#define MODFLG_AUTO_LOADED	0x02
 
 } module_t;
 

Reply via email to