diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-05-04 11:54:50 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-07-12 16:29:46 -0700 |
commit | 06b84e8adcad8280d76a7c71e772c5cddba96d85 (patch) | |
tree | f2d380412243099529ea94ebeccd2b39a775a6a9 | |
parent | f3fd77cd2f4499f3e2ef9a1e6d5e4f4349d556c3 (diff) | |
download | op-kernel-dev-06b84e8adcad8280d76a7c71e772c5cddba96d85.zip op-kernel-dev-06b84e8adcad8280d76a7c71e772c5cddba96d85.tar.gz |
USB: remove "locktree" routine from the hub driver
This patch (as892) removes the "locktree" routine from the hub driver.
It currently is used in only one place, by a single kernel thread;
hence it isn't doing any good.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/usb/core/hub.c | 48 |
1 files changed, 1 insertions, 47 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 7020230..9464eb5 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -982,49 +982,6 @@ hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data) } -/* grab device/port lock, returning index of that port (zero based). - * protects the upstream link used by this device from concurrent - * tree operations like suspend, resume, reset, and disconnect, which - * apply to everything downstream of a given port. - */ -static int locktree(struct usb_device *udev) -{ - int t; - struct usb_device *hdev; - - if (!udev) - return -ENODEV; - - /* root hub is always the first lock in the series */ - hdev = udev->parent; - if (!hdev) { - usb_lock_device(udev); - return 0; - } - - /* on the path from root to us, lock everything from - * top down, dropping parent locks when not needed - */ - t = locktree(hdev); - if (t < 0) - return t; - - /* everything is fail-fast once disconnect - * processing starts - */ - if (udev->state == USB_STATE_NOTATTACHED) { - usb_unlock_device(hdev); - return -ENODEV; - } - - /* when everyone grabs locks top->bottom, - * non-overlapping work may be concurrent - */ - usb_lock_device(udev); - usb_unlock_device(hdev); - return udev->portnum; -} - static void recursively_mark_NOTATTACHED(struct usb_device *udev) { int i; @@ -2594,10 +2551,7 @@ static void hub_events(void) /* Lock the device, then check to see if we were * disconnected while waiting for the lock to succeed. */ - if (locktree(hdev) < 0) { - usb_put_intf(intf); - continue; - } + usb_lock_device(hdev); if (hub != usb_get_intfdata(intf)) goto loop; |