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 1/5] thermal: core: Add callback for governors with cooling instances change
Date: Wed, 6 Dec 2023 11:31:34 +0000 [thread overview]
Message-ID: <20231206113138.3576492-2-lukasz.luba@arm.com> (raw)
In-Reply-To: <20231206113138.3576492-1-lukasz.luba@arm.com>
Allow governors to react to the changes in the cooling instances list.
That makes possible to move memory allocations related to the number of
cooling instances out of the throttle() callback. The throttle() callback
is called much more often thus the cost of managing allocations there is
an extra overhead. The list of cooling instances is not changed that often
and it can be handled in dedicated callback. That will save CPU cycles
in the throttle() code path. Both callbacks code paths are protected with
the same thermal zone lock, which guaranties the list of cooling instances
is consistent.
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
---
drivers/thermal/thermal_core.c | 14 ++++++++++++++
include/linux/thermal.h | 4 ++++
2 files changed, 18 insertions(+)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 625ba07cbe2f..c993b86f7fb5 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -314,6 +314,15 @@ 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->instances_update)
+ return;
+
+ tz->governor->instances_update(tz);
+}
+
void thermal_zone_device_critical(struct thermal_zone_device *tz)
{
/*
@@ -723,6 +732,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 +792,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..e7b2a1f4bab0 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -195,6 +195,9 @@ struct thermal_zone_device {
* thermal zone.
* @throttle: callback called for every trip point even if temperature is
* below the trip point temperature
+ * @instances_update: callback called when thermal zone instances list
+ * i has changed (e.g. added new or removed), which
+ * may help to offload work for governor like allocations
* @governor_list: node in thermal_governor_list (in thermal_core.c)
*/
struct thermal_governor {
@@ -203,6 +206,7 @@ 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 (*instances_update)(struct thermal_zone_device *tz);
struct list_head governor_list;
};
--
2.25.1
next prev parent reply other threads:[~2023-12-06 11:30 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-06 11:31 [PATCH 0/5] Add callback for cooling list update to speed-up IPA Lukasz Luba
2023-12-06 11:31 ` Lukasz Luba [this message]
2023-12-11 20:41 ` [PATCH 1/5] thermal: core: Add callback for governors with cooling instances change Rafael J. Wysocki
2023-12-12 8:36 ` Lukasz Luba
2023-12-06 11:31 ` [PATCH 2/5] thermal: gov_power_allocator: Refactor check_power_actors() Lukasz Luba
2023-12-20 14:07 ` Rafael J. Wysocki
2023-12-20 16:29 ` Lukasz Luba
2023-12-06 11:31 ` [PATCH 3/5] thermal: gov_power_allocator: Move memory allocation out of throttle() Lukasz Luba
2023-12-06 11:31 ` [PATCH 4/5] thermal: gov_power_allocator: Simplify checks for valid power actor Lukasz Luba
2023-12-06 11:31 ` [PATCH 5/5] thermal: gov_power_allocator: Refactor checks in divvy_up_power() 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=20231206113138.3576492-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