Module Name:    src
Committed By:   pgoyette
Date:           Sun Jun  6 18:58:22 UTC 2010

Modified Files:
        src/sys/dev/mii: mii_physubr.c mii_verbose.c mii_verbose.h ukphy.c

Log Message:
Update miiverbose module to use module_autoload() rather than module_load().
Load the module right before each attempt to use its features, and let the
module subsystem handle unloading.


To generate a diff of this commit:
cvs rdiff -u -r1.69 -r1.70 src/sys/dev/mii/mii_physubr.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/mii/mii_verbose.c \
    src/sys/dev/mii/mii_verbose.h
cvs rdiff -u -r1.42 -r1.43 src/sys/dev/mii/ukphy.c

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

Modified files:

Index: src/sys/dev/mii/mii_physubr.c
diff -u src/sys/dev/mii/mii_physubr.c:1.69 src/sys/dev/mii/mii_physubr.c:1.70
--- src/sys/dev/mii/mii_physubr.c:1.69	Wed Jun  2 19:47:34 2010
+++ src/sys/dev/mii/mii_physubr.c	Sun Jun  6 18:58:22 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mii_physubr.c,v 1.69 2010/06/02 19:47:34 martin Exp $	*/
+/*	$NetBSD: mii_physubr.c,v 1.70 2010/06/06 18:58:22 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mii_physubr.c,v 1.69 2010/06/02 19:47:34 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mii_physubr.c,v 1.70 2010/06/06 18:58:22 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -55,29 +55,29 @@
 
 const char *(*mii_get_descr)(int, int) = mii_get_descr_stub;
 
+int mii_verbose_loaded = 0;
+
 const char *mii_get_descr_stub(int oui, int model)
 {
-	return NULL;
+	mii_load_verbose();
+	if (mii_verbose_loaded)
+		return mii_get_descr(oui, model);
+	else
+		return NULL;
 }
 
 /*    
- * Routine to load/unload the miiverbose kernel module as needed
+ * Routine to load the miiverbose kernel module as needed
  */
-void mii_verbose_ctl(bool load)
+void mii_load_verbose(void)
 {
-	static int loaded = 0;
- 
-	if (load) {
-		if (loaded++ == 0)
-			if (module_load("miiverbose", MODCTL_LOAD_FORCE,
-					NULL, MODULE_CLASS_MISC) !=0 )
-				loaded = 0;
-		return; 
-	}
-	if (loaded == 0)
-		return; 
-	if (--loaded == 0)
-		module_unload("miiverbose");
+	if (mii_verbose_loaded)
+		return;
+
+	mutex_enter(&module_lock);
+	if (module_autoload("miiverbose", MODULE_CLASS_MISC) ==0)
+		mii_verbose_loaded++;
+	mutex_exit(&module_lock);
 }  
 
 static void mii_phy_statusmsg(struct mii_softc *);

Index: src/sys/dev/mii/mii_verbose.c
diff -u src/sys/dev/mii/mii_verbose.c:1.1 src/sys/dev/mii/mii_verbose.c:1.2
--- src/sys/dev/mii/mii_verbose.c:1.1	Sun May 30 17:44:07 2010
+++ src/sys/dev/mii/mii_verbose.c	Sun Jun  6 18:58:22 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mii_verbose.c,v 1.1 2010/05/30 17:44:07 pgoyette Exp $ */
+/*	$NetBSD: mii_verbose.c,v 1.2 2010/06/06 18:58:22 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -55,7 +55,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mii_verbose.c,v 1.1 2010/05/30 17:44:07 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mii_verbose.c,v 1.2 2010/06/06 18:58:22 pgoyette Exp $");
 
 #include <sys/module.h>
 #include <dev/mii/mii_verbose.h>
@@ -75,12 +75,16 @@
 static int
 miiverbose_modcmd(modcmd_t cmd, void *arg)
 {
+	static const char *(*saved_mii_get_descr)(int, int);
+
 	switch (cmd) {
 	case MODULE_CMD_INIT:
+		saved_mii_get_descr = mii_get_descr;
 		mii_get_descr = mii_get_descr_real;
 		return 0;
 	case MODULE_CMD_FINI:
-		mii_get_descr = mii_get_descr_stub;
+		mii_get_descr = saved_mii_get_descr;
+		mii_verbose_loaded = 0;
 		return 0;
 	default:
 		return ENOTTY;
Index: src/sys/dev/mii/mii_verbose.h
diff -u src/sys/dev/mii/mii_verbose.h:1.1 src/sys/dev/mii/mii_verbose.h:1.2
--- src/sys/dev/mii/mii_verbose.h:1.1	Sun May 30 17:44:08 2010
+++ src/sys/dev/mii/mii_verbose.h	Sun Jun  6 18:58:22 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mii_verbose.h,v 1.1 2010/05/30 17:44:08 pgoyette Exp $ */
+/*	$NetBSD: mii_verbose.h,v 1.2 2010/06/06 18:58:22 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -40,7 +40,9 @@
 extern const char *	(*mii_get_descr)(int, int);
 
 const char *	mii_get_descr_stub(int, int);
-void		mii_verbose_ctl(bool);
+void		mii_load_verbose(void);
+
+extern int	mii_verbose_loaded;
 
 #endif /* _KERNEL */
 

Index: src/sys/dev/mii/ukphy.c
diff -u src/sys/dev/mii/ukphy.c:1.42 src/sys/dev/mii/ukphy.c:1.43
--- src/sys/dev/mii/ukphy.c:1.42	Wed Jun  2 19:47:34 2010
+++ src/sys/dev/mii/ukphy.c	Sun Jun  6 18:58:22 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ukphy.c,v 1.42 2010/06/02 19:47:34 martin Exp $	*/
+/*	$NetBSD: ukphy.c,v 1.43 2010/06/06 18:58:22 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ukphy.c,v 1.42 2010/06/02 19:47:34 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ukphy.c,v 1.43 2010/06/06 18:58:22 pgoyette Exp $");
 
 #include "opt_mii.h"
 
@@ -110,7 +110,6 @@
 	int rev = MII_REV(ma->mii_id2);
 	const char *descr;
 
-	mii_verbose_ctl(true);
 	if ((descr = mii_get_descr(oui, model)) != NULL)
 		aprint_normal(": %s (OUI 0x%06x, model 0x%04x), rev. %d\n",
 		       descr, oui, model, rev);

Reply via email to