lkml.org 
[lkml]   [2018]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 057/113] USB: remove LPM management from usb_driver_claim_interface()
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alan Stern <stern@rowland.harvard.edu>

    commit c183813fcee44a249339b7c46e1ad271ca1870aa upstream.

    usb_driver_claim_interface() disables and re-enables Link Power
    Management, but it shouldn't do either one, for the reasons listed
    below. This patch removes the two LPM-related function calls from the
    routine.

    The reason for disabling LPM in the analogous function
    usb_probe_interface() is so that drivers won't have to deal with
    unwanted LPM transitions in their probe routine. But
    usb_driver_claim_interface() doesn't call the driver's probe routine
    (or any other callbacks), so that reason doesn't apply here.

    Furthermore, no driver other than usbfs will ever call
    usb_driver_claim_interface() unless it is already bound to another
    interface in the same device, which means disabling LPM here would be
    redundant. usbfs doesn't interact with LPM at all.

    Lastly, the error return from usb_unlocked_disable_lpm() isn't handled
    properly; the code doesn't clean up its earlier actions before
    returning.

    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Fixes: 8306095fd2c1 ("USB: Disable USB 3.0 LPM in critical sections.")
    CC: <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/core/driver.c | 15 ---------------
    1 file changed, 15 deletions(-)

    --- a/drivers/usb/core/driver.c
    +++ b/drivers/usb/core/driver.c
    @@ -509,7 +509,6 @@ int usb_driver_claim_interface(struct us
    struct device *dev;
    struct usb_device *udev;
    int retval = 0;
    - int lpm_disable_error = -ENODEV;

    if (!iface)
    return -ENODEV;
    @@ -530,16 +529,6 @@ int usb_driver_claim_interface(struct us

    iface->condition = USB_INTERFACE_BOUND;

    - /* See the comment about disabling LPM in usb_probe_interface(). */
    - if (driver->disable_hub_initiated_lpm) {
    - lpm_disable_error = usb_unlocked_disable_lpm(udev);
    - if (lpm_disable_error) {
    - dev_err(&iface->dev, "%s Failed to disable LPM for driver %s\n.",
    - __func__, driver->name);
    - return -ENOMEM;
    - }
    - }
    -
    /* Claimed interfaces are initially inactive (suspended) and
    * runtime-PM-enabled, but only if the driver has autosuspend
    * support. Otherwise they are marked active, to prevent the
    @@ -558,10 +547,6 @@ int usb_driver_claim_interface(struct us
    if (device_is_registered(dev))
    retval = device_bind_driver(dev);

    - /* Attempt to re-enable USB3 LPM, if the disable was successful. */
    - if (!lpm_disable_error)
    - usb_unlocked_enable_lpm(udev);
    -
    if (retval) {
    dev->driver = NULL;
    usb_set_intfdata(iface, NULL);

    \
     
     \ /
      Last update: 2018-10-08 21:18    [W:2.048 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site