From: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
To: Zhang Rui <rui.zhang@intel.com>
Cc: rafael.j.wysocki@intel.com, linux-kernel@vger.kernel.org,
linux-pm@vger.kernel.org, srinivas.pandruvada@intel.com
Subject: Re: [PATCH] thermal/intel: Fix intel_tcc_get_temp() to support negative CPU temperature
Date: Tue, 6 Feb 2024 16:52:55 +0100 [thread overview]
Message-ID: <ZcJV143vaglGGYnX@linux.intel.com> (raw)
In-Reply-To: <20240206015409.619127-1-rui.zhang@intel.com>
On Tue, Feb 06, 2024 at 09:54:09AM +0800, Zhang Rui wrote:
> CPU temperature can be negative in some cases. Thus the negative CPU
> temperature should not be considered as a failure.
>
> Fix intel_tcc_get_temp() and its users to support negative CPU
> temperature.
>
> Fixes: a3c1f066e1c5 ("thermal/intel: Introduce Intel TCC library")
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
> ---
> .../intel/int340x_thermal/processor_thermal_device.c | 8 ++++----
> drivers/thermal/intel/intel_tcc.c | 12 ++++++------
> drivers/thermal/intel/x86_pkg_temp_thermal.c | 8 ++++----
> include/linux/intel_tcc.h | 2 +-
> 4 files changed, 15 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> index 649f67fdf345..d75fae7b7ed2 100644
> --- a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> +++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
> @@ -176,14 +176,14 @@ static int proc_thermal_get_zone_temp(struct thermal_zone_device *zone,
> int *temp)
> {
> int cpu;
> - int curr_temp;
> + int curr_temp, ret;
>
> *temp = 0;
>
> for_each_online_cpu(cpu) {
> - curr_temp = intel_tcc_get_temp(cpu, false);
> - if (curr_temp < 0)
> - return curr_temp;
> + ret = intel_tcc_get_temp(cpu, &curr_temp, false);
> + if (ret < 0)
> + return ret;
> if (!*temp || curr_temp > *temp)
> *temp = curr_temp;
> }
> diff --git a/drivers/thermal/intel/intel_tcc.c b/drivers/thermal/intel/intel_tcc.c
> index 2e5c741c41ca..5e8b7f34b395 100644
> --- a/drivers/thermal/intel/intel_tcc.c
> +++ b/drivers/thermal/intel/intel_tcc.c
> @@ -103,18 +103,19 @@ EXPORT_SYMBOL_NS_GPL(intel_tcc_set_offset, INTEL_TCC);
> /**
> * intel_tcc_get_temp() - returns the current temperature
> * @cpu: cpu that the MSR should be run on, nagative value means any cpu.
> + * @temp: pointer to the memory for saving cpu temperature.
> * @pkg: true: Package Thermal Sensor. false: Core Thermal Sensor.
> *
> * Get the current temperature returned by the CPU core/package level
> * thermal sensor, in degrees C.
> *
> - * Return: Temperature in degrees C on success, negative error code otherwise.
> + * Return: 0 on success, negative error code otherwise.
> */
> -int intel_tcc_get_temp(int cpu, bool pkg)
> +int intel_tcc_get_temp(int cpu, int *temp, bool pkg)
> {
> u32 low, high;
> u32 msr = pkg ? MSR_IA32_PACKAGE_THERM_STATUS : MSR_IA32_THERM_STATUS;
> - int tjmax, temp, err;
> + int tjmax, err;
>
> tjmax = intel_tcc_get_tjmax(cpu);
> if (tjmax < 0)
> @@ -131,9 +132,8 @@ int intel_tcc_get_temp(int cpu, bool pkg)
> if (!(low & BIT(31)))
> return -ENODATA;
>
> - temp = tjmax - ((low >> 16) & 0x7f);
> + *temp = tjmax - ((low >> 16) & 0x7f);
>
> - /* Do not allow negative CPU temperature */
> - return temp >= 0 ? temp : -ENODATA;
> + return 0;
> }
> EXPORT_SYMBOL_NS_GPL(intel_tcc_get_temp, INTEL_TCC);
> diff --git a/drivers/thermal/intel/x86_pkg_temp_thermal.c b/drivers/thermal/intel/x86_pkg_temp_thermal.c
> index 11a7f8108bbb..61c3d450ee60 100644
> --- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
> +++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
> @@ -108,11 +108,11 @@ static struct zone_device *pkg_temp_thermal_get_dev(unsigned int cpu)
> static int sys_get_curr_temp(struct thermal_zone_device *tzd, int *temp)
> {
> struct zone_device *zonedev = thermal_zone_device_priv(tzd);
> - int val;
> + int val, ret;
>
> - val = intel_tcc_get_temp(zonedev->cpu, true);
> - if (val < 0)
> - return val;
> + ret = intel_tcc_get_temp(zonedev->cpu, &val, true);
> + if (ret < 0)
> + return ret;
>
> *temp = val * 1000;
> pr_debug("sys_get_curr_temp %d\n", *temp);
> diff --git a/include/linux/intel_tcc.h b/include/linux/intel_tcc.h
> index f422612c28d6..8ff8eabb4a98 100644
> --- a/include/linux/intel_tcc.h
> +++ b/include/linux/intel_tcc.h
> @@ -13,6 +13,6 @@
> int intel_tcc_get_tjmax(int cpu);
> int intel_tcc_get_offset(int cpu);
> int intel_tcc_set_offset(int cpu, int offset);
> -int intel_tcc_get_temp(int cpu, bool pkg);
> +int intel_tcc_get_temp(int cpu, int *temp, bool pkg);
>
> #endif /* __INTEL_TCC_H__ */
> --
> 2.34.1
>
>
next prev parent reply other threads:[~2024-02-06 15:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-06 1:54 [PATCH] thermal/intel: Fix intel_tcc_get_temp() to support negative CPU temperature Zhang Rui
2024-02-06 15:52 ` Stanislaw Gruszka [this message]
2024-02-12 17:43 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZcJV143vaglGGYnX@linux.intel.com \
--to=stanislaw.gruszka@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rafael.j.wysocki@intel.com \
--cc=rui.zhang@intel.com \
--cc=srinivas.pandruvada@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.