Commit ee3798fc authored by Jon Hunter's avatar Jon Hunter Committed by Greg Kroah-Hartman

soc/tegra: pmc: Remove reset sysfs entries on error

[ Upstream commit a46b51cd ]

Commit 5f84bb1a ("soc/tegra: pmc: Add sysfs entries for reset info")
added sysfs entries for Tegra reset source and level. However, these
sysfs are not removed on error and so if the registering of PMC device
is probe deferred, then the next time we attempt to probe the PMC device
warnings such as the following will be displayed on boot ...

  sysfs: cannot create duplicate filename '/devices/platform/7000e400.pmc/reset_reason'

Fix this by calling device_remove_file() for each sysfs entry added on
failure. Note that we call device_remove_file() unconditionally without
checking if the sysfs entry was created in the first place, but this
should be OK because kernfs_remove_by_name_ns() will fail silently.

Fixes: 5f84bb1a ("soc/tegra: pmc: Add sysfs entries for reset info")
Signed-off-by: default avatarJon Hunter <jonathanh@nvidia.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 47de03be
...@@ -1999,7 +1999,7 @@ static int tegra_pmc_probe(struct platform_device *pdev) ...@@ -1999,7 +1999,7 @@ static int tegra_pmc_probe(struct platform_device *pdev)
if (IS_ENABLED(CONFIG_DEBUG_FS)) { if (IS_ENABLED(CONFIG_DEBUG_FS)) {
err = tegra_powergate_debugfs_init(); err = tegra_powergate_debugfs_init();
if (err < 0) if (err < 0)
return err; goto cleanup_sysfs;
} }
err = register_restart_handler(&tegra_pmc_restart_handler); err = register_restart_handler(&tegra_pmc_restart_handler);
...@@ -2030,6 +2030,9 @@ static int tegra_pmc_probe(struct platform_device *pdev) ...@@ -2030,6 +2030,9 @@ static int tegra_pmc_probe(struct platform_device *pdev)
unregister_restart_handler(&tegra_pmc_restart_handler); unregister_restart_handler(&tegra_pmc_restart_handler);
cleanup_debugfs: cleanup_debugfs:
debugfs_remove(pmc->debugfs); debugfs_remove(pmc->debugfs);
cleanup_sysfs:
device_remove_file(&pdev->dev, &dev_attr_reset_reason);
device_remove_file(&pdev->dev, &dev_attr_reset_level);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment