Merge remote-tracking branch 'lsk/v3.10/topic/gator' into linux-linaro-lsk
[firefly-linux-kernel-4.4.55.git] / drivers / usb / serial / bus.c
index 3c4db6d196c630257611883e9f8f7ec46f5c20b6..7229b265870aa1de1f48b4ff0e19db07ddb3d963 100644 (file)
@@ -98,13 +98,19 @@ static int usb_serial_device_remove(struct device *dev)
        struct usb_serial_port *port;
        int retval = 0;
        int minor;
+       int autopm_err;
 
        port = to_usb_serial_port(dev);
        if (!port)
                return -ENODEV;
 
-       /* make sure suspend/resume doesn't race against port_remove */
-       usb_autopm_get_interface(port->serial->interface);
+       /*
+        * Make sure suspend/resume doesn't race against port_remove.
+        *
+        * Note that no further runtime PM callbacks will be made if
+        * autopm_get fails.
+        */
+       autopm_err = usb_autopm_get_interface(port->serial->interface);
 
        minor = port->number;
        tty_unregister_device(usb_serial_tty_driver, minor);
@@ -118,7 +124,9 @@ static int usb_serial_device_remove(struct device *dev)
        dev_info(dev, "%s converter now disconnected from ttyUSB%d\n",
                 driver->description, minor);
 
-       usb_autopm_put_interface(port->serial->interface);
+       if (!autopm_err)
+               usb_autopm_put_interface(port->serial->interface);
+
        return retval;
 }