[PATCH] USB: convert usbmon to use usb notifiers
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 21 Jun 2005 04:15:16 +0000 (21:15 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 28 Oct 2005 23:47:46 +0000 (16:47 -0700)
This also removes 2 usbmon callbacks.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/hcd.c
drivers/usb/core/hcd.h
drivers/usb/mon/mon_main.c

index 16790ad..e8f2b8d 100644 (file)
@@ -793,7 +793,6 @@ static int usb_register_bus(struct usb_bus *bus)
        up (&usb_bus_list_lock);
 
        usb_notify_add_bus(bus);
-       usbmon_notify_bus_add (bus);
 
        dev_info (bus->controller, "new USB bus registered, assigned bus number %d\n", bus->busnum);
        return 0;
@@ -821,7 +820,6 @@ static void usb_deregister_bus (struct usb_bus *bus)
        up (&usb_bus_list_lock);
 
        usb_notify_remove_bus(bus);
-       usbmon_notify_bus_remove (bus);
 
        clear_bit (bus->busnum, busmap.busmap);
 
index cc33886..a5d9294 100644 (file)
@@ -421,8 +421,6 @@ struct usb_mon_operations {
        void (*urb_submit_error)(struct usb_bus *bus, struct urb *urb, int err);
        void (*urb_complete)(struct usb_bus *bus, struct urb *urb);
        /* void (*urb_unlink)(struct usb_bus *bus, struct urb *urb); */
-       void (*bus_add)(struct usb_bus *bus);
-       void (*bus_remove)(struct usb_bus *bus);
 };
 
 extern struct usb_mon_operations *mon_ops;
@@ -445,18 +443,6 @@ static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb)
        if (bus->monitored)
                (*mon_ops->urb_complete)(bus, urb);
 }
-static inline void usbmon_notify_bus_add(struct usb_bus *bus)
-{
-       if (mon_ops)
-               (*mon_ops->bus_add)(bus);
-}
-
-static inline void usbmon_notify_bus_remove(struct usb_bus *bus)
-{
-       if (mon_ops)
-               (*mon_ops->bus_remove)(bus);
-}
 
 int usb_mon_register(struct usb_mon_operations *ops);
 void usb_mon_deregister(void);
@@ -467,8 +453,6 @@ static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) {}
 static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb,
     int error) {}
 static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb) {}
-static inline void usbmon_notify_bus_add(struct usb_bus *bus) {}
-static inline void usbmon_notify_bus_remove(struct usb_bus *bus) {}
 
 #endif /* CONFIG_USB_MON */
 
index 508a210..c34944c 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/usb.h>
 #include <linux/debugfs.h>
 #include <linux/smp_lock.h>
+#include <linux/notifier.h>
 
 #include "usb_mon.h"
 #include "../core/hcd.h"
@@ -205,6 +206,23 @@ static void mon_bus_remove(struct usb_bus *ubus)
        up(&mon_lock);
 }
 
+static int mon_notify(struct notifier_block *self, unsigned long action,
+                     void *dev)
+{
+       switch (action) {
+       case USB_BUS_ADD:
+               mon_bus_add(dev);
+               break;
+       case USB_BUS_REMOVE:
+               mon_bus_remove(dev);
+       }
+       return NOTIFY_OK;
+}
+
+static struct notifier_block mon_nb = {
+       .notifier_call =        mon_notify,
+};
+
 /*
  * Ops
  */
@@ -212,8 +230,6 @@ static struct usb_mon_operations mon_ops_0 = {
        .urb_submit =   mon_submit,
        .urb_submit_error = mon_submit_error,
        .urb_complete = mon_complete,
-       .bus_add =      mon_bus_add,
-       .bus_remove =   mon_bus_remove,
 };
 
 /*
@@ -329,6 +345,8 @@ static int __init mon_init(void)
        }
        // MOD_INC_USE_COUNT(which_module?);
 
+       usb_register_notify(&mon_nb);
+
        down(&usb_bus_list_lock);
        list_for_each_entry (ubus, &usb_bus_list, bus_list) {
                mon_bus_init(mondir, ubus);
@@ -342,6 +360,7 @@ static void __exit mon_exit(void)
        struct mon_bus *mbus;
        struct list_head *p;
 
+       usb_unregister_notify(&mon_nb);
        usb_mon_deregister();
 
        down(&mon_lock);