All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] thermal/core: Make the userspace governor deprecated
@ 2021-10-19 13:22 Daniel Lezcano
  2021-10-19 13:22 ` [PATCH 2/2] thermal/core: Make deprecated cooling device state change from userspace Daniel Lezcano
  2021-10-19 13:31 ` [PATCH 1/2] thermal/core: Make the userspace governor deprecated Rafael J. Wysocki
  0 siblings, 2 replies; 4+ messages in thread
From: Daniel Lezcano @ 2021-10-19 13:22 UTC (permalink / raw)
  To: daniel.lezcano, rjw
  Cc: lukasz.luba, linux-kernel, linux-pm, Zhang Rui, Amit Kucheria

The userspace governor is sending temperature when polling is active
and trip point crossed events. Nothing else.

AFAICT, this governor is used with custom kernels making the userspace
governor co-existing with another governor on the same thermal zone
because there was no notification mechanism.

The new netlink thermal notification is able to provide more
information than the userspace governor and give the opportunity to
the users of this governor to replace it by a dedicated notification
framework.

The userspace governor will be removed as its usage is no longer
needed.

Add a warning message to tell the userspace governor is deprecated.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/thermal/gov_user_space.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/thermal/gov_user_space.c b/drivers/thermal/gov_user_space.c
index 82a7198bbe71..95d6d3d6b8f7 100644
--- a/drivers/thermal/gov_user_space.c
+++ b/drivers/thermal/gov_user_space.c
@@ -15,6 +15,14 @@
 
 #include "thermal_core.h"
 
