Skip to content

Commit b84000f

Browse files
committed
hwmon: (pmbus_core) Fix Deadlock in pmbus_regulator_get_status
pmbus_regulator_get_status() acquires update_lock. pmbus_regulator_get_error_flags() acquires it again, resulting in an immediate deadlock. Call _pmbus_get_flags() from pmbus_regulator_get_status() directly to avoid the problem. Reported-by: Patrick Rudolph <[email protected]> Closes: https://lore.kernel.org/linux-hwmon/[email protected]/T/#u Cc: Naresh Solanki <[email protected]> Cc: [email protected] # v6.2+ Fixes: c05f477 ("hwmon: (pmbus/core) Implement regulator get_status") Signed-off-by: Guenter Roeck <[email protected]>
1 parent 0bd6678 commit b84000f

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

drivers/hwmon/pmbus/pmbus_core.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2946,6 +2946,7 @@ static int pmbus_regulator_get_status(struct regulator_dev *rdev)
29462946
struct pmbus_data *data = i2c_get_clientdata(client);
29472947
u8 page = rdev_get_id(rdev);
29482948
int status, ret;
2949+
int event;
29492950

29502951
mutex_lock(&data->update_lock);
29512952
status = pmbus_get_status(client, page, PMBUS_STATUS_WORD);
@@ -2965,7 +2966,7 @@ static int pmbus_regulator_get_status(struct regulator_dev *rdev)
29652966
goto unlock;
29662967
}
29672968

2968-
ret = pmbus_regulator_get_error_flags(rdev, &status);
2969+
ret = _pmbus_get_flags(data, rdev_get_id(rdev), &status, &event, false);
29692970
if (ret)
29702971
goto unlock;
29712972

0 commit comments

Comments
 (0)