mirror of
https://github.com/torvalds/linux.git
synced 2026-03-13 23:46:14 +01:00
usb: musb: omap2430: fix device leak at unbind
Make sure to drop the reference to the control device taken by
of_find_device_by_node() during probe when the driver is unbound.
Fixes: 8934d3e4d0 ("usb: musb: omap2430: Don't use omap_get_control_dev()")
Cc: stable@vger.kernel.org # 3.13
Cc: Roger Quadros <rogerq@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20250724091910.21092-5-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
868837b0a9
commit
1473e9e767
1 changed files with 9 additions and 5 deletions
|
|
@ -400,7 +400,7 @@ static int omap2430_probe(struct platform_device *pdev)
|
|||
ret = platform_device_add_resources(musb, pdev->resource, pdev->num_resources);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to add resources\n");
|
||||
goto err2;
|
||||
goto err_put_control_otghs;
|
||||
}
|
||||
|
||||
if (populate_irqs) {
|
||||
|
|
@ -413,7 +413,7 @@ static int omap2430_probe(struct platform_device *pdev)
|
|||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
ret = -EINVAL;
|
||||
goto err2;
|
||||
goto err_put_control_otghs;
|
||||
}
|
||||
|
||||
musb_res[i].start = res->start;
|
||||
|
|
@ -441,14 +441,14 @@ static int omap2430_probe(struct platform_device *pdev)
|
|||
ret = platform_device_add_resources(musb, musb_res, i);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to add IRQ resources\n");
|
||||
goto err2;
|
||||
goto err_put_control_otghs;
|
||||
}
|
||||
}
|
||||
|
||||
ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to add platform_data\n");
|
||||
goto err2;
|
||||
goto err_put_control_otghs;
|
||||
}
|
||||
|
||||
pm_runtime_enable(glue->dev);
|
||||
|
|
@ -463,7 +463,9 @@ static int omap2430_probe(struct platform_device *pdev)
|
|||
|
||||
err3:
|
||||
pm_runtime_disable(glue->dev);
|
||||
|
||||
err_put_control_otghs:
|
||||
if (!IS_ERR(glue->control_otghs))
|
||||
put_device(glue->control_otghs);
|
||||
err2:
|
||||
platform_device_put(musb);
|
||||
|
||||
|
|
@ -477,6 +479,8 @@ static void omap2430_remove(struct platform_device *pdev)
|
|||
|
||||
platform_device_unregister(glue->musb);
|
||||
pm_runtime_disable(glue->dev);
|
||||
if (!IS_ERR(glue->control_otghs))
|
||||
put_device(glue->control_otghs);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue