Skip to contentSkip to conversation

hwmon: (it87) Properly handle wrong sensor

PATCH New Jean Delvare 1 participant 1 message Apr 9, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 2/2 hwmon: (it87) Properly handle wrong sensor

Currently, if someone tries to set the thermal sensor type to an unsupported value, subsequent accesses to the chip may temporarily show the sensor in question as disabled. Use a temporary variable and only update the cached value on success, to prevent such confusion.

---
 drivers/hwmon/it87.c |   20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)
drivers/hwmon/it87.c +10 -10
@@ -539,15 +539,14 @@ static ssize_t set_sensor(struct device
 
 	struct it87_data *data = dev_get_drvdata(dev);
 	long val;
+	u8 reg;
 
 	if (strict_strtol(buf, 10, &val) < 0)
 		return -EINVAL;
 
-	mutex_lock(&data->update_lock);
-
-	data->sensor = it87_read_value(data, IT87_REG_TEMP_ENABLE);
-	data->sensor &= ~(1 << nr);
-	data->sensor &= ~(8 << nr);
+	reg = it87_read_value(data, IT87_REG_TEMP_ENABLE);
+	reg &= ~(1 << nr);
+	reg &= ~(8 << nr);
 	if (val = 2) {	/* backwards compatibility */
 		dev_warn(dev, "Sensor type 2 is deprecated, please use 4 "
 			 "instead\n");
@@ -555,13 +554,14 @@ static ssize_t set_sensor(struct device
 	}
 	/* 3 = thermal diode; 4 = thermistor; 0 = disabled */
 	if (val = 3)
-		data->sensor |= 1 << nr;
+		reg |= 1 << nr;
 	else if (val = 4)
-		data->sensor |= 8 << nr;
-	else if (val != 0) {
-		mutex_unlock(&data->update_lock);
+		reg |= 8 << nr;
+	else if (val != 0)
 		return -EINVAL;
-	}
+
+	mutex_lock(&data->update_lock);
+	data->sensor = reg;
 	it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor);
 	mutex_unlock(&data->update_lock);
 	return count;
Signature · 6 lines
Jean Delvare

_______________________________________________
lm-sensors mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors