All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] thermal: intel: int340x: Fix temperature selection around 0 C
@ 2026-08-26 15:31 Thorsten Blum
  2026-08-28 20:20 ` srinivas pandruvada
  0 siblings, 1 reply; 3+ messages in thread
From: Thorsten Blum @ 2026-08-26 15:31 UTC (permalink / raw)
  To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
	Srinivas Pandruvada, Thorsten Blum, Stanislaw Gruszka
  Cc: Rafael J. Wysocki, linux-pm, linux-kernel

Since commit 7251b9e8a007 ("thermal/intel: Fix intel_tcc_get_temp() to
support negative CPU temperature"), intel_tcc_get_temp() can report
negative temperatures.

proc_thermal_get_zone_temp() still uses *temp as the current maximum and
as an implicit "no reading yet" marker. However, this breaks when a CPU
reports 0 C, because a subsequent negative reading can overwrite it.

Use bool temp_valid to track whether a valid temperature has been read.
Initialize *temp with the first valid reading and only update it with
warmer readings.

Fixes: 7251b9e8a007 ("thermal/intel: Fix intel_tcc_get_temp() to support negative CPU temperature")
Cc: stable@vger.kernel.org # 6.3+
Signed-off-by: Thorsten Blum <blum@kernel.org>
---
 .../intel/int340x_thermal/processor_thermal_device.c   | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
index f80dbe2ca7e4..b0284c2e2e74 100644
--- a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
+++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
@@ -179,17 +179,21 @@ static int proc_thermal_get_zone_temp(struct thermal_zone_device *zone,
 {
 	int cpu;
 	int curr_temp, ret;
-
-	*temp = 0;
+	bool temp_valid = false;
 
 	for_each_online_cpu(cpu) {
 		ret = intel_tcc_get_temp(cpu, &curr_temp, false);
 		if (ret < 0)
 			return ret;
-		if (!*temp || curr_temp > *temp)
+		if (!temp_valid || curr_temp > *temp) {
 			*temp = curr_temp;
+			temp_valid = true;
+		}
 	}
 
+	if (!temp_valid)
+		return -ENODATA;
+
 	*temp *= 1000;
 
 	return 0;

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

* Re: [PATCH] thermal: intel: int340x: Fix temperature selection around 0 C
  2026-08-26 15:31 [PATCH] thermal: intel: int340x: Fix temperature selection around 0 C Thorsten Blum
@ 2026-08-28 20:20 ` srinivas pandruvada
  2026-09-04 14:44   ` Rafael J. Wysocki (Intel)
  0 siblings, 1 reply; 3+ messages in thread
From: srinivas pandruvada @ 2026-08-28 20:20 UTC (permalink / raw)
  To: Thorsten Blum, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
	Lukasz Luba, Stanislaw Gruszka
  Cc: Rafael J. Wysocki, linux-pm, linux-kernel

On Wed, 2026-08-26 at 17:31 +0200, Thorsten Blum wrote:
> Since commit 7251b9e8a007 ("thermal/intel: Fix intel_tcc_get_temp()
> to
> support negative CPU temperature"), intel_tcc_get_temp() can report
> negative temperatures.
> 
> proc_thermal_get_zone_temp() still uses *temp as the current maximum
> and
> as an implicit "no reading yet" marker. However, this breaks when a
> CPU
> reports 0 C, because a subsequent negative reading can overwrite it.
> 
> Use bool temp_valid to track whether a valid temperature has been
> read.
> Initialize *temp with the first valid reading and only update it with
> warmer readings.
> 
> Fixes: 7251b9e8a007 ("thermal/intel: Fix intel_tcc_get_temp() to
> support negative CPU temperature")
> Cc: stable@vger.kernel.org # 6.3+
> Signed-off-by: Thorsten Blum <blum@kernel.org>

    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>

> ---
>  .../intel/int340x_thermal/processor_thermal_device.c   | 10 +++++++-
> --
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git
> a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> index f80dbe2ca7e4..b0284c2e2e74 100644
> ---
> a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> +++
> b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> @@ -179,17 +179,21 @@ static int proc_thermal_get_zone_temp(struct
> thermal_zone_device *zone,
>  {
>  	int cpu;
>  	int curr_temp, ret;
> -
> -	*temp = 0;
> +	bool temp_valid = false;
>  
>  	for_each_online_cpu(cpu) {
>  		ret = intel_tcc_get_temp(cpu, &curr_temp, false);
>  		if (ret < 0)
>  			return ret;
> -		if (!*temp || curr_temp > *temp)
> +		if (!temp_valid || curr_temp > *temp) {
>  			*temp = curr_temp;
> +			temp_valid = true;
> +		}
>  	}
>  
> +	if (!temp_valid)
> +		return -ENODATA;
> +
>  	*temp *= 1000;
>  
>  	return 0;

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

* Re: [PATCH] thermal: intel: int340x: Fix temperature selection around 0 C
  2026-08-28 20:20 ` srinivas pandruvada
