linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eduardo Valentin <edubezval@gmail.com>
To: Rui Zhang <rui.zhang@intel.com>
Cc: Linux PM <linux-pm@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Eduardo Valentin <edubezval@gmail.com>
Subject: [PATCH 14/15] thermal: sysfs: serialize access to instances
Date: Mon, 30 May 2016 23:31:35 -0700	[thread overview]
Message-ID: <1464676296-5610-15-git-send-email-edubezval@gmail.com> (raw)
In-Reply-To: <1464676296-5610-1-git-send-email-edubezval@gmail.com>

Because instances are the result of a matching
between cdev and tz, we need to lock both
in order to access the instance reliably.

This patch locks both tz and cdev in user
facing sysfs handlers when accessing thermal
zone instance.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
---
 drivers/thermal/thermal_sysfs.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index ab78e08..31314be 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -781,14 +781,20 @@ thermal_cooling_device_trip_point_show(struct device *dev,
 				       struct device_attribute *attr, char *buf)
 {
 	struct thermal_instance *instance;
+	int trip;
 
 	instance =
 	    container_of(attr, struct thermal_instance, attr);
 
+	mutex_lock(&instance->tz->lock);
+	mutex_lock(&instance->cdev->lock);
+	trip = instance->trip;
+	mutex_unlock(&instance->cdev->lock);
+	mutex_unlock(&instance->tz->lock);
 	if (instance->trip == THERMAL_TRIPS_NONE)
 		return sprintf(buf, "-1\n");
 	else
-		return sprintf(buf, "%d\n", instance->trip);
+		return sprintf(buf, "%d\n", trip);
 }
 
 ssize_t
@@ -796,10 +802,16 @@ thermal_cooling_device_weight_show(struct device *dev,
 				   struct device_attribute *attr, char *buf)
 {
 	struct thermal_instance *instance;
+	int weight;
 
 	instance = container_of(attr, struct thermal_instance, weight_attr);
+	mutex_lock(&instance->tz->lock);
+	mutex_lock(&instance->cdev->lock);
+	weight = instance->weight;
+	mutex_unlock(&instance->cdev->lock);
+	mutex_unlock(&instance->tz->lock);
 
-	return sprintf(buf, "%d\n", instance->weight);
+	return sprintf(buf, "%d\n", weight);
 }
 
 ssize_t
@@ -815,7 +827,11 @@ thermal_cooling_device_weight_store(struct device *dev,
 		return ret;
 
 	instance = container_of(attr, struct thermal_instance, weight_attr);
+	mutex_lock(&instance->tz->lock);
+	mutex_lock(&instance->cdev->lock);
 	instance->weight = weight;
+	mutex_unlock(&instance->cdev->lock);
+	mutex_unlock(&instance->tz->lock);
 
 	return count;
 }
-- 
2.1.4


  parent reply	other threads:[~2016-05-31  6:32 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-31  6:31 [PATCH 00/15] thermal: sysfs: add locking Eduardo Valentin
2016-05-31  6:31 ` [PATCH 01/15] thermal: sysfs: lock tz in type_show Eduardo Valentin
2016-05-31  6:31 ` [PATCH 02/15] thermal: sysfs: lock tz while on access to mode properties Eduardo Valentin
2016-06-07  9:08   ` Keerthy
2016-06-07  9:22     ` Keerthy
2016-06-22  2:45       ` Zhang Rui
2016-06-22  5:06         ` [PATCH 1/1] thermal: core: call thermal_zone_device_update() after mode update Eduardo Valentin
2016-06-23 12:27           ` Rafael J. Wysocki
2016-06-23 12:37             ` Keerthy
2016-07-01 20:53             ` Eduardo Valentin
2016-06-22  5:15         ` [PATCHv2 " Eduardo Valentin
2016-06-22  9:33           ` Keerthy
2016-06-22 14:36             ` Eduardo Valentin
2016-06-22 15:05               ` Eduardo Valentin
2016-06-22 14:34         ` [PATCHv3 " Eduardo Valentin
2016-06-22 15:03         ` [PATCHv4 " Eduardo Valentin
2016-06-23  4:38           ` Keerthy
2016-06-23  4:51           ` Darren Hart
2016-06-29  6:23           ` Zhang Rui
2016-07-01 20:57             ` Eduardo Valentin
2016-07-03  9:03           ` Peter Feuerer
2016-07-02  2:49   ` [PATCHv2 1/1] thermal: sysfs: lock tz while on access to mode properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 03/15] thermal: sysfs: lock tz while on trip_point_type properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 04/15] thermal: sysfs: lock tz while on trip_point_temp properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 05/15] thermal: sysfs: lock tz while on trip_point_hyst properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 06/15] thermal: sysfs: lock tz while on passive properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 07/15] thermal: sysfs: lock tz while on policy properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 08/15] thermal: sysfs: improve locking of emul_temp_store() Eduardo Valentin
2016-05-31  6:31 ` [PATCH 09/15] thermal: sysfs: lock tz when access sustainable power properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 10/15] thermal: sysfs: lock tz when access tzp properties Eduardo Valentin
2016-05-31  6:31 ` [PATCH 11/15] thermal: sysfs: lock cdev while accessing type Eduardo Valentin
2016-05-31  6:31 ` [PATCH 12/15] thermal: sysfs: lock cdev while accessing max_state Eduardo Valentin
2016-05-31  6:31 ` [PATCH 13/15] thermal: sysfs: lock cdev while accessing cur_state Eduardo Valentin
2016-05-31  6:31 ` Eduardo Valentin [this message]
2016-05-31  6:31 ` [PATCH 15/15] thermal: sysfs: add comments describing locking strategy Eduardo Valentin
2016-06-01  3:56 ` [PATCH 00/15] thermal: sysfs: add locking Keerthy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1464676296-5610-15-git-send-email-edubezval@gmail.com \
    --to=edubezval@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rui.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).