usb: Make USB persist default configurable

Commit 9214d1d8 set the USB persist flag as a default for all devices.
This might be desirable for some distributions, but it certainly has its
trade-offs... most importantly, it can significantly increase system
resume time, because the kernel blocks on resuming (and sometimes
resetting) USB devices before it unfreezes userspace.

This patch introduces a new config option CONFIG_USB_DEFAULT_PERSIST,
which allows distributions to make this decision on their own without
the need to carry a custom patch or revert the kernel's setting in
userspace.

[edited the Kconfig help text a bit - gregkh]

Signed-off-by: Julius Werner <jwerner@chromium.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Julius Werner 2013-03-13 15:57:31 -07:00 committed by Greg Kroah-Hartman
parent 70b55c2ad0
commit 4f48203881
2 changed files with 21 additions and 11 deletions

View File

@ -27,6 +27,22 @@ config USB_ANNOUNCE_NEW_DEVICES
comment "Miscellaneous USB options" comment "Miscellaneous USB options"
depends on USB depends on USB
config USB_DEFAULT_PERSIST
bool "Enable USB persist by default"
depends on USB
default y
help
Say N here if you don't want USB power session persistance
enabled by default. If you say N it will make suspended USB
devices that lose power get reenumerated as if they had been
unplugged, causing any mounted filesystems to be lost. The
persist feature can still be enabled for individual devices
through the power/persist sysfs node. See
Documentation/usb/persist.txt for more info.
If you have any questions about this, say Y here, only say N
if you know exactly what you are doing.
config USB_DYNAMIC_MINORS config USB_DYNAMIC_MINORS
bool "Dynamic USB minor allocation" bool "Dynamic USB minor allocation"
depends on USB depends on USB

View File

@ -201,20 +201,14 @@ void usb_detect_quirks(struct usb_device *udev)
dev_dbg(&udev->dev, "USB quirks for this device: %x\n", dev_dbg(&udev->dev, "USB quirks for this device: %x\n",
udev->quirks); udev->quirks);
/* For the present, all devices default to USB-PERSIST enabled */ #ifdef CONFIG_USB_DEFAULT_PERSIST
#if 0 /* was: #ifdef CONFIG_PM */ if (!(udev->quirks & USB_QUIRK_RESET))
udev->persist_enabled = 1;
#else
/* Hubs are automatically enabled for USB-PERSIST */ /* Hubs are automatically enabled for USB-PERSIST */
if (udev->descriptor.bDeviceClass == USB_CLASS_HUB) if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
udev->persist_enabled = 1; udev->persist_enabled = 1;
#endif /* CONFIG_USB_DEFAULT_PERSIST */
#else
/* In the absence of PM, we can safely enable USB-PERSIST
* for all devices. It will affect things like hub resets
* and EMF-related port disables.
*/
if (!(udev->quirks & USB_QUIRK_RESET))
udev->persist_enabled = 1;
#endif /* CONFIG_PM */
} }
void usb_detect_interface_quirks(struct usb_device *udev) void usb_detect_interface_quirks(struct usb_device *udev)