Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54a5c4cd authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

[PATCH] USB: convert usbfs/inode.c to use usb notifiers

parent a7b986b3
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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);

+0 −10
Original line number Diff line number Diff line
@@ -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) { }

+0 −3
Original line number Diff line number Diff line
@@ -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:
+31 −13
Original line number Diff line number Diff line
@@ -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);