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_ */