From 5df7b44eb8b40e551d74a551d5b47dd00e3667a5 Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Wed, 13 Mar 2013 15:57:31 -0700 Subject: [PATCH] UPSTREAM: 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 Cc: Alan Stern Signed-off-by: Greg Kroah-Hartman (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 Reviewed-on: https://gerrit.chromium.org/gerrit/49015 Reviewed-by: Vincent Palatin Reviewed-by: Sameer Nanda --- drivers/usb/core/Kconfig | 16 ++++++++++++++++ drivers/usb/core/quirks.c | 16 +++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/drivers/usb/core/Kconfig b/drivers/usb/core/Kconfig index 18d02e32a3d5..42440b917cce 100644 --- a/drivers/usb/core/Kconfig +++ b/drivers/usb/core/Kconfig @@ -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 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 4c65eb6a867a..99e61e99a054 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -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 */ } -- 2.20.1