History

net: pse-pd: Fix deadlock in current limit functions

Fix a deadlock in pse_pi_get_current_limit and pse_pi_set_current_limit caused by consecutive mutex_lock calls. One in the function itself and another in pse_pi_get_voltage. Resolve the issue by using the unlocked version of pse_pi_get_voltage instead.

Kory Maincent committed 1 year ago

Commit 488fb6e1 parent 540cda71 file · +2 −2Browse files

Unified · Split

drivers/net/pse-pd/pse_core.c+2−2
@@ -319,7 +319,7 @@ static int pse_pi_get_current_limit(struct regulator_dev *rdev) · 318 unmodified lines
319 goto out;319 goto out;
320 mW = ret;320 mW = ret;
321 321
322 ret = pse_pi_get_voltage(rdev);322 ret = _pse_pi_get_voltage(rdev);
323 if (!ret) {323 if (!ret) {
324 dev_err(pcdev->dev, "Voltage null\n");324 dev_err(pcdev->dev, "Voltage null\n");
325 ret = -ERANGE;325 ret = -ERANGE;
@@ -356,7 +356,7 @@ static int pse_pi_set_current_limit(struct regulator_dev *rdev, int min_uA, · 30 unmodified lines
356 356
357 id = rdev_get_id(rdev);357 id = rdev_get_id(rdev);
358 mutex_lock(&pcdev->lock);358 mutex_lock(&pcdev->lock);
359 ret = pse_pi_get_voltage(rdev);359 ret = _pse_pi_get_voltage(rdev);
360 if (!ret) {360 if (!ret) {
361 dev_err(pcdev->dev, "Voltage null\n");361 dev_err(pcdev->dev, "Voltage null\n");
362 ret = -ERANGE;362 ret = -ERANGE;