On Sat, Feb 26, 2022 at 03:47:41PM PST, Guenter Roeck wrote: >On 2/26/22 15:42, Zev Weiss wrote: >>On Fri, Feb 25, 2022 at 08:06:09AM PST, Marcello Sylvester Bauer wrote: >>>From: Patrick Rudolph <patrick.rudolph@xxxxxxxxxxxxx> >>> >>>On PMBUS devices with multiple pages, the regulator ops need to be >>>protected with the update mutex. This prevents accidentally changing >>>the page in a separate thread while operating on the PMBUS_OPERATION >>>register. >>> >>>Tested on Infineon xdpe11280 while a separate thread polls for sensor >>>data. >>> >>>Signed-off-by: Patrick Rudolph <patrick.rudolph@xxxxxxxxxxxxx> >>>Signed-off-by: Marcello Sylvester Bauer <sylv@xxxxxxx> >>>--- >>>drivers/hwmon/pmbus/pmbus_core.c | 16 +++++++++++++--- >>>1 file changed, 13 insertions(+), 3 deletions(-) >>> >>>diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c >>>index 776ee2237be2..f79930162256 100644 >>>--- a/drivers/hwmon/pmbus/pmbus_core.c >>>+++ b/drivers/hwmon/pmbus/pmbus_core.c >>>@@ -2386,10 +2386,14 @@ static int pmbus_regulator_is_enabled(struct regulator_dev *rdev) >>>{ >>> struct device *dev = rdev_get_dev(rdev); >>> struct i2c_client *client = to_i2c_client(dev->parent); >>>+ struct pmbus_data *data = i2c_get_clientdata(client); >>> u8 page = rdev_get_id(rdev); >>> int ret; >>> >>>+ mutex_lock(&data->update_lock); >>> ret = pmbus_read_byte_data(client, page, PMBUS_OPERATION); >>>+ mutex_unlock(&data->update_lock); >>>+ >>> if (ret < 0) >>> return ret; >>> >>>@@ -2400,11 +2404,17 @@ static int _pmbus_regulator_on_off(struct regulator_dev *rdev, bool enable) >>>{ >>> struct device *dev = rdev_get_dev(rdev); >>> struct i2c_client *client = to_i2c_client(dev->parent); >>>+ struct pmbus_data *data = i2c_get_clientdata(client); >>> u8 page = rdev_get_id(rdev); >>>+ int ret; >>> >>>- return pmbus_update_byte_data(client, page, PMBUS_OPERATION, >>>- PB_OPERATION_CONTROL_ON, >>>- enable ? PB_OPERATION_CONTROL_ON : 0); >>>+ mutex_lock(&data->update_lock); >>>+ ret = pmbus_update_byte_data(client, page, PMBUS_OPERATION, >>>+ PB_OPERATION_CONTROL_ON, >>>+ enable ? PB_OPERATION_CONTROL_ON : 0); >>>+ mutex_unlock(&data->update_lock); >>>+ >>>+ return ret; >>>} >>> >>>static int pmbus_regulator_enable(struct regulator_dev *rdev) >>>-- >>>2.35.1 >>> >>> >> >>Looks like this doesn't cover pmbus_regulator_get_error_flags(), which >>was added recently -- perhaps rebase onto hwmon-next? >> > >This is a bug fix which needs to be applied to stable releases, or am I >missing something ? > Ah, true -- should it then be a two-patch series, with this as the first for -stable and then a second for -next that extends it to include pmbus_regulator_get_error_flags()? Zev