[PATCH] USB: convert usbfs/inode.c to use usb notifiers
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
a7b986b3e1
commit
54a5c4cd2e
4 changed files with 31 additions and 28 deletions
|
@ -793,7 +793,6 @@ static int usb_register_bus(struct usb_bus *bus)
|
||||||
up (&usb_bus_list_lock);
|
up (&usb_bus_list_lock);
|
||||||
|
|
||||||
usb_notify_add_bus(bus);
|
usb_notify_add_bus(bus);
|
||||||
usbfs_add_bus (bus);
|
|
||||||
usbmon_notify_bus_add (bus);
|
usbmon_notify_bus_add (bus);
|
||||||
|
|
||||||
dev_info (bus->controller, "new USB bus registered, assigned bus number %d\n", bus->busnum);
|
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);
|
usb_notify_remove_bus(bus);
|
||||||
usbmon_notify_bus_remove (bus);
|
usbmon_notify_bus_remove (bus);
|
||||||
usbfs_remove_bus (bus);
|
|
||||||
|
|
||||||
clear_bit (bus->busnum, busmap.busmap);
|
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
|
* these are expected to be called from the USB core/hub thread
|
||||||
* with the kernel lock held
|
* 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 void usbfs_update_special (void);
|
||||||
|
|
||||||
extern int usbfs_init(void);
|
extern int usbfs_init(void);
|
||||||
extern void usbfs_cleanup(void);
|
extern void usbfs_cleanup(void);
|
||||||
|
|
||||||
#else /* CONFIG_USB_DEVICEFS */
|
#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 void usbfs_update_special (void) {}
|
||||||
|
|
||||||
static inline int usbfs_init(void) { return 0; }
|
static inline int usbfs_init(void) { return 0; }
|
||||||
static inline void usbfs_cleanup(void) { }
|
static inline void usbfs_cleanup(void) { }
|
||||||
|
|
||||||
|
|
|
@ -1136,7 +1136,6 @@ void usb_disconnect(struct usb_device **pdev)
|
||||||
*/
|
*/
|
||||||
dev_dbg (&udev->dev, "unregistering device\n");
|
dev_dbg (&udev->dev, "unregistering device\n");
|
||||||
release_address(udev);
|
release_address(udev);
|
||||||
usbfs_remove_device(udev);
|
|
||||||
usb_remove_sysfs_dev_files(udev);
|
usb_remove_sysfs_dev_files(udev);
|
||||||
|
|
||||||
/* Avoid races with recursively_mark_NOTATTACHED() */
|
/* Avoid races with recursively_mark_NOTATTACHED() */
|
||||||
|
@ -1374,8 +1373,6 @@ int usb_new_device(struct usb_device *udev)
|
||||||
/* USB device state == configured ... usable */
|
/* USB device state == configured ... usable */
|
||||||
usb_notify_add_device(udev);
|
usb_notify_add_device(udev);
|
||||||
|
|
||||||
/* add a /proc/bus/usb entry */
|
|
||||||
usbfs_add_device(udev);
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include <linux/usbdevice_fs.h>
|
#include <linux/usbdevice_fs.h>
|
||||||
#include <linux/smp_lock.h>
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/parser.h>
|
#include <linux/parser.h>
|
||||||
|
#include <linux/notifier.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#include "hcd.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;
|
struct dentry *parent;
|
||||||
char name[8];
|
char name[8];
|
||||||
|
@ -642,12 +643,9 @@ void usbfs_add_bus(struct usb_bus *bus)
|
||||||
err ("error creating usbfs bus entry");
|
err ("error creating usbfs bus entry");
|
||||||
return;
|
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) {
|
if (bus->usbfs_dentry) {
|
||||||
fs_remove_file (bus->usbfs_dentry);
|
fs_remove_file (bus->usbfs_dentry);
|
||||||
|
@ -659,12 +657,9 @@ void usbfs_remove_bus(struct usb_bus *bus)
|
||||||
remove_special_files();
|
remove_special_files();
|
||||||
num_buses = 0;
|
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];
|
char name[8];
|
||||||
int i;
|
int i;
|
||||||
|
@ -690,12 +685,9 @@ void usbfs_add_device(struct usb_device *dev)
|
||||||
}
|
}
|
||||||
if (dev->usbfs_dentry->d_inode)
|
if (dev->usbfs_dentry->d_inode)
|
||||||
dev->usbfs_dentry->d_inode->i_size = i_size;
|
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 dev_state *ds;
|
||||||
struct siginfo sinfo;
|
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);
|
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_update_special();
|
||||||
usbfs_conn_disc_event();
|
usbfs_conn_disc_event();
|
||||||
|
return NOTIFY_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct notifier_block usbfs_nb = {
|
||||||
|
.notifier_call = usbfs_notify,
|
||||||
|
};
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
static struct proc_dir_entry *usbdir = NULL;
|
static struct proc_dir_entry *usbdir = NULL;
|
||||||
|
@ -732,6 +747,8 @@ int __init usbfs_init(void)
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
usb_register_notify(&usbfs_nb);
|
||||||
|
|
||||||
/* create mount point for usbfs */
|
/* create mount point for usbfs */
|
||||||
usbdir = proc_mkdir("usb", proc_bus);
|
usbdir = proc_mkdir("usb", proc_bus);
|
||||||
|
|
||||||
|
@ -740,6 +757,7 @@ int __init usbfs_init(void)
|
||||||
|
|
||||||
void usbfs_cleanup(void)
|
void usbfs_cleanup(void)
|
||||||
{
|
{
|
||||||
|
usb_unregister_notify(&usbfs_nb);
|
||||||
unregister_filesystem(&usb_fs_type);
|
unregister_filesystem(&usb_fs_type);
|
||||||
if (usbdir)
|
if (usbdir)
|
||||||
remove_proc_entry("usb", proc_bus);
|
remove_proc_entry("usb", proc_bus);
|
||||||
|
|
Loading…
Reference in a new issue