lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 26 Mar 2021 11:55:49 -0600
From:   Ram Chandrasekar <rkumbako@...eaurora.org>
To:     Daniel Lezcano <daniel.lezcano@...aro.org>
Cc:     rkumbako@...cinc.com, Zhang Rui <rui.zhang@...el.com>,
        Amit Kucheria <amitk@...nel.org>,
        "open list:THERMAL" <linux-pm@...r.kernel.org>,
        open list <linux-kernel@...r.kernel.org>,
        "open list:ABI/API" <linux-api@...r.kernel.org>
Subject: Re: [PATCH] thermal/drivers/netlink: Add the temperature when
 crossing a trip point



On 3/25/2021 1:36 PM, Daniel Lezcano wrote:
> The slope of the temperature increase or decrease can be high and when
> the temperature crosses the trip point, there could be a significant
> difference between the trip temperature and the measured temperatures.
> 
> That forces the userspace to read the temperature back right after
> receiving a trip violation notification.
> 
> In order to be efficient, give the temperature which resulted in the
> trip violation.
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@...aro.org>

To add to Daniel's point, this patch will save a lot of back and forth 
between userspace and kernel, when the temperature is hovering around 
the trip temperature.

Certain sensors are capable of supporting temperatures with more 
granular resolution (like deci C). In those cases after a trip occurs, a 
0.1 C reduction in temperature when userspace reads will make it wait 
for some more time before taking an action.

It is not just a delay in action, but more trip notifications before 
userspace reads the temperature above trip to take an action.

I have seen this back and forth in Snapdragon chipsets.

This patch helps userspace to see the same temperature as thermal 
framework and temperature violations can be handled faster and more 
efficiently.

> ---
>   drivers/thermal/thermal_core.c    |  6 ++++--
>   drivers/thermal/thermal_netlink.c | 11 ++++++-----
>   drivers/thermal/thermal_netlink.h |  8 ++++----
>   include/uapi/linux/thermal.h      |  2 +-
>   4 files changed, 15 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 996c038f83a4..948020ef51b1 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -430,10 +430,12 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip)
>   	if (tz->last_temperature != THERMAL_TEMP_INVALID) {
>   		if (tz->last_temperature < trip_temp &&
>   		    tz->temperature >= trip_temp)
> -			thermal_notify_tz_trip_up(tz->id, trip);
> +			thermal_notify_tz_trip_up(tz->id, trip,
> +						  tz->temperature);
>   		if (tz->last_temperature >= trip_temp &&
>   		    tz->temperature < (trip_temp - hyst))
> -			thermal_notify_tz_trip_down(tz->id, trip);
> +			thermal_notify_tz_trip_down(tz->id, trip,
> +						    tz->temperature);
>   	}
>   
>   	if (type == THERMAL_TRIP_CRITICAL || type == THERMAL_TRIP_HOT)
> diff --git a/drivers/thermal/thermal_netlink.c b/drivers/thermal/thermal_netlink.c
> index 1234dbe95895..a16dd4d5d710 100644
> --- a/drivers/thermal/thermal_netlink.c
> +++ b/drivers/thermal/thermal_netlink.c
> @@ -121,7 +121,8 @@ static int thermal_genl_event_tz(struct param *p)
>   static int thermal_genl_event_tz_trip_up(struct param *p)
>   {
>   	if (nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_ID, p->tz_id) ||
> -	    nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_TRIP_ID, p->trip_id))
> +	    nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_TRIP_ID, p->trip_id) ||
> +	    nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_TEMP, p->temp))
>   		return -EMSGSIZE;
>   
>   	return 0;
> @@ -285,16 +286,16 @@ int thermal_notify_tz_disable(int tz_id)
>   	return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_DISABLE, &p);
>   }
>   
> -int thermal_notify_tz_trip_down(int tz_id, int trip_id)
> +int thermal_notify_tz_trip_down(int tz_id, int trip_id, int temp)
>   {
> -	struct param p = { .tz_id = tz_id, .trip_id = trip_id };
> +	struct param p = { .tz_id = tz_id, .trip_id = trip_id, .temp = temp };
>   
>   	return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_TRIP_DOWN, &p);
>   }
>   
> -int thermal_notify_tz_trip_up(int tz_id, int trip_id)
> +int thermal_notify_tz_trip_up(int tz_id, int trip_id, int temp)
>   {
> -	struct param p = { .tz_id = tz_id, .trip_id = trip_id };
> +	struct param p = { .tz_id = tz_id, .trip_id = trip_id, .temp = temp };
>   
>   	return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_TRIP_UP, &p);
>   }
> diff --git a/drivers/thermal/thermal_netlink.h b/drivers/thermal/thermal_netlink.h
> index 828d1dddfa98..e554f76291f4 100644
> --- a/drivers/thermal/thermal_netlink.h
> +++ b/drivers/thermal/thermal_netlink.h
> @@ -11,8 +11,8 @@ int thermal_notify_tz_create(int tz_id, const char *name);
>   int thermal_notify_tz_delete(int tz_id);
>   int thermal_notify_tz_enable(int tz_id);
>   int thermal_notify_tz_disable(int tz_id);
> -int thermal_notify_tz_trip_down(int tz_id, int id);
> -int thermal_notify_tz_trip_up(int tz_id, int id);
> +int thermal_notify_tz_trip_down(int tz_id, int id, int temp);
> +int thermal_notify_tz_trip_up(int tz_id, int id, int temp);
>   int thermal_notify_tz_trip_delete(int tz_id, int id);
>   int thermal_notify_tz_trip_add(int tz_id, int id, int type,
>   			       int temp, int hyst);
> @@ -49,12 +49,12 @@ static inline int thermal_notify_tz_disable(int tz_id)
>   	return 0;
>   }
>   
> -static inline int thermal_notify_tz_trip_down(int tz_id, int id)
> +static inline int thermal_notify_tz_trip_down(int tz_id, int id, int temp)
>   {
>   	return 0;
>   }
>   
> -static inline int thermal_notify_tz_trip_up(int tz_id, int id)
> +static inline int thermal_notify_tz_trip_up(int tz_id, int id, int temp)
>   {
>   	return 0;
>   }
> diff --git a/include/uapi/linux/thermal.h b/include/uapi/linux/thermal.h
> index c105054cbb57..bf5d9c8ef16f 100644
> --- a/include/uapi/linux/thermal.h
> +++ b/include/uapi/linux/thermal.h
> @@ -18,7 +18,7 @@ enum thermal_trip_type {
>   
>   /* Adding event notification support elements */
>   #define THERMAL_GENL_FAMILY_NAME		"thermal"
> -#define THERMAL_GENL_VERSION			0x01
> +#define THERMAL_GENL_VERSION			0x02
>   #define THERMAL_GENL_SAMPLING_GROUP_NAME	"sampling"
>   #define THERMAL_GENL_EVENT_GROUP_NAME		"event"
>   
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