linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH v2 2/2] power: charger-manager: Avoid recursive thermal get_temp call
@ 2014-10-13  6:01 MyungJoo Ham
  2014-10-13  8:58 ` Krzysztof Kozlowski
  0 siblings, 1 reply; 4+ messages in thread
From: MyungJoo Ham @ 2014-10-13  6:01 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Sebastian Reichel, Dmitry Eremin-Solenikov,
	David Woodhouse, Anton Vorontsov, 이종화,
	최찬우, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org
  Cc: 박경민, Marek Szyprowski,
	Bartlomiej Zolnierkiewicz

>   
>  Add a 'no_thermal' property to the power supply class. If true then
> thermal zone won't be created for this power supply in
> power_supply_register().
> 
> Power supply drivers may want to set it if they support
> POWER_SUPPLY_PROP_TEMP and they are forwarding this get property call to
> other thermal zone.
> 
> If they won't set it lockdep may report false positive deadlock for
> thermal zone's mutex because of nested calls to thermal_zone_get_temp().
> First is the call to thermal_zone_get_temp() of the driver's thermal
> zone. Thermal core gets POWER_SUPPLY_PROP_TEMP property from this
> driver. The driver then calls other thermal zone thermal_zone_get_temp()
> and returns result.
> 
> Example of such driver is charger manager.
> 
> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>

Do we really need to add another variable in the psy struct?
In the previous thread, I thought that wasn't needed, though.


Cheers,
MyungJoo

> 
> ---
> 
> Changes since v1:
> 1. New patch (new idea).
> ---
>  drivers/power/power_supply_core.c | 3 +++
>  include/linux/power_supply.h      | 6 ++++++
>  2 files changed, 9 insertions(+)
> 
> diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
> index 6cb7fe5c022d..694e8cddd5c1 100644
> --- a/drivers/power/power_supply_core.c
> +++ b/drivers/power/power_supply_core.c
> @@ -417,6 +417,9 @@ static int psy_register_thermal(struct power_supply *psy)
>  {
>  	int i;
>  
> +	if (psy->no_thermal)
> +		return 0;
> +
>  	/* Register battery zone device psy reports temperature */
>  	for (i = 0; i < psy->num_properties; i++) {
>  		if (psy->properties[i] == POWER_SUPPLY_PROP_TEMP) {
> diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
> index 3ed049673022..096dbced02ac 100644
> --- a/include/linux/power_supply.h
> +++ b/include/linux/power_supply.h
> @@ -200,6 +200,12 @@ struct power_supply {
>  	void (*external_power_changed)(struct power_supply *psy);
>  	void (*set_charged)(struct power_supply *psy);
>  
> +	/*
> +	 * Set if thermal zone should not be created for this power supply.
> +	 * For example for virtual supplies forwarding calls to actual
> +	 * sensors or other supplies.
> +	 */
> +	bool no_thermal;
>  	/* For APM emulation, think legacy userspace. */
>  	int use_for_apm;
>  
> -- 
> 1.9.1
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread
* [PATCH v2 1/2] power_supply: Add no_thermal property to prevent recursive get_temp calls
@ 2014-10-07 15:47 Krzysztof Kozlowski
  2014-10-07 15:47 ` [PATCH v2 2/2] power: charger-manager: Avoid recursive thermal get_temp call Krzysztof Kozlowski
  0 siblings, 1 reply; 4+ messages in thread
From: Krzysztof Kozlowski @ 2014-10-07 15:47 UTC (permalink / raw)
  To: Sebastian Reichel, Dmitry Eremin-Solenikov, David Woodhouse,
	Myungjoo Ham, Anton Vorontsov, Jonghwa Lee, Chanwoo Choi,
	linux-pm, linux-kernel
  Cc: Kyungmin Park, Marek Szyprowski, Bartlomiej Zolnierkiewicz,
	Krzysztof Kozlowski

Add a 'no_thermal' property to the power supply class. If true then
thermal zone won't be created for this power supply in
power_supply_register().

Power supply drivers may want to set it if they support
POWER_SUPPLY_PROP_TEMP and they are forwarding this get property call to
other thermal zone.

If they won't set it lockdep may report false positive deadlock for
thermal zone's mutex because of nested calls to thermal_zone_get_temp().
First is the call to thermal_zone_get_temp() of the driver's thermal
zone. Thermal core gets POWER_SUPPLY_PROP_TEMP property from this
driver. The driver then calls other thermal zone thermal_zone_get_temp()
and returns result.

Example of such driver is charger manager.

Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>

---

Changes since v1:
1. New patch (new idea).
---
 drivers/power/power_supply_core.c | 3 +++
 include/linux/power_supply.h      | 6 ++++++
 2 files changed, 9 insertions(+)

diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
index 6cb7fe5c022d..694e8cddd5c1 100644
--- a/drivers/power/power_supply_core.c
+++ b/drivers/power/power_supply_core.c
@@ -417,6 +417,9 @@ static int psy_register_thermal(struct power_supply *psy)
 {
 	int i;
 
+	if (psy->no_thermal)
+		return 0;
+
 	/* Register battery zone device psy reports temperature */
 	for (i = 0; i < psy->num_properties; i++) {
 		if (psy->properties[i] == POWER_SUPPLY_PROP_TEMP) {
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 3ed049673022..096dbced02ac 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -200,6 +200,12 @@ struct power_supply {
 	void (*external_power_changed)(struct power_supply *psy);
 	void (*set_charged)(struct power_supply *psy);
 
+	/*
+	 * Set if thermal zone should not be created for this power supply.
+	 * For example for virtual supplies forwarding calls to actual
+	 * sensors or other supplies.
+	 */
+	bool no_thermal;
 	/* For APM emulation, think legacy userspace. */
 	int use_for_apm;
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-10-27 18:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-13  6:01 [PATCH v2 2/2] power: charger-manager: Avoid recursive thermal get_temp call MyungJoo Ham
2014-10-13  8:58 ` Krzysztof Kozlowski
  -- strict thread matches above, loose matches on Subject: below --
2014-10-07 15:47 [PATCH v2 1/2] power_supply: Add no_thermal property to prevent recursive get_temp calls Krzysztof Kozlowski
2014-10-07 15:47 ` [PATCH v2 2/2] power: charger-manager: Avoid recursive thermal get_temp call Krzysztof Kozlowski
2014-10-27 18:32   ` Sebastian Reichel

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).