From: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
To: Liam Girdwood <lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Subject: [PATCH 3/5] regulator: core: Move registration of regulator device
Date: Thu, 21 Apr 2016 17:11:59 +0100 [thread overview]
Message-ID: <1461255121-5245-4-git-send-email-jonathanh@nvidia.com> (raw)
In-Reply-To: <1461255121-5245-1-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
The public functions to acquire a regulator, such as regulator_get(),
internally look-up the regulator from the list of regulators that have
been registered with the regulator device class. The registration of
a new regulator with the regulator device class happens before the
regulator has been completely setup. Therefore, it is possible that
the regulator could be acquired before it has been setup successfully.
To avoid this move the device registration of the regulator to the end
of the regulator setup and update the error exit path accordingly.
Signed-off-by: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
drivers/regulator/core.c | 24 +++++++++---------------
1 file changed, 9 insertions(+), 15 deletions(-)
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 39d05fcc07e9..754f3b4c2218 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -3993,14 +3993,6 @@ regulator_register(const struct regulator_desc *regulator_desc,
if (ret < 0)
goto wash;
- ret = device_register(&rdev->dev);
- if (ret != 0) {
- put_device(&rdev->dev);
- goto wash;
- }
-
- dev_set_drvdata(&rdev->dev, rdev);
-
if (init_data && init_data->supply_regulator)
rdev->supply_name = init_data->supply_regulator;
else if (regulator_desc->supply_name)
@@ -4020,9 +4012,17 @@ regulator_register(const struct regulator_desc *regulator_desc,
}
}
- rdev_init_debugfs(rdev);
mutex_unlock(®ulator_list_mutex);
+ ret = device_register(&rdev->dev);
+ if (ret != 0) {
+ put_device(&rdev->dev);
+ goto unset_supplies;
+ }
+
+ dev_set_drvdata(&rdev->dev, rdev);
+ rdev_init_debugfs(rdev);
+
/* try to resolve regulators supply since a new one was registered */
class_for_each_device(®ulator_class, NULL, NULL,
regulator_register_resolve_supply);
@@ -4031,17 +4031,11 @@ regulator_register(const struct regulator_desc *regulator_desc,
unset_supplies:
unset_regulator_supplies(rdev);
- regulator_ena_gpio_free(rdev);
- device_unregister(&rdev->dev);
- /* device core frees rdev */
- goto out;
-
wash:
kfree(rdev->constraints);
regulator_ena_gpio_free(rdev);
clean:
kfree(rdev);
-out:
mutex_unlock(®ulator_list_mutex);
kfree(config);
return ERR_PTR(ret);
--
2.1.4
next prev parent reply other threads:[~2016-04-21 16:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-21 16:11 [PATCH 0/5] regulator: A few fixes for supply resolution Jon Hunter
2016-04-21 16:11 ` [PATCH 1/5] regulator: core: Don't terminate supply resolution early Jon Hunter
2016-04-22 10:49 ` Applied "regulator: core: Don't terminate supply resolution early" to the regulator tree Mark Brown
[not found] ` <1461255121-5245-1-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-04-21 16:11 ` [PATCH 2/5] regulator: core: Clear the supply pointer if enabling fails Jon Hunter
2016-04-22 10:49 ` Applied "regulator: core: Clear the supply pointer if enabling fails" to the regulator tree Mark Brown
2016-04-21 16:11 ` Jon Hunter [this message]
2016-04-22 10:49 ` Applied "regulator: core: Move registration of regulator device" " Mark Brown
2016-04-21 16:12 ` [PATCH 4/5] regulator: core: Add early supply resolution for a bypassed regulator Jon Hunter
[not found] ` <1461255121-5245-5-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-04-22 10:48 ` Mark Brown
2016-04-22 11:26 ` Jon Hunter
[not found] ` <571A0A81.4010009-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-04-22 13:53 ` Mark Brown
[not found] ` <20160422135339.GD3217-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2016-04-25 14:44 ` Jon Hunter
[not found] ` <571E2D48.10509-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-04-25 16:54 ` Mark Brown
2016-04-21 16:12 ` [PATCH 5/5] regulator: helpers: Ensure bypass register field matches ON value Jon Hunter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1461255121-5245-4-git-send-email-jonathanh@nvidia.com \
--to=jonathanh-ddmlm1+adcrqt0dzr+alfa@public.gmane.org \
--cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).