+static int user_space_bind(struct thermal_zone_device *tz)
+{
+	WARN(1, "Userspace governor deprecated: use thermal netlink "	\
+	     "notification instead\n");
+
+	return 0;
+}
+
 /**
  * notify_user_space - Notifies user space about thermal events
  * @tz: thermal_zone_device
@@ -43,5 +51,6 @@ static int notify_user_space(struct thermal_zone_device *tz, int trip)
 static struct thermal_governor thermal_gov_user_space = {
 	.name		= "user_space",
 	.throttle	= notify_user_space,
+	.bind_to_tz	= user_space_bind,
 };
 THERMAL_GOVERNOR_DECLARE(thermal_gov_user_space);
-- 
2.25.1


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

* [PATCH 2/2] thermal/core: Make deprecated cooling device state change from userspace
  2021-10-19 13:22 [PATCH 1/2] thermal/core: Make the userspace governor deprecated Daniel Lezcano
@ 2021-10-19 13:22 ` Daniel Lezcano
  2021-10-19 13:36   ` Rafael J. Wysocki
  2021-10-19 13:31 ` [PATCH 1/2] thermal/core: Make the userspace governor deprecated Rafael J. Wysocki
  1 sibling, 1 reply; 4+ messages in thread
From: Daniel Lezcano @ 2021-10-19 13:22 UTC (permalink / raw)
  To: daniel.lezcano, rjw
  Cc: lukasz.luba, linux-kernel, linux-pm, Zhang Rui, Amit Kucheria

The cooling devices have their cooling device set_cur_state
read-writable all the time in the sysfs directory, thus allowing the
userspace to act on it.

The thermal framework is wrongly used by userspace as a power capping
framework by acting on the cooling device opaque state. This one then
competes with the in-kernel governor decision.

We have seen in out-of-tree kernels, a big number of devices which are
abusely declaring themselves as cooling device just to act on their
power.

The role of the thermal framework is to protect the junction
temperature of the silicon. Letting the userspace to play with a
cooling device is wrong and potentially dangerous.

The powercap framework is the right framework to do power capping and
moreover it deals with the aggregation via the dev pm qos.

As the userspace governor is marked deprecated and about to be
removed, there is no point to keep this file writable also in the
future.

Emit a warning and deprecate the interface.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/thermal/thermal_sysfs.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index 1c4aac8464a7..3f4ea3a283ae 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -610,6 +610,8 @@ cur_state_store(struct device *dev, struct device_attribute *attr,
 	unsigned long state;
 	int result;
 
+	WARN_ON_ONCE(1, "Setting cooling device state is deprecated\n");
+	
 	if (sscanf(buf, "%ld\n", &state) != 1)
 		return -EINVAL;
 
-- 
2.25.1


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

* Re: [PATCH 1/2] thermal/core: Make the userspace governor deprecated
  2021-10-19 13:22 [PATCH 1/2] thermal/core: Make the userspace governor deprecated Daniel Lezcano
  2021-10-19 13:22 ` [PATCH 2/2] thermal/core: Make deprecated cooling device state change from userspace Daniel Lezcano
@ 2021-10-19 13:31 ` Rafael J. Wysocki
  1 sibling, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2021-10-19 13:31 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Rafael J. Wysocki, Lukasz Luba, Linux Kernel Mailing List,
	Linux PM, Zhang Rui, Amit Kucheria

On Tue, Oct 19, 2021 at 3:22 PM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> The userspace governor is sending temperature when polling is active
> and trip point crossed events. Nothing else.
>
> AFAICT, this governor is used with custom kernels making the userspace
> governor co-existing with another governor on the same thermal zone
> because there was no notification mechanism.
>
> The new netlink thermal notification is able to provide more
> information than the userspace governor and give the opportunity to
> the users of this governor to replace it by a dedicated notification
> framework.
>
> The userspace governor will be removed as its usage is no longer
> needed.
>
> Add a warning message to tell the userspace governor is deprecated.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
>  drivers/thermal/gov_user_space.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/drivers/thermal/gov_user_space.c b/drivers/thermal/gov_user_space.c
> index 82a7198bbe71..95d6d3d6b8f7 100644
> --- a/drivers/thermal/gov_user_space.c
> +++ b/drivers/thermal/gov_user_space.c
> @@ -15,6 +15,14 @@
>
>  #include "thermal_core.h"
>
> +static int user_space_bind(struct thermal_zone_device *tz)
> +{
> +       WARN(1, "Userspace governor deprecated: use thermal netlink "   \
> +            "notification instead\n");

This is really aggressive, because this becomes BUG() in certain
kernel configurations.

pr_warn() should be sufficient IMO.

> +
> +       return 0;
> +}
> +
>  /**
>   * notify_user_space - Notifies user space about thermal events
>   * @tz: thermal_zone_device
> @@ -43,5 +51,6 @@ static int notify_user_space(struct thermal_zone_device *tz, int trip)
>  static struct thermal_governor thermal_gov_user_space = {
>         .name           = "user_space",
>         .throttle       = notify_user_space,
> +       .bind_to_tz     = user_space_bind,
>  };
>  THERMAL_GOVERNOR_DECLARE(thermal_gov_user_space);
> --

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

* Re: [PATCH 2/2] thermal/core: Make deprecated cooling device state change from userspace
  2021-10-19 13:22 ` [PATCH 2/2] thermal/core: Make deprecated cooling device state change from userspace Daniel Lezcano
@ 2021-10-19 13:36   ` Rafael J. Wysocki
  0 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2021-10-19 13:36 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Rafael J. Wysocki, Lukasz Luba, Linux Kernel Mailing List,
	Linux PM, Zhang Rui, Amit Kucheria

On Tue, Oct 19, 2021 at 3:22 PM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> The cooling devices have their cooling device set_cur_state
> read-writable all the time in the sysfs directory, thus allowing the
> userspace to act on it.
>
> The thermal framework is wrongly used by userspace as a power capping
> framework by acting on the cooling device opaque state. This one then
> competes with the in-kernel governor decision.
>
> We have seen in out-of-tree kernels, a big number of devices which are
> abusely declaring themselves as cooling device just to act on their
> power.
>
> The role of the thermal framework is to protect the junction
> temperature of the silicon.

It's more than that.  You also don't want to let the system's skin
temperature get too high, for example.

I would just say that the role of the thermal framework is thermal control.

> Letting the userspace to play with a
> cooling device is wrong and potentially dangerous.

Agreed, although I would say "invalid" instead of "wrong".

> The powercap framework is the right framework to do power capping and
> moreover it deals with the aggregation via the dev pm qos.
>
> As the userspace governor is marked deprecated and about to be
> removed, there is no point to keep this file writable also in the
> future.
>
> Emit a warning and deprecate the interface.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
>  drivers/thermal/thermal_sysfs.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
> index 1c4aac8464a7..3f4ea3a283ae 100644
> --- a/drivers/thermal/thermal_sysfs.c
> +++ b/drivers/thermal/thermal_sysfs.c
> @@ -610,6 +610,8 @@ cur_state_store(struct device *dev, struct device_attribute *attr,
>         unsigned long state;
>         int result;
>
> +       WARN_ON_ONCE(1, "Setting cooling device state is deprecated\n");
> +

I would use pr_warn_once() instead.

>         if (sscanf(buf, "%ld\n", &state) != 1)
>                 return -EINVAL;
>
> --

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

end of thread, other threads:[~2021-10-19 13:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-19 13:22 [PATCH 1/2] thermal/core: Make the userspace governor deprecated Daniel Lezcano
2021-10-19 13:22 ` [PATCH 2/2] thermal/core: Make deprecated cooling device state change from userspace Daniel Lezcano
2021-10-19 13:36   ` Rafael J. Wysocki
2021-10-19 13:31 ` [PATCH 1/2] thermal/core: Make the userspace governor deprecated Rafael J. Wysocki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.