diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 6e3f3511e7ddda1ea074de694bf4b75af8deffbe..f8dc51de690074a2ad0e29b73acf1d62130be32a 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1911,8 +1911,16 @@ static int regulator_resolve_supply(struct regulator_dev *rdev) if (rdev->use_count) { ret = regulator_enable(rdev->supply); if (ret < 0) { - _regulator_put(rdev->supply); + struct regulator *supply; + + regulator_lock_two(rdev, rdev->supply->rdev, &ww_ctx); + + supply = rdev->supply; rdev->supply = NULL; + + regulator_unlock_two(rdev, supply->rdev, &ww_ctx); + + regulator_put(supply); goto out; } }