Linux Power Management development
 help / color / mirror / Atom feed
From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Linux PM <linux-pm@vger.kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Lukasz Luba <lukasz.luba@arm.com>,
	Zhang Rui <rui.zhang@intel.com>
Subject: Re: [PATCH v3 06/14] thermal: core: Introduce .should_bind() thermal zone callback
Date: Wed, 21 Aug 2024 15:21:05 +0200	[thread overview]
Message-ID: <19beefd9-d3f9-4d43-a45d-d241996de2d0@linaro.org> (raw)
In-Reply-To: <9334403.CDJkKcVGEf@rjwysocki.net>

On 19/08/2024 18:00, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> The current design of the code binding cooling devices to trip points in
> thermal zones is convoluted and hard to follow.
> 
> Namely, a driver that registers a thermal zone can provide .bind()
> and .unbind() operations for it, which are required to call either
> thermal_bind_cdev_to_trip() and thermal_unbind_cdev_from_trip(),
> respectively, or thermal_zone_bind_cooling_device() and
> thermal_zone_unbind_cooling_device(), respectively, for every relevant
> trip point and the given cooling device.  Moreover, if .bind() is
> provided and .unbind() is not, the cleanup necessary during the removal
> of a thermal zone or a cooling device may not be carried out.
> 
> In other words, the core relies on the thermal zone owners to do the
> right thing, which is error prone and far from obvious, even though all
> of that is not really necessary.  Specifically, if the core could ask
> the thermal zone owner, through a special thermal zone callback, whether
> or not a given cooling device should be bound to a given trip point in
> the given thermal zone, it might as well carry out all of the binding
> and unbinding by itself.  In particular, the unbinding can be done
> automatically without involving the thermal zone owner at all because
> all of the thermal instances associated with a thermal zone or cooling
> device going away must be deleted regardless.
> 
> Accordingly, introduce a new thermal zone operation, .should_bind(),
> that can be invoked by the thermal core for a given thermal zone,
> trip point and cooling device combination in order to check whether
> or not the cooling device should be bound to the trip point at hand.
> It takes an additional cooling_spec argument allowing the thermal
> zone owner to specify the highest and lowest cooling states of the
> cooling device and its weight for the given trip point binding.
> 
> Make the thermal core use this operation, if present, in the absence of
> .bind() and .unbind().  Note that .should_bind() will be called under
> the thermal zone lock.
> 
> No intentional functional impact.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> 
> v1 -> v3: No changes (previously [08/17])
> 
> ---
>   drivers/thermal/thermal_core.c |  106 +++++++++++++++++++++++++++++++----------
>   include/linux/thermal.h        |   10 +++
>   2 files changed, 92 insertions(+), 24 deletions(-)
> 
> Index: linux-pm/include/linux/thermal.h
> ===================================================================
> --- linux-pm.orig/include/linux/thermal.h
> +++ linux-pm/include/linux/thermal.h
> @@ -85,11 +85,21 @@ struct thermal_trip {
>   
>   struct thermal_zone_device;
>   
> +struct cooling_spec {
> +	unsigned long upper;	/* Highest cooling state  */
> +	unsigned long lower;	/* Lowest cooling state  */
> +	unsigned int weight;	/* Cooling device weight */
> +};
> +
>   struct thermal_zone_device_ops {
>   	int (*bind) (struct thermal_zone_device *,
>   		     struct thermal_cooling_device *);
>   	int (*unbind) (struct thermal_zone_device *,
>   		       struct thermal_cooling_device *);
> +	bool (*should_bind) (struct thermal_zone_device *,
> +			     const struct thermal_trip *,
> +			     struct thermal_cooling_device *,
> +			     struct cooling_spec *);
>   	int (*get_temp) (struct thermal_zone_device *, int *);
>   	int (*set_trips) (struct thermal_zone_device *, int, int);
>   	int (*change_mode) (struct thermal_zone_device *,
> Index: linux-pm/drivers/thermal/thermal_core.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/thermal_core.c
> +++ linux-pm/drivers/thermal/thermal_core.c
> @@ -991,12 +991,61 @@ static struct class *thermal_class;
>   
>   static inline
>   void print_bind_err_msg(struct thermal_zone_device *tz,
> +			const struct thermal_trip *trip,
>   			struct thermal_cooling_device *cdev, int ret)
>   {
> +	if (trip) {
> +		dev_err(&tz->device, "binding cdev %s to trip %d failed: %d\n",
> +			cdev->type, thermal_zone_trip_id(tz, trip), ret);
> +		return;
> +	}
> +
>   	dev_err(&tz->device, "binding zone %s with cdev %s failed:%d\n",
>   		tz->type, cdev->type, ret);
>   }
>   
> +static void thermal_zone_cdev_binding(struct thermal_zone_device *tz,
> +				      struct thermal_cooling_device *cdev)

nit picking: is there a reason to use 'binding' instead of 'bind' ?

IMO it would appear more consistent to keep the same wording than the 
ops. The present participle is usually used to describe an action which 
is happening, usually to report back an event. Here it is more an action 
to be done (feel free to send a separate patch for the renaming).

Other than that

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

-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

  parent reply	other threads:[~2024-08-21 13:21 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-19 15:49 [PATCH v3 00/14] thermal: Rework binding cooling devices to trip points Rafael J. Wysocki
2024-08-19 15:50 ` [PATCH v3 01/14] thermal: core: Fold two functions into their respective callers Rafael J. Wysocki
2024-08-20  7:04   ` Zhang, Rui
2024-08-21  7:57   ` Daniel Lezcano
2024-08-19 15:51 ` [PATCH v3 02/14] thermal: core: Rearrange checks in thermal_bind_cdev_to_trip() Rafael J. Wysocki
2024-08-20  7:05   ` Zhang, Rui
2024-08-21  7:59   ` Daniel Lezcano
2024-08-21  8:49   ` lihuisong (C)
2024-08-21  9:28     ` Daniel Lezcano
2024-08-21  9:44       ` lihuisong (C)
2024-08-21 10:49         ` Daniel Lezcano
2024-08-21 11:22           ` lihuisong (C)
2024-08-21 11:12         ` Rafael J. Wysocki
2024-08-21 10:51     ` Rafael J. Wysocki
2024-08-19 15:52 ` [PATCH v3 03/14] thermal: core: Drop redundant thermal instance checks Rafael J. Wysocki
2024-08-20  7:05   ` Zhang, Rui
2024-08-21  9:32   ` Daniel Lezcano
2024-08-21 11:11     ` Rafael J. Wysocki
2024-08-21 11:56       ` Daniel Lezcano
2024-08-21 12:52         ` Rafael J. Wysocki
2024-08-19 15:56 ` [PATCH v3 04/14] thermal: sysfs: Use the dev argument in instance-related show/store Rafael J. Wysocki
2024-08-20  7:05   ` Zhang, Rui
2024-08-20  7:59   ` lihuisong (C)
2024-08-21  9:36   ` Daniel Lezcano
2024-08-19 15:58 ` [PATCH v3 05/14] thermal: core: Move thermal zone locking out of bind/unbind functions Rafael J. Wysocki
2024-08-20  7:05   ` Zhang, Rui
2024-08-20  8:27   ` lihuisong (C)
2024-08-20 10:27     ` Rafael J. Wysocki
2024-08-21  9:02       ` lihuisong (C)
2024-08-21 10:30         ` Rafael J. Wysocki
2024-08-21  9:46   ` Daniel Lezcano
2024-08-19 16:00 ` [PATCH v3 06/14] thermal: core: Introduce .should_bind() thermal zone callback Rafael J. Wysocki
2024-08-20  7:06   ` Zhang, Rui
2024-08-21  9:09   ` lihuisong (C)
2024-08-21 13:21   ` Daniel Lezcano [this message]
2024-08-19 16:02 ` [PATCH v3 07/14] thermal: ACPI: Use the " Rafael J. Wysocki
2024-08-20  7:06   ` Zhang, Rui
2024-08-21 13:22   ` Daniel Lezcano
2024-08-19 16:05 ` [PATCH v3 08/14] thermal: core: Unexport thermal_bind_cdev_to_trip() and thermal_unbind_cdev_from_trip() Rafael J. Wysocki
2024-08-20  7:08   ` Zhang, Rui
2024-08-21  9:18   ` lihuisong (C)
2024-08-21 13:23   ` Daniel Lezcano
2024-08-19 16:19 ` [PATCH v3 09/14] platform/x86: acerhdf: Use the .should_bind() thermal zone callback Rafael J. Wysocki
2024-08-19 20:24   ` Peter Kästle
2024-08-21 13:25   ` Daniel Lezcano
2024-08-19 16:24 ` [PATCH v3 10/14] mlxsw: core_thermal: " Rafael J. Wysocki
2024-08-19 16:26 ` [PATCH v3 11/14] thermal: imx: " Rafael J. Wysocki
2024-08-21 13:42   ` Daniel Lezcano
2024-08-19 16:30 ` [PATCH v3 12/14] thermal/of: " Rafael J. Wysocki
2024-08-21 14:20   ` Daniel Lezcano
2024-08-26 11:31   ` Marek Szyprowski
2024-08-26 12:14     ` Rafael J. Wysocki
2024-08-26 20:49       ` Marek Szyprowski
2024-08-27 11:39         ` Rafael J. Wysocki
2024-08-19 16:31 ` [PATCH v3 13/14] thermal: core: Drop unused bind/unbind functions and callbacks Rafael J. Wysocki
2024-08-20  7:10   ` Zhang, Rui
2024-08-21  9:33   ` lihuisong (C)
2024-08-21 14:24   ` Daniel Lezcano
2024-08-19 16:33 ` [PATCH v3 14/14] thermal: core: Clean up trip bind/unbind functions Rafael J. Wysocki
2024-08-20  7:11   ` Zhang, Rui
2024-08-21  9:34   ` lihuisong (C)
2024-08-21 14:29   ` Daniel Lezcano
2024-08-21 16:21     ` Rafael J. Wysocki
2024-08-24 18:45 ` [PATCH v3 00/14] thermal: Rework binding cooling devices to trip points Nícolas F. R. A. Prado
2024-08-26  9:58   ` Rafael J. Wysocki
2024-08-30 13:55     ` Nícolas F. R. A. Prado

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=19beefd9-d3f9-4d43-a45d-d241996de2d0@linaro.org \
    --to=daniel.lezcano@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lukasz.luba@arm.com \
    --cc=rjw@rjwysocki.net \
    --cc=rui.zhang@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox