2008-11-24 16:44:28

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH] regulator: move set_machine_constraints after regulator device initialization

Calling set_machine_constraints before regulator device initialization
causes crash when constraints have apply_uV set.

Signed-off-by: Mike Rapoport <[email protected]>
---
drivers/regulator/core.c | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 02a7744..c4636da 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1768,14 +1768,6 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
}
}

- /* set regulator constraints */
- ret = set_machine_constraints(rdev, &init_data->constraints);
- if (ret < 0) {
- kfree(rdev);
- rdev = ERR_PTR(ret);
- goto out;
- }
-
/* register with sysfs */
rdev->dev.class = &regulator_class;
rdev->dev.parent = dev;
@@ -1790,6 +1782,15 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,

dev_set_drvdata(&rdev->dev, rdev);

+ /* set regulator constraints */
+ ret = set_machine_constraints(rdev, &init_data->constraints);
+ if (ret < 0) {
+ device_unregister(&rdev->dev);
+ kfree(rdev);
+ rdev = ERR_PTR(ret);
+ goto out;
+ }
+
/* set supply regulator if it exists */
if (init_data->supply_regulator_dev) {
ret = set_supply(rdev,
--
1.5.6.4


2008-11-25 11:39:17

by Liam Girdwood

[permalink] [raw]
Subject: Re: [PATCH] regulator: move set_machine_constraints after regulator device initialization

On Mon, 2008-11-24 at 18:44 +0200, Mike Rapoport wrote:
> Calling set_machine_constraints before regulator device initialization
> causes crash when constraints have apply_uV set.
>
> Signed-off-by: Mike Rapoport <[email protected]>
> ---

There have been recent changes to regulator registration in the
regulator for-next branch. Does this crash still occur with for-next.

git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6.git #for-next

Liam

2008-11-25 11:45:15

by Mike Rapoport

[permalink] [raw]
Subject: Re: [PATCH] regulator: move set_machine_constraints after regulator device initialization



Liam Girdwood wrote:
> On Mon, 2008-11-24 at 18:44 +0200, Mike Rapoport wrote:
>> Calling set_machine_constraints before regulator device initialization
>> causes crash when constraints have apply_uV set.
>>
>> Signed-off-by: Mike Rapoport <[email protected]>
>> ---
>
> There have been recent changes to regulator registration in the
> regulator for-next branch. Does this crash still occur with for-next.
>
> git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6.git #for-next

I haven't tested it yet, but looking at the code it seems the crash will occur
there as well.
regulator_register() calls set_machine_constraints() before setting rdev->dev
fields. The set_machine_constraints() in turn calls rdev->ops->set_voltage()
with NULL rdev->dev.

> Liam
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

--
Sincerely yours,
Mike.