linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] thermal: check validity get_trip_hyst function pointer in bang-bang governor
@ 2016-05-11  9:49 Michele Di Giorgio
  2016-05-22  9:40 ` Peter Feuerer
  0 siblings, 1 reply; 2+ messages in thread
From: Michele Di Giorgio @ 2016-05-11  9:49 UTC (permalink / raw)
  To: linux-pm
  Cc: linux-kernel, Javi Merino, Michele Di Giorgio, Zhang Rui,
	Eduardo Valentin, Peter Feuerer

Bang-bang thermal governor uses trip point hysteresis to make decisions.
Hysteresis is a required property in the device tree for trip points, but it is
an optional thermal zone device operation. Hence, we need to check whether the
function pointer is valid or not.

If it is not available, we assume the hysteresis to be zero. Consequently, a
highly varying temperature will make the governor continuosly switch a cooling
device ON and OFF.

CC: Zhang Rui <rui.zhang@intel.com>
CC: Eduardo Valentin <edubezval@gmail.com>
CC: Peter Feuerer <peter@piie.net>
Signed-off-by: Michele Di Giorgio <michele.digiorgio@arm.com>
---
Using trip_hyst == 0 makes the governor work sensibly but may cause oscillations
of the control signals of a cooling device. An alternative to this could be to
fail the registration of the thermal governor.

Another way would be to set the default value of the hysteresis to x% of the
trip temperature, to make the governor less sensitive to highly varying inputs.

 drivers/thermal/gov_bang_bang.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/gov_bang_bang.c b/drivers/thermal/gov_bang_bang.c
index 39d1519..bb118a1 100644
--- a/drivers/thermal/gov_bang_bang.c
+++ b/drivers/thermal/gov_bang_bang.c
@@ -29,7 +29,13 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
 	struct thermal_instance *instance;
 
 	tz->ops->get_trip_temp(tz, trip, &trip_temp);
-	tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
+
+	if (!tz->ops->get_trip_hyst) {
+		pr_warn_once("Undefined get_trip_hyst for thermal zone %s - "
+				"running with default hysteresis zero\n", tz->type);
+		trip_hyst = 0;
+	} else
+		tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
 
 	dev_dbg(&tz->device, "Trip%d[temp=%d]:temp=%d:hyst=%d\n",
 				trip, trip_temp, tz->temperature,
-- 
1.9.1


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

* Re: [PATCH] thermal: check validity get_trip_hyst function pointer in bang-bang governor
  2016-05-11  9:49 [PATCH] thermal: check validity get_trip_hyst function pointer in bang-bang governor Michele Di Giorgio
@ 2016-05-22  9:40 ` Peter Feuerer
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Feuerer @ 2016-05-22  9:40 UTC (permalink / raw)
  To: Michele Di Giorgio, linux-pm
  Cc: linux-kernel, Javi Merino, Zhang Rui, Eduardo Valentin

Hi,

14. Mai 2016 13:47 Uhr, "Michele Di Giorgio" <michele.digiorgio@arm.com> schrieb:
> Bang-bang thermal governor uses trip point hysteresis to make decisions.
> Hysteresis is a required property in the device tree for trip points, but it is
> an optional thermal zone device operation. Hence, we need to check whether the
> function pointer is valid or not.
> 
> If it is not available, we assume the hysteresis to be zero. Consequently, a
> highly varying temperature will make the governor continuosly switch a cooling
> device ON and OFF.
> 
> CC: Zhang Rui <rui.zhang@intel.com>
> CC: Eduardo Valentin <edubezval@gmail.com>
> CC: Peter Feuerer <peter@piie.net>
> Signed-off-by: Michele Di Giorgio <michele.digiorgio@arm.com>

Acked-by: Peter Feuerer <peter@piie.net>

Thanks.

-- 
kind regards,
--peter;


> ---
> Using trip_hyst == 0 makes the governor work sensibly but may cause oscillations
> of the control signals of a cooling device. An alternative to this could be to
> fail the registration of the thermal governor.
> 
> Another way would be to set the default value of the hysteresis to x% of the
> trip temperature, to make the governor less sensitive to highly varying inputs.
> 
> drivers/thermal/gov_bang_bang.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/thermal/gov_bang_bang.c b/drivers/thermal/gov_bang_bang.c
> index 39d1519..bb118a1 100644
> --- a/drivers/thermal/gov_bang_bang.c
> +++ b/drivers/thermal/gov_bang_bang.c
> @@ -29,7 +29,13 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
> struct thermal_instance *instance;
> 
> tz->ops->get_trip_temp(tz, trip, &trip_temp);
> - tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
> +
> + if (!tz->ops->get_trip_hyst) {
> + pr_warn_once("Undefined get_trip_hyst for thermal zone %s - "
> + "running with default hysteresis zero\n", tz->type);
> + trip_hyst = 0;
> + } else
> + tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
> 
> dev_dbg(&tz->device, "Trip%d[temp=%d]:temp=%d:hyst=%d\n",
> trip, trip_temp, tz->temperature,
> -- 
> 1.9.1

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

end of thread, other threads:[~2016-05-22  9:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-11  9:49 [PATCH] thermal: check validity get_trip_hyst function pointer in bang-bang governor Michele Di Giorgio
2016-05-22  9:40 ` Peter Feuerer

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