Message ID | 1638881794-3361-1-git-send-email-wangqing@vivo.com |
---|---|
State | Not Applicable |
Headers | show |
Series | usb: phy: add missing put_device() call in tegra_usb_phy_parse_pmc() | expand |
07.12.2021 15:56, Qing Wang пишет: > From: Wang Qing <wangqing@vivo.com> > > of_find_device_by_node() takes a reference to the embedded struct device > which needs to be dropped when error return. > > Add a jump target to fix the exception handling for this > function implementation. > > Signed-off-by: Wang Qing <wangqing@vivo.com> > --- > drivers/usb/phy/phy-tegra-usb.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/usb/phy/phy-tegra-usb.c b/drivers/usb/phy/phy-tegra-usb.c > index 68cd4b6..5678b7f > --- a/drivers/usb/phy/phy-tegra-usb.c > +++ b/drivers/usb/phy/phy-tegra-usb.c > @@ -1300,18 +1300,26 @@ static int tegra_usb_phy_parse_pmc(struct device *dev, > err = devm_add_action_or_reset(dev, tegra_usb_phy_put_pmc_device, > &pmc_pdev->dev); This devm_add_action_or_reset() takes care of dropping the reference. This patch is incorrect.
diff --git a/drivers/usb/phy/phy-tegra-usb.c b/drivers/usb/phy/phy-tegra-usb.c index 68cd4b6..5678b7f --- a/drivers/usb/phy/phy-tegra-usb.c +++ b/drivers/usb/phy/phy-tegra-usb.c @@ -1300,18 +1300,26 @@ static int tegra_usb_phy_parse_pmc(struct device *dev, err = devm_add_action_or_reset(dev, tegra_usb_phy_put_pmc_device, &pmc_pdev->dev); if (err) - return err; + goto error_put_device; - if (!platform_get_drvdata(pmc_pdev)) - return -EPROBE_DEFER; + if (!platform_get_drvdata(pmc_pdev)) { + err = -EPROBE_DEFER; + goto error_put_device; + } phy->pmc_regmap = dev_get_regmap(&pmc_pdev->dev, "usb_sleepwalk"); - if (!phy->pmc_regmap) - return -EINVAL; + if (!phy->pmc_regmap) { + err = -EINVAL; + goto error_put_device; + } phy->instance = args.args[0]; return 0; + +error_put_device: + put_device(&pmc_pdev->dev); + return err; } static const struct tegra_phy_soc_config tegra20_soc_config = {