They are the not the same regulators, and hence they are not locking the same mutex, looks like this is a false positive warning from lockdep. I can't think of any use case which could result in ABBA type lockup too, so we can ignore this patch for now.--- a/drivers/regulator/core.cIs the 'rdev' and 'rdev->supply' same regulators? If not then you are
>+++ b/drivers/regulator/core.c
>@@ -2919,7 +2919,7 @@ static int _regulator_get_voltage(struct regulator_dev *rdev)
> } else if (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1)) {
> ret = rdev->desc->fixed_uV;
> } else if (rdev->supply) {
>- ret = regulator_get_voltage(rdev->supply);
>+ ret = _regulator_get_voltage(rdev->supply->rdev);
just hiding false warning by removing locks thus introducing real
issue...
--
Best regards,
Krzysztof