[v2,8/9] thermal: of: Set THERMAL_TRIP_FLAG_RW_TEMP directly

Message ID 9235101.CDJkKcVGEf@kreacher
State New
Headers
Series thermal: Writable trip points handling rework |

Commit Message

Rafael J. Wysocki Feb. 12, 2024, 6:40 p.m. UTC
  From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

It is now possible to flag trip points with THERMAL_TRIP_FLAG_RW_TEMP
to allow their temperature to be set from user space via sysfs instead
of using a nonzero writable trips mask during thermal zone registration,
so make the OF thermal code do that.

No intentional functional impact.

Note that this change is requisite for dropping the mask argument from
thermal_zone_device_register_with_trips() going forward.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---

v1 -> v2: Rename trip flag (Stanislaw).

---
 drivers/thermal/thermal_of.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
  

Comments

Daniel Lezcano Feb. 22, 2024, 1:48 p.m. UTC | #1
On 12/02/2024 19:40, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> It is now possible to flag trip points with THERMAL_TRIP_FLAG_RW_TEMP
> to allow their temperature to be set from user space via sysfs instead
> of using a nonzero writable trips mask during thermal zone registration,
> so make the OF thermal code do that.
> 
> No intentional functional impact.
> 
> Note that this change is requisite for dropping the mask argument from
> thermal_zone_device_register_with_trips() going forward.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> 
> v1 -> v2: Rename trip flag (Stanislaw).
> 
> ---
>   drivers/thermal/thermal_of.c |    8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
> 
> Index: linux-pm/drivers/thermal/thermal_of.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/thermal_of.c
> +++ linux-pm/drivers/thermal/thermal_of.c
> @@ -117,6 +117,8 @@ static int thermal_of_populate_trip(stru
>   		return ret;
>   	}
>   
> +	trip->flags = THERMAL_TRIP_FLAG_RW_TEMP;
> +
>   	return 0;
>   }

Even if you are not at the origin of this default behavior. I'm 
wondering if we should be more protective against changes from userspace 
when the firmware is telling us to protect the silicon at a specific 
temperature.

What do you think if we set the THERMAL_TRIP_FLAG_RW_TEMP only if the 
trip point is not bound to a cooling device?

So trip points without associated cooling device can be writable but 
others can be considered as managed by the kernel and no modifiable.

(This comment does not put in question this patch BTW)

> @@ -477,7 +479,7 @@ static struct thermal_zone_device *therm
>   	struct device_node *np;
>   	const char *action;
>   	int delay, pdelay;
> -	int ntrips, mask;
> +	int ntrips;
>   	int ret;
>   
>   	of_ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL);
> @@ -510,15 +512,13 @@ static struct thermal_zone_device *therm
>   	of_ops->bind = thermal_of_bind;
>   	of_ops->unbind = thermal_of_unbind;
>   
> -	mask = GENMASK_ULL((ntrips) - 1, 0);
> -
>   	ret = of_property_read_string(np, "critical-action", &action);
>   	if (!ret)
>   		if (!of_ops->critical && !strcasecmp(action, "reboot"))
>   			of_ops->critical = thermal_zone_device_critical_reboot;
>   
>   	tz = thermal_zone_device_register_with_trips(np->name, trips, ntrips,
> -						     mask, data, of_ops, &tzp,
> +						     0, data, of_ops, &tzp,
>   						     pdelay, delay);
>   	if (IS_ERR(tz)) {
>   		ret = PTR_ERR(tz);
> 
> 
>
  
Rafael J. Wysocki Feb. 22, 2024, 1:59 p.m. UTC | #2
On Thu, Feb 22, 2024 at 2:48 PM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> On 12/02/2024 19:40, Rafael J. Wysocki wrote:
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >
> > It is now possible to flag trip points with THERMAL_TRIP_FLAG_RW_TEMP
> > to allow their temperature to be set from user space via sysfs instead
> > of using a nonzero writable trips mask during thermal zone registration,
> > so make the OF thermal code do that.
> >
> > No intentional functional impact.
> >
> > Note that this change is requisite for dropping the mask argument from
> > thermal_zone_device_register_with_trips() going forward.
> >
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > ---
> >
> > v1 -> v2: Rename trip flag (Stanislaw).
> >
> > ---
> >   drivers/thermal/thermal_of.c |    8 ++++----
> >   1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > Index: linux-pm/drivers/thermal/thermal_of.c
> > ===================================================================
> > --- linux-pm.orig/drivers/thermal/thermal_of.c
> > +++ linux-pm/drivers/thermal/thermal_of.c
> > @@ -117,6 +117,8 @@ static int thermal_of_populate_trip(stru
> >               return ret;
> >       }
> >
> > +     trip->flags = THERMAL_TRIP_FLAG_RW_TEMP;
> > +
> >       return 0;
> >   }
>
> Even if you are not at the origin of this default behavior. I'm
> wondering if we should be more protective against changes from userspace
> when the firmware is telling us to protect the silicon at a specific
> temperature.
>
> What do you think if we set the THERMAL_TRIP_FLAG_RW_TEMP only if the
> trip point is not bound to a cooling device?
>
> So trip points without associated cooling device can be writable but
> others can be considered as managed by the kernel and no modifiable.

This sounds reasonable to me.

This is mostly relevant to thermal_of anyway, because the other
drivers asking for writable trip temperature seem to want it
regardless.

> (This comment does not put in question this patch BTW)

OK
  
Daniel Lezcano Feb. 22, 2024, 3:33 p.m. UTC | #3
On 12/02/2024 19:40, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> It is now possible to flag trip points with THERMAL_TRIP_FLAG_RW_TEMP
> to allow their temperature to be set from user space via sysfs instead
> of using a nonzero writable trips mask during thermal zone registration,
> so make the OF thermal code do that.
> 
> No intentional functional impact.
> 
> Note that this change is requisite for dropping the mask argument from
> thermal_zone_device_register_with_trips() going forward.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>


Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
  

Patch

Index: linux-pm/drivers/thermal/thermal_of.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_of.c
+++ linux-pm/drivers/thermal/thermal_of.c
@@ -117,6 +117,8 @@  static int thermal_of_populate_trip(stru
 		return ret;
 	}
 
+	trip->flags = THERMAL_TRIP_FLAG_RW_TEMP;
+
 	return 0;
 }
 
@@ -477,7 +479,7 @@  static struct thermal_zone_device *therm
 	struct device_node *np;
 	const char *action;
 	int delay, pdelay;
-	int ntrips, mask;
+	int ntrips;
 	int ret;
 
 	of_ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL);
@@ -510,15 +512,13 @@  static struct thermal_zone_device *therm
 	of_ops->bind = thermal_of_bind;
 	of_ops->unbind = thermal_of_unbind;
 
-	mask = GENMASK_ULL((ntrips) - 1, 0);
-
 	ret = of_property_read_string(np, "critical-action", &action);
 	if (!ret)
 		if (!of_ops->critical && !strcasecmp(action, "reboot"))
 			of_ops->critical = thermal_zone_device_critical_reboot;
 
 	tz = thermal_zone_device_register_with_trips(np->name, trips, ntrips,
-						     mask, data, of_ops, &tzp,
+						     0, data, of_ops, &tzp,
 						     pdelay, delay);
 	if (IS_ERR(tz)) {
 		ret = PTR_ERR(tz);