From: Mathias Nyman mathias.nyman@linux.intel.com
commit 1208d8a84fdcae6b395c57911cdf907450d30e70 upstream.
When disabling a USB3 port the hub driver will set the port link state to U3 to prevent "ejected" or "safely removed" devices that are still physically connected from immediately re-enumerating.
If the device was really unplugged, then error messages were printed as the hub tries to set the U3 link state for a port that is no longer enabled.
xhci-hcd ee000000.usb: Cannot set link state. usb usb8-port1: cannot disable (err = -32)
Don't print error message in xhci-hub if hub tries to set port link state for a disabled port. Return -ENODEV instead which also silences hub driver.
Signed-off-by: Mathias Nyman mathias.nyman@linux.intel.com Tested-by: Yoshihiro Shimoda yoshihiro.shimoda.uh@renesas.com Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org Signed-off-by: Ross Zwisler zwisler@google.com ---
We'd like to get this commit added to linux-4.14.y, linux-4.9.y and linux-4.4.y, please. We continue to get error reports from users who are concerned about the USB error messages referred to in the changelog.
The upstream commit 1208d8a84fdc can be cherry-picked cleanly to linux-4.14.y, and this patch applies cleanly to both linux-4.9.y and linux-4.4.y. I've tested both the clean cherry-pick and this version of the patch on real hardware.
--- drivers/usb/host/xhci-hub.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index 0722f75f1d6a..54bde0f45666 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -1073,13 +1073,15 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, break; }
- /* Software should not attempt to set - * port link state above '3' (U3) and the port - * must be enabled. - */ - if ((temp & PORT_PE) == 0 || - (link_state > USB_SS_PORT_LS_U3)) { - xhci_warn(xhci, "Cannot set link state.\n"); + /* Port must be enabled */ + if (!(temp & PORT_PE)) { + retval = -ENODEV; + break; + } + /* Can't set port link state above '3' (U3) */ + if (link_state > USB_SS_PORT_LS_U3) { + xhci_warn(xhci, "Cannot set port %d link state %d\n", + wIndex, link_state); goto error; }
On Fri, Oct 12, 2018 at 01:41:35PM -0600, Ross Zwisler wrote:
From: Mathias Nyman mathias.nyman@linux.intel.com
commit 1208d8a84fdcae6b395c57911cdf907450d30e70 upstream.
When disabling a USB3 port the hub driver will set the port link state to U3 to prevent "ejected" or "safely removed" devices that are still physically connected from immediately re-enumerating.
If the device was really unplugged, then error messages were printed as the hub tries to set the U3 link state for a port that is no longer enabled.
xhci-hcd ee000000.usb: Cannot set link state. usb usb8-port1: cannot disable (err = -32)
Don't print error message in xhci-hub if hub tries to set port link state for a disabled port. Return -ENODEV instead which also silences hub driver.
Signed-off-by: Mathias Nyman mathias.nyman@linux.intel.com Tested-by: Yoshihiro Shimoda yoshihiro.shimoda.uh@renesas.com Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org Signed-off-by: Ross Zwisler zwisler@google.com
We'd like to get this commit added to linux-4.14.y, linux-4.9.y and linux-4.4.y, please. We continue to get error reports from users who are concerned about the USB error messages referred to in the changelog.
The upstream commit 1208d8a84fdc can be cherry-picked cleanly to linux-4.14.y, and this patch applies cleanly to both linux-4.9.y and linux-4.4.y. I've tested both the clean cherry-pick and this version of the patch on real hardware.
Now applied, thanks.
greg k-h
linux-stable-mirror@lists.linaro.org