USB: change locking for device-level autosuspend
This patch (as1323) changes the locking requirements for usb_autosuspend_device(), usb_autoresume_device(), and usb_try_autosuspend_device(). This isn't a very important change; mainly it's meant to make the locking more uniform. The most tricky part of the patch involves changes to usbdev_open(). To avoid an ABBA locking problem, it was necessary to reduce the region protected by usbfs_mutex. Since that mutex now protects only against simultaneous open and remove, this posed no difficulty -- its scope was larger than necessary. And it turns out that usbfs_mutex is no longer needed in usbdev_release() at all. The list of usbfs "ps" structures is now protected by the device lock instead of by usbfs_mutex. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0f3dda9f7f
commit
62e299e61a
@@ -352,6 +352,7 @@ set_autosuspend(struct device *dev, struct device_attribute *attr,
|
||||
return -EINVAL;
|
||||
value *= HZ;
|
||||
|
||||
usb_lock_device(udev);
|
||||
udev->autosuspend_delay = value;
|
||||
if (value >= 0)
|
||||
usb_try_autosuspend_device(udev);
|
||||
@@ -359,6 +360,7 @@ set_autosuspend(struct device *dev, struct device_attribute *attr,
|
||||
if (usb_autoresume_device(udev) == 0)
|
||||
usb_autosuspend_device(udev);
|
||||
}
|
||||
usb_unlock_device(udev);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user