[PATCH] iio: common: ms_sensors: use guard(mutex) helper
Giovanna Luisa Hirata dos Anjos
giovannaluisahirata em usp.br
Qua Abr 15 15:08:11 -03 2026
The guard(mutex) macro helps to simplify the code by automatically
releasing the mutex when the dev_data->lock variable goes out of scope.
This reduces the risk of forgetting to call mutex_unlock in error paths.
Refactor all functions in this driver to use this modern cleanup helper.
Signed-off-by: Giovanna Luisa Hirata dos Anjos <giovannaluisahirata em usp.br>
Co-developed-by: Naili Lucia Marques <naahmarque345 em usp.br>
Signed-off-by: Naili Lucia Marques <naahmarque345 em usp.br>
---
.../iio/common/ms_sensors/ms_sensors_i2c.c | 22 +++++++------------
1 file changed, 8 insertions(+), 14 deletions(-)
diff --git a/drivers/iio/common/ms_sensors/ms_sensors_i2c.c b/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
index 1960a2ce82a8..4dc9ec349dc6 100644
--- a/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
+++ b/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
@@ -9,6 +9,7 @@
#include <linux/iio/iio.h>
#include <linux/device.h>
#include <linux/delay.h>
+#include <linux/cleanup.h>
#include "ms_sensors_i2c.h"
@@ -318,9 +319,8 @@ ssize_t ms_sensors_show_battery_low(struct ms_ht_dev *dev_data,
int ret;
u8 config_reg;
- mutex_lock(&dev_data->lock);
+ guard(mutex)(&dev_data->lock);
ret = ms_sensors_read_config_reg(dev_data->client, &config_reg);
- mutex_unlock(&dev_data->lock);
if (ret)
return ret;
@@ -345,9 +345,8 @@ ssize_t ms_sensors_show_heater(struct ms_ht_dev *dev_data,
u8 config_reg;
int ret;
- mutex_lock(&dev_data->lock);
+ guard(mutex)(&dev_data->lock);
ret = ms_sensors_read_config_reg(dev_data->client, &config_reg);
- mutex_unlock(&dev_data->lock);
if (ret)
return ret;
@@ -380,10 +379,9 @@ ssize_t ms_sensors_write_heater(struct ms_ht_dev *dev_data,
if (val > 1)
return -EINVAL;
- mutex_lock(&dev_data->lock);
+ guard(mutex)(&dev_data->lock);
ret = ms_sensors_read_config_reg(dev_data->client, &config_reg);
if (ret) {
- mutex_unlock(&dev_data->lock);
return ret;
}
@@ -393,7 +391,6 @@ ssize_t ms_sensors_write_heater(struct ms_ht_dev *dev_data,
ret = i2c_smbus_write_byte_data(dev_data->client,
MS_SENSORS_CONFIG_REG_WRITE,
config_reg);
- mutex_unlock(&dev_data->lock);
if (ret) {
dev_err(&dev_data->client->dev, "Unable to write config register\n");
return ret;
@@ -421,13 +418,12 @@ int ms_sensors_ht_read_temperature(struct ms_ht_dev *dev_data,
u32 adc;
u16 delay;
- mutex_lock(&dev_data->lock);
+ guard(mutex)(&dev_data->lock);
delay = ms_sensors_ht_t_conversion_time[dev_data->res_index];
ret = ms_sensors_convert_and_read(dev_data->client,
MS_SENSORS_HT_T_CONVERSION_START,
MS_SENSORS_NO_READ_CMD,
delay, &adc);
- mutex_unlock(&dev_data->lock);
if (ret)
return ret;
@@ -462,13 +458,12 @@ int ms_sensors_ht_read_humidity(struct ms_ht_dev *dev_data,
u32 adc;
u16 delay;
- mutex_lock(&dev_data->lock);
+ guard(mutex)(&dev_data->lock);
delay = ms_sensors_ht_h_conversion_time[dev_data->res_index];
ret = ms_sensors_convert_and_read(dev_data->client,
MS_SENSORS_HT_H_CONVERSION_START,
MS_SENSORS_NO_READ_CMD,
delay, &adc);
- mutex_unlock(&dev_data->lock);
if (ret)
return ret;
@@ -625,7 +620,7 @@ int ms_sensors_read_temp_and_pressure(struct ms_tp_dev *dev_data,
s64 off, sens, t2, off2, sens2;
u16 *prom = dev_data->prom, delay;
- mutex_lock(&dev_data->lock);
+ guard(mutex)(&dev_data->lock);
delay = ms_sensors_tp_conversion_time[dev_data->res_index];
ret = ms_sensors_convert_and_read(
@@ -635,7 +630,6 @@ int ms_sensors_read_temp_and_pressure(struct ms_tp_dev *dev_data,
MS_SENSORS_TP_ADC_READ,
delay, &t_adc);
if (ret) {
- mutex_unlock(&dev_data->lock);
return ret;
}
@@ -645,7 +639,7 @@ int ms_sensors_read_temp_and_pressure(struct ms_tp_dev *dev_data,
dev_data->res_index * 2,
MS_SENSORS_TP_ADC_READ,
delay, &p_adc);
- mutex_unlock(&dev_data->lock);
+
if (ret)
return ret;
--
2.47.3
Mais detalhes sobre a lista de discussão kernel