From: Wang Qing <wangqing@xxxxxxxx> 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@xxxxxxxx> --- 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); 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 = { -- 2.7.4