Commit 4f482038 authored by Julius Werner's avatar Julius Werner Committed by Greg Kroah-Hartman

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: default avatarJulius Werner <jwerner@chromium.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 70b55c2a
...@@ -27,6 +27,22 @@ config USB_ANNOUNCE_NEW_DEVICES ...@@ -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
......
...@@ -201,20 +201,14 @@ void usb_detect_quirks(struct usb_device *udev) ...@@ -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))
/* Hubs are automatically enabled for USB-PERSIST */
if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
udev->persist_enabled = 1; udev->persist_enabled = 1;
#else #else
/* In the absence of PM, we can safely enable USB-PERSIST /* Hubs are automatically enabled for USB-PERSIST */
* for all devices. It will affect things like hub resets if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
* and EMF-related port disables.
*/
if (!(udev->quirks & USB_QUIRK_RESET))
udev->persist_enabled = 1; udev->persist_enabled = 1;
#endif /* CONFIG_PM */ #endif /* CONFIG_USB_DEFAULT_PERSIST */
} }
void usb_detect_interface_quirks(struct usb_device *udev) void usb_detect_interface_quirks(struct usb_device *udev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment