UPSTREAM: usb: Make USB persist default configurable
authorJulius Werner <jwerner@chromium.org>
Wed, 13 Mar 2013 22:57:31 +0000 (15:57 -0700)
committerChromeBot <chrome-bot@google.com>
Wed, 24 Apr 2013 17:59:41 +0000 (10:59 -0700)
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>
(cherry picked from commit 4f48203881ce947a0cbd8ae7b1a1a1b04aaa3766)
Cherry picked from upstream's gregkh/usb.git/usb-next

Conflicts:
    drivers/usb/core/Kconfig (trivial merge with old deprecated configs)
    drivers/usb/core/quirks.c (renamed USB_QUIRK_RESET to the older
            USB_QUIRK_RESET_MORPHS)

BUG=None
TEST=None

Change-Id: Ib63d2ed955e2916598d5ecd2d75aab9260594368
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/49015
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Sameer Nanda <snanda@chromium.org>
drivers/usb/core/Kconfig
drivers/usb/core/quirks.c

index 18d02e3..42440b9 100644 (file)
@@ -27,6 +27,22 @@ config USB_ANNOUNCE_NEW_DEVICES
 comment "Miscellaneous USB options"
        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_DEVICEFS
        bool "USB device filesystem (DEPRECATED)"
        depends on USB
index 4c65eb6..99e61e9 100644 (file)
@@ -179,18 +179,12 @@ void usb_detect_quirks(struct usb_device *udev)
                dev_dbg(&udev->dev, "USB quirks for this device: %x\n",
                                udev->quirks);
 
-       /* For the present, all devices default to USB-PERSIST enabled */
-#if 0          /* was: #ifdef CONFIG_PM */
-       /* Hubs are automatically enabled for USB-PERSIST */
-       if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
+#ifdef CONFIG_USB_DEFAULT_PERSIST
+       if (!(udev->quirks & USB_QUIRK_RESET_MORPHS))
                udev->persist_enabled = 1;
-
 #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_MORPHS))
+       /* Hubs are automatically enabled for USB-PERSIST */
+       if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
                udev->persist_enabled = 1;
-#endif /* CONFIG_PM */
+#endif /* CONFIG_USB_DEFAULT_PERSIST */
 }