@ 2026-09-04 14:44   ` Rafael J. Wysocki (Intel)
  0 siblings, 0 replies; 3+ messages in thread
From: Rafael J. Wysocki (Intel) @ 2026-09-04 14:44 UTC (permalink / raw)
  To: srinivas pandruvada, Thorsten Blum
  Cc: Daniel Lezcano, Zhang Rui, Lukasz Luba, Stanislaw Gruszka,
	Rafael J. Wysocki, linux-pm, linux-kernel

On Fri, Aug 28, 2026 at 10:20 PM srinivas pandruvada
<srinivas.pandruvada@linux.intel.com> wrote:
>
> On Wed, 2026-08-26 at 17:31 +0200, Thorsten Blum wrote:
> > Since commit 7251b9e8a007 ("thermal/intel: Fix intel_tcc_get_temp()
> > to
> > support negative CPU temperature"), intel_tcc_get_temp() can report
> > negative temperatures.
> >
> > proc_thermal_get_zone_temp() still uses *temp as the current maximum
> > and
> > as an implicit "no reading yet" marker. However, this breaks when a
> > CPU
> > reports 0 C, because a subsequent negative reading can overwrite it.
> >
> > Use bool temp_valid to track whether a valid temperature has been
> > read.
> > Initialize *temp with the first valid reading and only update it with
> > warmer readings.
> >
> > Fixes: 7251b9e8a007 ("thermal/intel: Fix intel_tcc_get_temp() to
> > support negative CPU temperature")
> > Cc: stable@vger.kernel.org # 6.3+
> > Signed-off-by: Thorsten Blum <blum@kernel.org>
>
>     Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>

Applied as 7.4 material, thanks!

>
> > ---
> >  .../intel/int340x_thermal/processor_thermal_device.c   | 10 +++++++-
> > --
> >  1 file changed, 7 insertions(+), 3 deletions(-)
> >
> > diff --git
> > a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> > b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> > index f80dbe2ca7e4..b0284c2e2e74 100644
> > ---
> > a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> > +++
> > b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> > @@ -179,17 +179,21 @@ static int proc_thermal_get_zone_temp(struct
> > thermal_zone_device *zone,
> >  {
> >       int cpu;
> >       int curr_temp, ret;
> > -
> > -     *temp = 0;
> > +     bool temp_valid = false;
> >
> >       for_each_online_cpu(cpu) {
> >               ret = intel_tcc_get_temp(cpu, &curr_temp, false);
> >               if (ret < 0)
> >                       return ret;
> > -             if (!*temp || curr_temp > *temp)
> > +             if (!temp_valid || curr_temp > *temp) {
> >                       *temp = curr_temp;
> > +                     temp_valid = true;
> > +             }
> >       }
> >
> > +     if (!temp_valid)
> > +             return -ENODATA;
> > +
> >       *temp *= 1000;
> >
> >       return 0;

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

end of thread, other threads:[~2026-09-04 14:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-26 15:31 [PATCH] thermal: intel: int340x: Fix temperature selection around 0 C Thorsten Blum
2026-08-28 20:20 ` srinivas pandruvada
2026-09-04 14:44   ` Rafael J. Wysocki (Intel)

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.