| From 1b4ecb39a732522258985390a5ee1106f10b67c8 Mon Sep 17 00:00:00 2001 |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Date: Fri, 4 Oct 2019 14:59:27 +0300 |
| Subject: [PATCH] xhci: Prevent device initiated U1/U2 link pm if exit latency |
| is too long |
| |
| commit cd9d9491e835a845c1a98b8471f88d26285e0bb9 upstream. |
| |
| If host/hub initiated link pm is prevented by a driver flag we still must |
| ensure that periodic endpoints have longer service intervals than link pm |
| exit latency before allowing device initiated link pm. |
| |
| Fix this by continue walking and checking endpoint service interval if |
| xhci_get_timeout_no_hub_lpm() returns anything else than USB3_LPM_DISABLED |
| |
| While at it fix the split line error message |
| |
| Tested-by: Jan Schmidt <jan@centricular.com> |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Link: https://lore.kernel.org/r/1570190373-30684-3-git-send-email-mathias.nyman@linux.intel.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c |
| index 3f79f35d0b19..33ed1ebf5d87 100644 |
| --- a/drivers/usb/host/xhci.c |
| +++ b/drivers/usb/host/xhci.c |
| @@ -4777,10 +4777,12 @@ static u16 xhci_calculate_lpm_timeout(struct usb_hcd *hcd, |
| if (intf->dev.driver) { |
| driver = to_usb_driver(intf->dev.driver); |
| if (driver && driver->disable_hub_initiated_lpm) { |
| - dev_dbg(&udev->dev, "Hub-initiated %s disabled " |
| - "at request of driver %s\n", |
| - state_name, driver->name); |
| - return xhci_get_timeout_no_hub_lpm(udev, state); |
| + dev_dbg(&udev->dev, "Hub-initiated %s disabled at request of driver %s\n", |
| + state_name, driver->name); |
| + timeout = xhci_get_timeout_no_hub_lpm(udev, |
| + state); |
| + if (timeout == USB3_LPM_DISABLED) |
| + return timeout; |
| } |
| } |
| |
| -- |
| 2.7.4 |
| |