Re: [PATCH] thermal: intel: Initialize RW trip to THERMAL_TEMP_INVALID
From: Srinivas Pandruvada
Date: Wed May 12 2021 - 13:16:10 EST
On Wed, 2021-05-12 at 17:54 +0200, Daniel Lezcano wrote:
> On 12/05/2021 17:52, Srinivas Pandruvada wrote:
> > On Fri, 2021-04-30 at 05:23 -0700, Srinivas Pandruvada wrote:
> > > After commit 81ad4276b505 ("Thermal: Ignore invalid trip points")
> > > all
> > > user_space governor notifications via RW trip point is broken in
> > > intel
> > > thermal drivers. This commits marks trip_points with value of 0
> > > during
> > > call to thermal_zone_device_register() as invalid. RW trip points
> > > can
> > > be
> > > 0 as user space will set the correct trip temperature later.
> > >
> > > During driver init, x86_package_temp and all int340x drivers sets
> > > RW
> > > trip
> > > temperature as 0. This results in all these trips marked as
> > > invalid
> > > by
> > > the thermal core.
> > >
> > > To fix this initialize RW trips to THERMAL_TEMP_INVALID instead
> > > of 0.
> > >
> > Any chance that we can take care of this issue during 5.13-rc*?
>
> Yes, I will take care of it
Thanks.
>
>
> > > Cc: <stable@xxxxxxxxxxxxxxx>
> > > Signed-off-by: Srinivas Pandruvada <
> > > srinivas.pandruvada@xxxxxxxxxxxxxxx>
> > > ---
> > > drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c | 4
> > > ++++
> > > drivers/thermal/intel/x86_pkg_temp_thermal.c | 2
> > > +-
> > > 2 files changed, 5 insertions(+), 1 deletion(-)
> > >
> > > diff --git
> > > a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
> > > b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
> > > index d1248ba943a4..62c0aa5d0783 100644
> > > ---
> > > a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
> > > +++
> > > b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
> > > @@ -237,6 +237,8 @@ struct int34x_thermal_zone
> > > *int340x_thermal_zone_add(struct acpi_device *adev,
> > > if (ACPI_FAILURE(status))
> > > trip_cnt = 0;
> > > else {
> > > + int i;
> > > +
> > > int34x_thermal_zone->aux_trips =
> > > kcalloc(trip_cnt,
> > > sizeof(*int34x_thermal_zone-
> > > > aux_trips),
> > > @@ -247,6 +249,8 @@ struct int34x_thermal_zone
> > > *int340x_thermal_zone_add(struct acpi_device *adev,
> > > }
> > > trip_mask = BIT(trip_cnt) - 1;
> > > int34x_thermal_zone->aux_trip_nr = trip_cnt;
> > > + for (i = 0; i < trip_cnt; ++i)
> > > + int34x_thermal_zone->aux_trips[i] =
> > > THERMAL_TEMP_INVALID;
> > > }
> > >
> > > trip_cnt =
> > > int340x_thermal_read_trips(int34x_thermal_zone);
> > > diff --git a/drivers/thermal/intel/x86_pkg_temp_thermal.c
> > > b/drivers/thermal/intel/x86_pkg_temp_thermal.c
> > > index 295742e83960..4d8edc61a78b 100644
> > > --- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
> > > +++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
> > > @@ -166,7 +166,7 @@ static int sys_get_trip_temp(struct
> > > thermal_zone_device *tzd,
> > > if (thres_reg_value)
> > > *temp = zonedev->tj_max - thres_reg_value * 1000;
> > > else
> > > - *temp = 0;
> > > + *temp = THERMAL_TEMP_INVALID;
> > > pr_debug("sys_get_trip_temp %d\n", *temp);
> > >
> > > return 0;
> >
> >
>
>