mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Lukasz Luba <lukasz.luba@arm.com>
To: linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org,
	rafael@kernel.org
Cc: linux-pm@vger.kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com
Subject: [PATCH v2 1/8] thermal: core: Add governor callback for thermal zone change
Date: Tue, 12 Dec 2023 13:48:37 +0000	[thread overview]
Message-ID: <20231212134844.1213381-2-lukasz.luba@arm.com> (raw)
In-Reply-To: <20231212134844.1213381-1-lukasz.luba@arm.com>

Add a new callback which can update governors when there is a change in
the thermal zone internals, e.g. thermal cooling instance list changed.

That makes possible to move some heavy operations like memory allocations
related to the number of cooling instances out of the throttle() callback.

Reuse the 'enum thermal_notify_event' and extend it with a new event:
THERMAL_INSTANCE_LIST_UPDATE.

Both callback code paths (throttle() and update_tz()) are protected with
the same thermal zone lock, which guaranties the consistency.

Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
---
 drivers/thermal/thermal_core.c | 13 +++++++++++++
 include/linux/thermal.h        |  5 +++++
 2 files changed, 18 insertions(+)

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 625ba07cbe2f..592c956f6fd5 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -314,6 +314,14 @@ static void handle_non_critical_trips(struct thermal_zone_device *tz,
 		       def_governor->throttle(tz, trip);
 }
 
+static void handle_instances_list_update(struct thermal_zone_device *tz)
+{
+	if (!tz->governor || !tz->governor->update_tz)
+		return;
+
+	tz->governor->update_tz(tz, THERMAL_INSTANCE_LIST_UPDATE);
+}
+
 void thermal_zone_device_critical(struct thermal_zone_device *tz)
 {
 	/*
@@ -723,6 +731,8 @@ int thermal_bind_cdev_to_trip(struct thermal_zone_device *tz,
 		list_add_tail(&dev->tz_node, &tz->thermal_instances);
 		list_add_tail(&dev->cdev_node, &cdev->thermal_instances);
 		atomic_set(&tz->need_update, 1);
+
+		handle_instances_list_update(tz);
 	}
 	mutex_unlock(&cdev->lock);
 	mutex_unlock(&tz->lock);
@@ -781,6 +791,9 @@ int thermal_unbind_cdev_from_trip(struct thermal_zone_device *tz,
 		if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) {
 			list_del(&pos->tz_node);
 			list_del(&pos->cdev_node);
+
+			handle_instances_list_update(tz);
+
 			mutex_unlock(&cdev->lock);
 			mutex_unlock(&tz->lock);
 			goto unbind;
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index c7190e2dfcb4..9fd0d3fb234a 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -51,6 +51,7 @@ enum thermal_notify_event {
 	THERMAL_DEVICE_POWER_CAPABILITY_CHANGED, /* power capability changed */
 	THERMAL_TABLE_CHANGED, /* Thermal table(s) changed */
 	THERMAL_EVENT_KEEP_ALIVE, /* Request for user space handler to respond */
+	THERMAL_INSTANCE_LIST_UPDATE, /* List of thermal instances changed */
 };
 
 /**
@@ -195,6 +196,8 @@ struct thermal_zone_device {
  *			thermal zone.
  * @throttle:	callback called for every trip point even if temperature is
  *		below the trip point temperature
+ * @update_tz:	callback called when thermal zone internals have changed, e.g.
+ *		thermal cooling instance was added/removed
  * @governor_list:	node in thermal_governor_list (in thermal_core.c)
  */
 struct thermal_governor {
@@ -203,6 +206,8 @@ struct thermal_governor {
 	void (*unbind_from_tz)(struct thermal_zone_device *tz);
 	int (*throttle)(struct thermal_zone_device *tz,
 			const struct thermal_trip *trip);
+	void (*update_tz)(struct thermal_zone_device *tz,
+			  enum thermal_notify_event reason);
 	struct list_head	governor_list;
 };
 
-- 
2.25.1


  reply	other threads:[~2023-12-12 13:48 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-12 13:48 [PATCH v2 0/8] Add callback for cooling list update to speed-up IPA Lukasz Luba
2023-12-12 13:48 ` Lukasz Luba [this message]
2023-12-20 13:51   ` [PATCH v2 1/8] thermal: core: Add governor callback for thermal zone change Rafael J. Wysocki
2023-12-20 16:17     ` Lukasz Luba
2023-12-20 17:44       ` Rafael J. Wysocki
2023-12-20 17:46         ` Lukasz Luba
2023-12-12 13:48 ` [PATCH v2 2/8] thermal: gov_power_allocator: Refactor check_power_actors() Lukasz Luba
2023-12-12 13:48 ` [PATCH v2 3/8] thermal: gov_power_allocator: Move memory allocation out of throttle() Lukasz Luba
2023-12-20 14:35   ` Rafael J. Wysocki
2023-12-20 16:21     ` Lukasz Luba
2023-12-12 13:48 ` [PATCH v2 4/8] thermal: gov_power_allocator: Simplify checks for valid power actor Lukasz Luba
2023-12-20 14:40   ` Rafael J. Wysocki
2023-12-20 16:22     ` Lukasz Luba
2023-12-12 13:48 ` [PATCH v2 5/8] thermal: gov_power_allocator: Refactor checks in divvy_up_power() Lukasz Luba
2023-12-20 14:41   ` Rafael J. Wysocki
2023-12-12 13:48 ` [PATCH v2 6/8] thermal/sysfs: Update instance->weight under tz lock Lukasz Luba
2023-12-20 14:53   ` Rafael J. Wysocki
2023-12-20 16:23     ` Lukasz Luba
2023-12-12 13:48 ` [PATCH v2 7/8] thermal/sysfs: Update governors when the 'weight' has changed Lukasz Luba
2023-12-20 14:57   ` Rafael J. Wysocki
2023-12-12 13:48 ` [PATCH v2 8/8] thermal: gov_power_allocator: Support new update callback of weights Lukasz Luba
2023-12-20 14:59   ` Rafael J. Wysocki
2023-12-20 16:14     ` Lukasz Luba
2023-12-20 12:54 ` [PATCH v2 0/8] Add callback for cooling list update to speed-up IPA Lukasz Luba
2023-12-20 13:37   ` Rafael J. Wysocki
2023-12-20 16:25     ` Lukasz Luba

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=20231212134844.1213381-2-lukasz.luba@arm.com \
    --to=lukasz.luba@arm.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael@kernel.org \
    --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

all inboxes | Powered by JetHome®