Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/usb Update usbverbose module to use module_autoload(...



details:   https://anonhg.NetBSD.org/src/rev/62aafbdf6b0a
branches:  trunk
changeset: 755460:62aafbdf6b0a
user:      pgoyette <pgoyette%NetBSD.org@localhost>
date:      Sun Jun 06 18:58:26 2010 +0000

description:
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.

diffstat:

 sys/dev/usb/ohci.c        |   7 +++--
 sys/dev/usb/usb.c         |  10 +------
 sys/dev/usb/usb_subr.c    |  58 +++++++++++++++++++++++++++-------------------
 sys/dev/usb/usb_verbose.c |  15 ++++++++---
 sys/dev/usb/usb_verbose.h |   6 ++--
 5 files changed, 54 insertions(+), 42 deletions(-)

diffs (213 lines):

diff -r 7ea657254a05 -r 62aafbdf6b0a sys/dev/usb/ohci.c
--- a/sys/dev/usb/ohci.c        Sun Jun 06 18:58:23 2010 +0000
+++ b/sys/dev/usb/ohci.c        Sun Jun 06 18:58:26 2010 +0000
@@ -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));
diff -r 7ea657254a05 -r 62aafbdf6b0a sys/dev/usb/usb.c
--- a/sys/dev/usb/usb.c Sun Jun 06 18:58:23 2010 +0000
+++ b/sys/dev/usb/usb.c Sun Jun 06 18:58:26 2010 +0000
@@ -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);
 }
 
diff -r 7ea657254a05 -r 62aafbdf6b0a sys/dev/usb/usb_subr.c
--- a/sys/dev/usb/usb_subr.c    Sun Jun 06 18:58:23 2010 +0000
+++ b/sys/dev/usb/usb_subr.c    Sun Jun 06 18:58:26 2010 +0000
@@ -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 (*get_usb_product)(char *, usb_vendor_id_t, usb_product_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_none(void)
-{
-       /* Nothing happens */
-}
+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) =
+       get_usb_product_stub;
+
+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)
 {
-       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");
+       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)
+{
+       usb_load_verbose();
+       if (usb_verbose_loaded)
+               get_usb_product(p, v_id, p_id);
 }
 
 const char *
diff -r 7ea657254a05 -r 62aafbdf6b0a sys/dev/usb/usb_verbose.c
--- a/sys/dev/usb/usb_verbose.c Sun Jun 06 18:58:23 2010 +0000
+++ b/sys/dev/usb/usb_verbose.c Sun Jun 06 18:58:26 2010 +0000
@@ -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;  
diff -r 7ea657254a05 -r 62aafbdf6b0a sys/dev/usb/usb_verbose.h
--- a/sys/dev/usb/usb_verbose.h Sun Jun 06 18:58:23 2010 +0000
+++ b/sys/dev/usb/usb_verbose.h Sun Jun 06 18:58:26 2010 +0000
@@ -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_ */



Home | Main Index | Thread Index | Old Index