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

Modified Files:
        src/sys/dev/usb: ohci.c usb.c usb_subr.c usb_verbose.c usb_verbose.h

Log Message:
Update usbverbose 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.206 -r1.207 src/sys/dev/usb/ohci.c
cvs rdiff -u -r1.121 -r1.122 src/sys/dev/usb/usb.c
cvs rdiff -u -r1.170 -r1.171 src/sys/dev/usb/usb_subr.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/usb/usb_verbose.c \
    src/sys/dev/usb/usb_verbose.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/dev/usb/ohci.c
diff -u src/sys/dev/usb/ohci.c:1.206 src/sys/dev/usb/ohci.c:1.207
--- src/sys/dev/usb/ohci.c:1.206	Wed Feb 24 22:38:09 2010
+++ src/sys/dev/usb/ohci.c	Sun Jun  6 18:58:26 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ohci.c,v 1.206 2010/02/24 22:38:09 dyoung Exp $	*/
+/*	$NetBSD: ohci.c,v 1.207 2010/06/06 18:58:26 pgoyette Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/ohci.c,v 1.22 1999/11/17 22:33:40 n_hibma Exp $	*/
 
 /*
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.206 2010/02/24 22:38:09 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.207 2010/06/06 18:58:26 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1291,7 +1291,8 @@
 			DPRINTFN(5,("add ITD %p\n", sitd));
 			continue;
 		}
-		panic("ohci_softintr: addr 0x%08lx not found", (u_long)done);
+		printf("ohci_softintr: addr 0x%08lx not found", (u_long)done);
+		return;
 	}
 
 	DPRINTFN(10,("ohci_softintr: sdone=%p sidone=%p\n", sdone, sidone));

Index: src/sys/dev/usb/usb.c
diff -u src/sys/dev/usb/usb.c:1.121 src/sys/dev/usb/usb.c:1.122
--- src/sys/dev/usb/usb.c:1.121	Sat May 29 01:14:29 2010
+++ src/sys/dev/usb/usb.c	Sun Jun  6 18:58:26 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb.c,v 1.121 2010/05/29 01:14:29 pgoyette Exp $	*/
+/*	$NetBSD: usb.c,v 1.122 2010/06/06 18:58:26 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 1998, 2002, 2008 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.121 2010/05/29 01:14:29 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.122 2010/06/06 18:58:26 pgoyette Exp $");
 
 #include "opt_compat_netbsd.h"
 
@@ -189,9 +189,6 @@
 	}
 	aprint_normal("\n");
 
-	/* Try to load the usbverbose module */
-	usb_verbose_ctl(true);
-
 	config_interrupts(self, usb_doattach);
 }
 
@@ -986,9 +983,6 @@
 	ue->u.ue_ctrlr.ue_bus = device_unit(self);
 	usb_add_event(USB_EVENT_CTRLR_DETACH, ue);
 
-	/* Try to unload the usbverbose module */
-	usb_verbose_ctl(false);
-
 	return (0);
 }
 

Index: src/sys/dev/usb/usb_subr.c
diff -u src/sys/dev/usb/usb_subr.c:1.170 src/sys/dev/usb/usb_subr.c:1.171
--- src/sys/dev/usb/usb_subr.c:1.170	Sat May 29 06:44:22 2010
+++ src/sys/dev/usb/usb_subr.c	Sun Jun  6 18:58:26 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_subr.c,v 1.170 2010/05/29 06:44:22 cegger Exp $	*/
+/*	$NetBSD: usb_subr.c,v 1.171 2010/06/06 18:58:26 pgoyette Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.170 2010/05/29 06:44:22 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.171 2010/06/06 18:58:26 pgoyette Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_usbverbose.h"
@@ -106,33 +106,43 @@
 	"XXX",
 };
 
-void (*get_usb_vendor)(char *, usb_vendor_id_t) = (void *)get_usb_none;
+void usb_load_verbose(void);
+
+void get_usb_vendor_stub(char *, usb_vendor_id_t);
+void get_usb_product_stub(char *, usb_vendor_id_t, usb_product_id_t);
+
+void (*get_usb_vendor)(char *, usb_vendor_id_t) = get_usb_vendor_stub;
 void (*get_usb_product)(char *, usb_vendor_id_t, usb_product_id_t) =
-	(void *)get_usb_none;
+	get_usb_product_stub;
 
-void get_usb_none(void)
-{
-	/* Nothing happens */
-}
+int usb_verbose_loaded = 0;
 
 /*
- * Load/unload the usbverbose module
+ * Load the usbverbose module
  */
