diff mbox series

[v2] usb: musb: fix reference leak in musb_irq_work

Message ID 20201106115350.2281531-1-zhangqilong3@huawei.com
State New
Headers show
Series [v2] usb: musb: fix reference leak in musb_irq_work | expand

Commit Message

Zhang Qilong Nov. 6, 2020, 11:53 a.m. UTC
pm_runtime_get_sync() will increment pm usage at first and it
will resume the device later. If runtime of the device has
error or device is in inaccessible state(or other error state),
resume operation will fail. If we do not call put operation to
decrease the reference, it will result in reference leak in
musb_irq_work. Moreover, this device cannot enter the idle state
and always stay busy or other non-idle state later. So we should
fix it through adding pm_runtime_put_noidle.

Fixes: 3ba7b7795b7e8 ("usb: musb: Fix external abort on non-linefetch for musb_irq_work()")

Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
---
Changelog:
v2
- added the description and fixes for reference leak details.
---
 drivers/usb/musb/musb_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 849e0b770130..160387de59c0 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2069,7 +2069,7 @@  static void musb_irq_work(struct work_struct *data)
 	error = pm_runtime_get_sync(musb->controller);
 	if (error < 0) {
 		dev_err(musb->controller, "Could not enable: %i\n", error);
-
+		pm_runtime_put_noidle(musb->controller);
 		return;
 	}