usb: typec: intel_pmc_mux: Put fwnode in error case during ->probe()
Subsystems (3)
PATCH v2 1/3 usb: typec: intel_pmc_mux: Put fwnode in error case during ->probe()
device_get_next_child_node() bumps a reference counting of a returned variable. We have to balance it whenever we return to the caller.
---
v2: moved put call into the conditional inside the loop (Heikki)
drivers/usb/typec/mux/intel_pmc_mux.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/typec/mux/intel_pmc_mux.c +3 -1
@@ -654,8 +654,10 @@ static int pmc_usb_probe(struct platform_device *pdev)break ; ret =pmc_usb_register_port (pmc, i, fwnode); -if (ret) +if (ret) { +fwnode_handle_put (fwnode); goto err_remove_ports; + } }platform_set_drvdata (pdev, pmc);
Signature · 1 line
2.32.0
PATCH v2 2/3 usb: typec: intel_pmc_mux: Add missed error check for devm_ioremap_resource()
devm_ioremap_resource() can return an error, add missed check for it.
---
v2: added Rb tag (Heikki)
drivers/usb/typec/mux/intel_pmc_mux.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/usb/typec/mux/intel_pmc_mux.c +5 -0
@@ -604,6 +604,11 @@ static int pmc_usb_probe_iom(struct pmc_usb *pmc)return -ENOMEM ; } +if (IS_ERR (pmc->iom_base)) { +put_device (&adev->dev); +return PTR_ERR (pmc->iom_base); + } + pmc->iom_adev = adev;return 0 ;
Signature · 1 line
2.32.0
PATCH v2 3/3 usb: typec: intel_pmc_mux: Put ACPI device using acpi_dev_put()
In reply to Andy ShevchenkoFor ACPI devices we have a symmetric API to put them, so use it in the driver.
---
v2: added Rb tag (Heikki)
drivers/usb/typec/mux/intel_pmc_mux.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/usb/typec/mux/intel_pmc_mux.c +4 -4
@@ -600,12 +600,12 @@ static int pmc_usb_probe_iom(struct pmc_usb *pmc)acpi_dev_free_resource_list (&resource_list);if (!pmc->iom_base) { -put_device (&adev->dev); +acpi_dev_put (adev);return -ENOMEM ; }if (IS_ERR (pmc->iom_base)) { -put_device (&adev->dev); +acpi_dev_put (adev);return PTR_ERR (pmc->iom_base); }
@@ -676,7 +676,7 @@ static int pmc_usb_probe(struct platform_device *pdev)usb_role_switch_unregister (pmc->port[i].usb_sw); } -put_device (&pmc->iom_adev->dev); +acpi_dev_put (pmc->iom_adev);return ret; }
@@ -692,7 +692,7 @@ static int pmc_usb_remove(struct platform_device *pdev)usb_role_switch_unregister (pmc->port[i].usb_sw); } -put_device (&pmc->iom_adev->dev); +acpi_dev_put (pmc->iom_adev);return 0 ; }
Signature · 1 line
2.32.0
Quoted 6 lines · Andy Shevchenko
device_get_next_child_node()bumps a reference counting of a returned variable. We have to balance it whenever we return to the caller.Fixes 6701adfa9693 ("usb: typec: driver for Intel PMC mux control")Cc Heikki Krogerus <[email protected]>Signed-off-by Andy Shevchenko <[email protected]>
Quoted 23 lines
---
v2: moved put call into the conditional inside the loop (Heikki)drivers/usb/typec/mux/intel_pmc_mux.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)drivers/usb/typec/mux/intel_pmc_mux.c +3
-1@@ -654,8 +654,10 @@ static int pmc_usb_probe(struct platform_device *pdev)break ; ret =pmc_usb_register_port (pmc, i, fwnode); -if (ret) +if (ret) { +fwnode_handle_put (fwnode); goto err_remove_ports; + } }platform_set_drvdata (pdev, pmc);Signature · 1 line
2.32.0
Signature · 1 line
heikki