-void usb_verbose_ctl(bool load)
+void usb_load_verbose(void)
+{
+	if (usb_verbose_loaded)
+		return;
+
+	mutex_enter(&module_lock);
+	if (module_autoload("usbverbose", MODULE_CLASS_MISC) == 0)
+		usb_verbose_loaded++;
+	mutex_exit(&module_lock);
+}
+
+void get_usb_vendor_stub(char *v, usb_vendor_id_t v_id)
+{
+	usb_load_verbose();
+	if (usb_verbose_loaded)
+		get_usb_vendor(v, v_id);
+}
+
+void get_usb_product_stub(char *p, usb_vendor_id_t v_id, usb_product_id_t p_id)
 {
-	static int loaded = 0;
- 
-	if (load) {
-		if (loaded++ == 0)
-			if (module_load("usbverbose", MODCTL_LOAD_FORCE,
-					NULL, MODULE_CLASS_MISC) != 0)
-				loaded = 0;
-		return; 
-	}
-	if (loaded == 0)
-		return; 
-	if (--loaded == 0)
-		module_unload("usbverbose");
+	usb_load_verbose();
+	if (usb_verbose_loaded)
+		get_usb_product(p, v_id, p_id);
 }
 
 const char *

Index: src/sys/dev/usb/usb_verbose.c
diff -u src/sys/dev/usb/usb_verbose.c:1.1 src/sys/dev/usb/usb_verbose.c:1.2
--- src/sys/dev/usb/usb_verbose.c:1.1	Sat May 29 01:14:29 2010
+++ src/sys/dev/usb/usb_verbose.c	Sun Jun  6 18:58:26 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_verbose.c,v 1.1 2010/05/29 01:14:29 pgoyette Exp $ */
+/*	$NetBSD: usb_verbose.c,v 1.2 2010/06/06 18:58:26 pgoyette Exp $ */
 /*	$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_verbose.c,v 1.1 2010/05/29 01:14:29 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_verbose.c,v 1.2 2010/06/06 18:58:26 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/module.h>
@@ -64,14 +64,21 @@
 static int
 usbverbose_modcmd(modcmd_t cmd, void *arg)
 {
+	static void (*saved_usb_vendor)(char *, usb_vendor_id_t);
+	static void (*saved_usb_product)(char *, usb_vendor_id_t,
+		usb_product_id_t);
+
 	switch (cmd) {
 	case MODULE_CMD_INIT:
+		saved_usb_vendor = get_usb_vendor;
+		saved_usb_product = get_usb_product;
 		get_usb_vendor = get_usb_vendor_real;
 		get_usb_product = get_usb_product_real;
 		return 0;
 	case MODULE_CMD_FINI:
-		get_usb_vendor = (void *)get_usb_none;
-		get_usb_product = (void *)get_usb_none;
+		get_usb_vendor = saved_usb_vendor;
+		get_usb_product = saved_usb_product;
+		usb_verbose_loaded = 0;
 		return 0;
 	default:
 		return ENOTTY;  
Index: src/sys/dev/usb/usb_verbose.h
diff -u src/sys/dev/usb/usb_verbose.h:1.1 src/sys/dev/usb/usb_verbose.h:1.2
--- src/sys/dev/usb/usb_verbose.h:1.1	Sat May 29 01:14:29 2010
+++ src/sys/dev/usb/usb_verbose.h	Sun Jun  6 18:58:26 2010
@@ -1,4 +1,4 @@
-/*      $NetBSD: usb_verbose.h,v 1.1 2010/05/29 01:14:29 pgoyette Exp $ */
+/*      $NetBSD: usb_verbose.h,v 1.2 2010/06/06 18:58:26 pgoyette Exp $ */
 
 /*
  * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
@@ -36,9 +36,9 @@
 typedef u_int16_t usb_vendor_id_t;
 typedef u_int16_t usb_product_id_t;
 
-void get_usb_none(void);
-void usb_verbose_ctl(bool);
 extern void (*get_usb_vendor)(char *, usb_vendor_id_t);
 extern void (*get_usb_product)(char *, usb_vendor_id_t, usb_product_id_t);
 
+extern int usb_verbose_loaded;
+
 #endif /* _DEV_USB_USBVERBOSE_H_ */

Reply via email to