| From 4e6a2cc12d82afbf2a38fca59b8a9c6cea173720 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Tue, 1 Oct 2019 10:49:06 +0200 |
| Subject: [PATCH] USB: usblp: fix runtime PM after driver unbind |
| |
| commit 9a31535859bfd8d1c3ed391f5e9247cd87bb7909 upstream. |
| |
| Since commit c2b71462d294 ("USB: core: Fix bug caused by duplicate |
| interface PM usage counter") USB drivers must always balance their |
| runtime PM gets and puts, including when the driver has already been |
| unbound from the interface. |
| |
| Leaving the interface with a positive PM usage counter would prevent a |
| later bound driver from suspending the device. |
| |
| Fixes: c2b71462d294 ("USB: core: Fix bug caused by duplicate interface PM usage counter") |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Link: https://lore.kernel.org/r/20191001084908.2003-3-johan@kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c |
| index 407a7a6198a2..502e9bf1746f 100644 |
| --- a/drivers/usb/class/usblp.c |
| +++ b/drivers/usb/class/usblp.c |
| @@ -461,10 +461,12 @@ static int usblp_release(struct inode *inode, struct file *file) |
| |
| mutex_lock(&usblp_mutex); |
| usblp->used = 0; |
| - if (usblp->present) { |
| + if (usblp->present) |
| usblp_unlink_urbs(usblp); |
| - usb_autopm_put_interface(usblp->intf); |
| - } else /* finish cleanup from disconnect */ |
| + |
| + usb_autopm_put_interface(usblp->intf); |
| + |
| + if (!usblp->present) /* finish cleanup from disconnect */ |
| usblp_cleanup(usblp); |
| mutex_unlock(&usblp_mutex); |
| return 0; |
| -- |
| 2.7.4 |
| |