From b0af79be2a8f2fd8f208c957dcbd46e73961a9f8 Mon Sep 17 00:00:00 2001 From: Oliver Neukum Date: Fri, 4 Apr 2003 00:12:44 -0800 Subject: [PATCH] [PATCH] USB: locking reset/probe - mutual exclusion between reset() and probe() --- drivers/usb/core/hub.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index fc8c00c3b432c..08ec7a73247aa 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -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; +} + + -- 2.53.0