From d1578f33f64731fc1ea662f1b472929bed4fa9a8 Mon Sep 17 00:00:00 2001 From: Alexey Starikovskiy Date: Sat, 1 Sep 2007 00:11:59 +0400 Subject: [PATCH] --- yaml --- r: 71627 b: refs/heads/master c: 6e2157858ac94530fddbf19dc59ab6b392baf1f3 h: refs/heads/master i: 71625: ca4c8bc3c386337872c220a7c9f1559d84b52925 71623: 6af7aac436c06885e14d5b17410e0acb0c43af34 v: v3 --- [refs] | 2 +- trunk/drivers/acpi/thermal.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index b9a4789c2462..6045253c48d9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 21bc42ab852549f4a547d18d77e0e4d1b24ffd96 +refs/heads/master: 6e2157858ac94530fddbf19dc59ab6b392baf1f3 diff --git a/trunk/drivers/acpi/thermal.c b/trunk/drivers/acpi/thermal.c index 15d5fdc66a96..69ec73b0239d 100644 --- a/trunk/drivers/acpi/thermal.c +++ b/trunk/drivers/acpi/thermal.c @@ -195,6 +195,7 @@ struct acpi_thermal { struct acpi_thermal_trips trips; struct acpi_handle_list devices; struct timer_list timer; + struct mutex lock; }; static const struct file_operations acpi_thermal_state_fops = { @@ -721,11 +722,15 @@ static void acpi_thermal_check(void *data) return; } + /* Check if someone else is already running */ + if (!mutex_trylock(&tz->lock)) + return; + state = tz->state; result = acpi_thermal_get_temperature(tz); if (result) - return; + goto unlock; memset(&tz->state, 0, sizeof(tz->state)); @@ -816,8 +821,8 @@ static void acpi_thermal_check(void *data) add_timer(&(tz->timer)); } } - - return; + unlock: + mutex_unlock(&tz->lock); } /* -------------------------------------------------------------------------- @@ -1254,7 +1259,7 @@ static int acpi_thermal_add(struct acpi_device *device) strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME); strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS); acpi_driver_data(device) = tz; - + mutex_init(&tz->lock); result = acpi_thermal_get_info(tz); if (result) goto end; @@ -1324,7 +1329,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type) } acpi_thermal_remove_fs(device); - + mutex_destroy(&tz->lock); kfree(tz); return 0; }