[PATCH] USB: convert usbfs/inode.c to use usb notifiers
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
a7b986b3e1
Коммит
54a5c4cd2e
|
@ -793,7 +793,6 @@ static int usb_register_bus(struct usb_bus *bus)
|
|||
up (&usb_bus_list_lock);
|
||||
|
||||
usb_notify_add_bus(bus);
|
||||
usbfs_add_bus (bus);
|
||||
usbmon_notify_bus_add (bus);
|
||||
|
||||
dev_info (bus->controller, "new USB bus registered, assigned bus number %d\n", bus->busnum);
|
||||
|
@ -823,7 +822,6 @@ static void usb_deregister_bus (struct usb_bus *bus)
|
|||
|
||||
usb_notify_remove_bus(bus);
|
||||
usbmon_notify_bus_remove (bus);
|
||||
usbfs_remove_bus (bus);
|
||||
|
||||
clear_bit (bus->busnum, busmap.busmap);
|
||||
|
||||
|
|
|
@ -400,23 +400,13 @@ static inline int hcd_bus_resume (struct usb_bus *bus)
|
|||
* these are expected to be called from the USB core/hub thread
|
||||
* with the kernel lock held
|
||||
*/
|
||||
extern void usbfs_add_bus(struct usb_bus *bus);
|
||||
extern void usbfs_remove_bus(struct usb_bus *bus);
|
||||
extern void usbfs_add_device(struct usb_device *dev);
|
||||
extern void usbfs_remove_device(struct usb_device *dev);
|
||||
extern void usbfs_update_special (void);
|
||||
|
||||
extern int usbfs_init(void);
|
||||
extern void usbfs_cleanup(void);
|
||||
|
||||
#else /* CONFIG_USB_DEVICEFS */
|
||||
|
||||
static inline void usbfs_add_bus(struct usb_bus *bus) {}
|
||||
static inline void usbfs_remove_bus(struct usb_bus *bus) {}
|
||||
static inline void usbfs_add_device(struct usb_device *dev) {}
|
||||
static inline void usbfs_remove_device(struct usb_device *dev) {}
|
||||
static inline void usbfs_update_special (void) {}
|
||||
|
||||
static inline int usbfs_init(void) { return 0; }
|
||||
static inline void usbfs_cleanup(void) { }
|
||||
|
||||
|
|
|
@ -1136,7 +1136,6 @@ void usb_disconnect(struct usb_device **pdev)
|
|||
*/
|
||||
dev_dbg (&udev->dev, "unregistering device\n");
|
||||
release_address(udev);
|
||||
usbfs_remove_device(udev);
|
||||
usb_remove_sysfs_dev_files(udev);
|
||||
|
||||
/* Avoid races with recursively_mark_NOTATTACHED() */
|
||||
|
@ -1374,8 +1373,6 @@ int usb_new_device(struct usb_device *udev)
|
|||
/* USB device state == configured ... usable */
|
||||
usb_notify_add_device(udev);
|
||||
|
||||
/* add a /proc/bus/usb entry */
|
||||
usbfs_add_device(udev);
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include <linux/usbdevice_fs.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/parser.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include "usb.h"
|
||||
#include "hcd.h"
|
||||
|
@ -619,7 +620,7 @@ void usbfs_update_special (void)
|
|||
}
|
||||
}
|
||||
|
||||
void usbfs_add_bus(struct usb_bus *bus)
|
||||
static void usbfs_add_bus(struct usb_bus *bus)
|
||||
{
|
||||
struct dentry *parent;
|
||||
char name[8];
|
||||
|
@ -642,12 +643,9 @@ void usbfs_add_bus(struct usb_bus *bus)
|
|||
err ("error creating usbfs bus entry");
|
||||
return;
|
||||
}
|
||||
|
||||
usbfs_update_special();
|
||||
usbfs_conn_disc_event();
|
||||
}
|
||||
|
||||
void usbfs_remove_bus(struct usb_bus *bus)
|
||||
static void usbfs_remove_bus(struct usb_bus *bus)
|
||||
{
|
||||
if (bus->usbfs_dentry) {
|
||||
fs_remove_file (bus->usbfs_dentry);
|
||||
|
@ -659,12 +657,9 @@ void usbfs_remove_bus(struct usb_bus *bus)
|
|||
remove_special_files();
|
||||
num_buses = 0;
|
||||
}
|
||||
|
||||
usbfs_update_special();
|
||||
usbfs_conn_disc_event();
|
||||
}
|
||||
|
||||
void usbfs_add_device(struct usb_device *dev)
|
||||
static void usbfs_add_device(struct usb_device *dev)
|
||||
{
|
||||
char name[8];
|
||||
int i;
|
||||
|
@ -690,12 +685,9 @@ void usbfs_add_device(struct usb_device *dev)
|
|||
}
|
||||
if (dev->usbfs_dentry->d_inode)
|
||||
dev->usbfs_dentry->d_inode->i_size = i_size;
|
||||
|
||||
usbfs_update_special();
|
||||
usbfs_conn_disc_event();
|
||||
}
|
||||
|
||||
void usbfs_remove_device(struct usb_device *dev)
|
||||
static void usbfs_remove_device(struct usb_device *dev)
|
||||
{
|
||||
struct dev_state *ds;
|
||||
struct siginfo sinfo;
|
||||
|
@ -716,10 +708,33 @@ void usbfs_remove_device(struct usb_device *dev)
|
|||
kill_proc_info_as_uid(ds->discsignr, &sinfo, ds->disc_pid, ds->disc_uid, ds->disc_euid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int usbfs_notify(struct notifier_block *self, unsigned long action, void *dev)
|
||||
{
|
||||
switch (action) {
|
||||
case USB_DEVICE_ADD:
|
||||
usbfs_add_device(dev);
|
||||
break;
|
||||
case USB_DEVICE_REMOVE:
|
||||
usbfs_remove_device(dev);
|
||||
break;
|
||||
case USB_BUS_ADD:
|
||||
usbfs_add_bus(dev);
|
||||
break;
|
||||
case USB_BUS_REMOVE:
|
||||
usbfs_remove_bus(dev);
|
||||
}
|
||||
|
||||
usbfs_update_special();
|
||||
usbfs_conn_disc_event();
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
|
||||
static struct notifier_block usbfs_nb = {
|
||||
.notifier_call = usbfs_notify,
|
||||
};
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
static struct proc_dir_entry *usbdir = NULL;
|
||||
|
@ -732,6 +747,8 @@ int __init usbfs_init(void)
|
|||
if (retval)
|
||||
return retval;
|
||||
|
||||
usb_register_notify(&usbfs_nb);
|
||||
|
||||
/* create mount point for usbfs */
|
||||
usbdir = proc_mkdir("usb", proc_bus);
|
||||
|
||||
|
@ -740,6 +757,7 @@ int __init usbfs_init(void)
|
|||
|
||||
void usbfs_cleanup(void)
|
||||
{
|
||||
usb_unregister_notify(&usbfs_nb);
|
||||
unregister_filesystem(&usb_fs_type);
|
||||
if (usbdir)
|
||||
remove_proc_entry("usb", proc_bus);
|
||||
|
|
Загрузка…
Ссылка в новой задаче