* [PATCH 1/2] regulator: dummy: force synchronous probing
@ 2025-03-10 16:33 Christian Eggers
2025-03-10 16:33 ` [PATCH 2/2] regulator: assert that dummy regulator has been probed before using it Christian Eggers
0 siblings, 1 reply; 5+ messages in thread
From: Christian Eggers @ 2025-03-10 16:33 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Douglas Anderson
Cc: linux-kernel, Christian Eggers, stable
Sometimes I get a NULL pointer dereference at boot time in kobject_get()
with the following call stack:
anatop_regulator_probe()
devm_regulator_register()
regulator_register()
regulator_resolve_supply()
kobject_get()
By placing some extra BUG_ON() statements I could verify that this is
raised because probing of the 'dummy' regulator driver is not completed
('dummy_regulator_rdev' is still NULL).
In the JTAG debugger I can see that dummy_regulator_probe() and
anatop_regulator_probe() can be run by different kernel threads
(kworker/u4:*). I haven't further investigated whether this can be
changed or if there are other possibilities to force synchronization
between these two probe routines. On the other hand I don't expect much
boot time penalty by probing the 'dummy' regulator synchronously.
Cc: stable@vger.kernel.org
Fixes: 259b93b21a9f ("regulator: Set PROBE_PREFER_ASYNCHRONOUS for drivers that existed in 4.14")
Signed-off-by: Christian Eggers <ceggers@arri.de>
---
drivers/regulator/dummy.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/regulator/dummy.c b/drivers/regulator/dummy.c
index 5b9b9e4e762d..9f59889129ab 100644
--- a/drivers/regulator/dummy.c
+++ b/drivers/regulator/dummy.c
@@ -60,7 +60,7 @@ static struct platform_driver dummy_regulator_driver = {
.probe = dummy_regulator_probe,
.driver = {
.name = "reg-dummy",
- .probe_type = PROBE_PREFER_ASYNCHRONOUS,
+ .probe_type = PROBE_FORCE_SYNCHRONOUS,
},
};
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 2/2] regulator: assert that dummy regulator has been probed before using it
2025-03-10 16:33 [PATCH 1/2] regulator: dummy: force synchronous probing Christian Eggers
@ 2025-03-10 16:33 ` Christian Eggers
2025-03-10 17:23 ` Mark Brown
0 siblings, 1 reply; 5+ messages in thread
From: Christian Eggers @ 2025-03-10 16:33 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Douglas Anderson
Cc: linux-kernel, Christian Eggers, stable
Due to asynchronous driver probing there is a chance that the dummy
regulator hasn't already been probed when first accessing it.
Cc: stable@vger.kernel.org
Signed-off-by: Christian Eggers <ceggers@arri.de>
---
drivers/regulator/core.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 4ddf0efead68..bb9fe44aea11 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -2069,6 +2069,7 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)
if (have_full_constraints()) {
r = dummy_regulator_rdev;
+ BUG_ON(!r);
get_device(&r->dev);
} else {
dev_err(dev, "Failed to resolve %s-supply for %s\n",
@@ -2086,6 +2087,7 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)
goto out;
}
r = dummy_regulator_rdev;
+ BUG_ON(!r);
get_device(&r->dev);
}
@@ -2213,6 +2215,7 @@ struct regulator *_regulator_get_common(struct regulator_dev *rdev, struct devic
*/
dev_warn(dev, "supply %s not found, using dummy regulator\n", id);
rdev = dummy_regulator_rdev;
+ BUG_ON(!rdev);
get_device(&rdev->dev);
break;
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 2/2] regulator: assert that dummy regulator has been probed before using it
2025-03-10 16:33 ` [PATCH 2/2] regulator: assert that dummy regulator has been probed before using it Christian Eggers
@ 2025-03-10 17:23 ` Mark Brown
2025-03-10 18:22 ` Christian Eggers
0 siblings, 1 reply; 5+ messages in thread
From: Mark Brown @ 2025-03-10 17:23 UTC (permalink / raw)
To: Christian Eggers; +Cc: Liam Girdwood, Douglas Anderson, linux-kernel, stable
[-- Attachment #1: Type: text/plain, Size: 628 bytes --]
On Mon, Mar 10, 2025 at 05:33:02PM +0100, Christian Eggers wrote:
> Due to asynchronous driver probing there is a chance that the dummy
> regulator hasn't already been probed when first accessing it.
> if (have_full_constraints()) {
> r = dummy_regulator_rdev;
> + BUG_ON(!r);
> get_device(&r->dev);
> } else {
> dev_err(dev, "Failed to resolve %s-supply for %s\n",
> @@ -2086,6 +2087,7 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)
> goto out;
> }
> r = dummy_regulator_rdev;
> + BUG_ON(!r);
This doesn't actually help anything - I'd expect this to trigger probe
deferral.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 2/2] regulator: assert that dummy regulator has been probed before using it
2025-03-10 17:23 ` Mark Brown
@ 2025-03-10 18:22 ` Christian Eggers
2025-03-10 19:39 ` Mark Brown
0 siblings, 1 reply; 5+ messages in thread
From: Christian Eggers @ 2025-03-10 18:22 UTC (permalink / raw)
To: Christian Eggers, Mark Brown
Cc: Liam Girdwood, Douglas Anderson, linux-kernel, stable
Am Montag, 10. März 2025, 18:23:02 CET schrieb Mark Brown:
> On Mon, Mar 10, 2025 at 05:33:02PM +0100, Christian Eggers wrote:
> > Due to asynchronous driver probing there is a chance that the dummy
> > regulator hasn't already been probed when first accessing it.
> >
> > if (have_full_constraints()) {
> >
> > r = dummy_regulator_rdev;
> >
> > + BUG_ON(!r);
> >
> > get_device(&r->dev);
> >
> > } else {
> >
> > dev_err(dev, "Failed to resolve %s-supply for
%s\n",
> >
> > @@ -2086,6 +2087,7 @@ static int regulator_resolve_supply(struct
> > regulator_dev *rdev)>
> > goto out;
> >
> > }
> > r = dummy_regulator_rdev;
> >
> > + BUG_ON(!r);
>
> This doesn't actually help anything
My idea was to help identifying the problem (if it is reintroduced again
later).
> I'd expect this to trigger probe deferral.
I can check for this tomorrow. But is it worth to use deferred probing
for a shared "NOP" driver which doesn't access any hardware? Or would this
only introduce overhead for nothing?
regards,
Christian
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 2/2] regulator: assert that dummy regulator has been probed before using it
2025-03-10 18:22 ` Christian Eggers
@ 2025-03-10 19:39 ` Mark Brown
0 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2025-03-10 19:39 UTC (permalink / raw)
To: Christian Eggers
Cc: Christian Eggers, Liam Girdwood, Douglas Anderson, linux-kernel, stable
[-- Attachment #1: Type: text/plain, Size: 775 bytes --]
On Mon, Mar 10, 2025 at 07:22:24PM +0100, Christian Eggers wrote:
> Am Montag, 10. März 2025, 18:23:02 CET schrieb Mark Brown:
> > > + BUG_ON(!r);
> > This doesn't actually help anything
> My idea was to help identifying the problem (if it is reintroduced again
> later).
> > I'd expect this to trigger probe deferral.
> I can check for this tomorrow. But is it worth to use deferred probing
> for a shared "NOP" driver which doesn't access any hardware? Or would this
> only introduce overhead for nothing?
My concern is that if something goes wrong in production then we've just
escallated the problem, given that there's a clear error handling
mechanism we could use we should take advantage of that rather than
doing something destructive.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-03-10 19:39 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-10 16:33 [PATCH 1/2] regulator: dummy: force synchronous probing Christian Eggers
2025-03-10 16:33 ` [PATCH 2/2] regulator: assert that dummy regulator has been probed before using it Christian Eggers
2025-03-10 17:23 ` Mark Brown
2025-03-10 18:22 ` Christian Eggers
2025-03-10 19:39 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®