[PATCH] hwmon: adt7470: Allow faster removal

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



adt7470_remove will wait for the update thread to complete before
returning. This has a worst-case time of up to the user-configurable
auto_update_interval.

Break this delay into smaller slices to allow the thread to exit quickly
when adt7470_remove is called.

Signed-off-by: Joshua Scott <joshua.scott@xxxxxxxxxxxxxxxxxxx>
---
 drivers/hwmon/adt7470.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c
index 7d185a9..ba97392 100644
--- a/drivers/hwmon/adt7470.c
+++ b/drivers/hwmon/adt7470.c
@@ -268,14 +268,21 @@ static int adt7470_update_thread(void *p)
 {
 	struct i2c_client *client = p;
 	struct adt7470_data *data = i2c_get_clientdata(client);
+	unsigned long next_read = jiffies - 1;
 
 	while (!kthread_should_stop()) {
-		mutex_lock(&data->lock);
-		adt7470_read_temperatures(client, data);
-		mutex_unlock(&data->lock);
+
+		if (time_after_eq(jiffies, next_read)) {
+			next_read = jiffies + data->auto_update_interval * HZ / 1000;
+			mutex_lock(&data->lock);
+			adt7470_read_temperatures(client, data);
+			mutex_unlock(&data->lock);
+		}
+
+		msleep_interruptible(1);
+
 		if (kthread_should_stop())
 			break;
-		msleep_interruptible(data->auto_update_interval);
 	}
 
 	complete_all(&data->auto_update_stop);
-- 
2.9.0

--
To unsubscribe from this list: send the line "unsubscribe linux-hwmon" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux