]> git.hungrycats.org Git - linux/commitdiff
[PATCH] USB: locking reset/probe
authorOliver Neukum <oliver@neukum.org>
Fri, 4 Apr 2003 08:12:44 +0000 (00:12 -0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Fri, 4 Apr 2003 08:12:44 +0000 (00:12 -0800)
  - mutual exclusion between reset() and probe()

drivers/usb/core/hub.c

index fc8c00c3b432c730806eec7d4c6ac066bad38ed8..08ec7a73247aa9b5b946870ccfd932dde3401fd6 100644 (file)
@@ -1175,8 +1175,10 @@ void usb_hub_cleanup(void)
  *
  * Take a look at proc_resetdevice in devio.c for some sample code to
  * do this.
+ * Use this only from within your probe function, otherwise use
+ * usb_reset_device() below, which ensure proper locking
  */
-int usb_reset_device(struct usb_device *dev)
+int usb_physical_reset_device(struct usb_device *dev)
 {
        struct usb_device *parent = dev->parent;
        struct usb_device_descriptor *descriptor;
@@ -1306,3 +1308,16 @@ int usb_reset_device(struct usb_device *dev)
        return 0;
 }
 
+int usb_reset_device(struct usb_device *udev)
+{
+       struct device *gdev = &udev->dev;
+       int r;
+       
+       down_read(&gdev->bus->subsys.rwsem);
+       r = usb_physical_reset_device(udev);
+       up_read(&gdev->bus->subsys.rwsem);
+
+       return r;
+}
+
+