From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Linux PM <linux-pm@vger.kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Lukasz Luba <lukasz.luba@arm.com>,
Peter Zijlstra <peterz@infradead.org>,
Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Morten Rasmussen <morten.rasmussen@arm.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Ricardo Neri <ricardo.neri-calderon@linux.intel.com>,
Pierre Gondois <pierre.gondois@arm.com>
Subject: [RFC][PATCH v021 5/9] PM: EM: Introduce em_dev_expand_perf_domain()
Date: Fri, 29 Nov 2024 17:02:02 +0100 [thread overview]
Message-ID: <3353401.44csPzL39Z@rjwysocki.net> (raw)
In-Reply-To: <5861970.DvuYhMxLoT@rjwysocki.net>
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Introduce a helper function for adding a CPU to an existing EM perf
domain.
Subsequently, this will be used by the intel_pstate driver to add new
CPUs to existing perf domains when those CPUs go online for the first
time after the initialization of the driver.
No intentional functional impact.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
v0.1 -> v0.2: No changes
---
include/linux/energy_model.h | 5 +++++
kernel/power/energy_model.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
Index: linux-pm/kernel/power/energy_model.c
===================================================================
--- linux-pm.orig/kernel/power/energy_model.c
+++ linux-pm/kernel/power/energy_model.c
@@ -676,6 +676,38 @@ void em_dev_unregister_perf_domain(struc
}
EXPORT_SYMBOL_GPL(em_dev_unregister_perf_domain);
+/**
+ * em_dev_expand_perf_domain() - Expand CPU perf domain
+ * @dev: CPU device of a CPU in the perf domain.
+ * @new_cpu: CPU to add to the perf domain.
+ */
+int em_dev_expand_perf_domain(struct device *dev, int new_cpu)
+{
+ struct device *new_cpu_dev;
+ struct em_perf_domain *pd;
+
+ if (IS_ERR_OR_NULL(dev) || !_is_cpu_device(dev))
+ return -EINVAL;
+
+ new_cpu_dev = get_cpu_device(new_cpu);
+ if (!new_cpu_dev)
+ return -EINVAL;
+
+ guard(mutex)(&em_pd_mutex);
+
+ if (em_pd_get(new_cpu_dev))
+ return -EEXIST;
+
+ pd = em_pd_get(dev);
+ if (!pd)
+ return -EINVAL;
+
+ cpumask_set_cpu(new_cpu, em_span_cpus(pd));
+ new_cpu_dev->em_pd = pd;
+
+ return 0;
+}
+
static struct em_perf_table __rcu *em_table_dup(struct em_perf_domain *pd)
{
struct em_perf_table __rcu *em_table;
Index: linux-pm/include/linux/energy_model.h
===================================================================
--- linux-pm.orig/include/linux/energy_model.h
+++ linux-pm/include/linux/energy_model.h
@@ -172,6 +172,7 @@ int em_dev_register_perf_domain(struct d
struct em_data_callback *cb, cpumask_t *span,
bool microwatts);
void em_dev_unregister_perf_domain(struct device *dev);
+int em_dev_expand_perf_domain(struct device *dev, int new_cpu);
struct em_perf_table __rcu *em_table_alloc(struct em_perf_domain *pd);
void em_table_free(struct em_perf_table __rcu *table);
int em_dev_compute_costs(struct device *dev, struct em_perf_state *table,
@@ -354,6 +355,10 @@ int em_dev_register_perf_domain(struct d
static inline void em_dev_unregister_perf_domain(struct device *dev)
{
}
+static inline int em_dev_expand_perf_domain(struct device *dev, int new_cpu)
+{
+ return -EINVAL;
+}
static inline struct em_perf_domain *em_cpu_get(int cpu)
{
return NULL;
next prev parent reply other threads:[~2024-11-29 16:28 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-29 15:55 [RFC][PATCH v021 0/9] cpufreq: intel_pstate: Enable EAS on hybrid platforms without SMT Rafael J. Wysocki
2024-11-29 15:56 ` [RFC][PATCH v021 1/9] cpufreq: intel_pstate: Use CPPC to get scaling factors Rafael J. Wysocki
2024-11-29 15:56 ` [RFC][PATCH v021 2/9] cpufreq: intel_pstate: Drop Arrow Lake from "scaling factor" list Rafael J. Wysocki
2024-11-29 15:59 ` [RFC][PATCH v021 3/9] PM: EM: Move perf rebuilding function from schedutil to EM Rafael J. Wysocki
2024-12-11 10:32 ` Christian Loehle
2024-11-29 16:00 ` [RFC][PATCH v021 4/9] sched/topology: Adjust cpufreq checks for EAS Rafael J. Wysocki
2024-12-11 10:33 ` Christian Loehle
2024-12-11 11:29 ` Rafael J. Wysocki
2024-12-11 11:43 ` Christian Loehle
2024-12-11 11:59 ` Rafael J. Wysocki
2024-12-11 13:25 ` Vincent Guittot
2024-12-11 16:37 ` Rafael J. Wysocki
2024-12-11 17:07 ` Vincent Guittot
2024-12-11 17:55 ` Rafael J. Wysocki
2024-12-12 8:34 ` Vincent Guittot
2024-12-16 14:49 ` Dietmar Eggemann
2024-12-16 14:58 ` Rafael J. Wysocki
2024-11-29 16:02 ` Rafael J. Wysocki [this message]
2024-12-17 9:38 ` [RFC][PATCH v021 5/9] PM: EM: Introduce em_dev_expand_perf_domain() Dietmar Eggemann
2024-12-17 20:40 ` Rafael J. Wysocki
2025-01-06 12:59 ` Dietmar Eggemann
2024-11-29 16:06 ` [RFC][PATCH v021 6/9] PM: EM: Call em_compute_costs() from em_create_perf_table() Rafael J. Wysocki
2024-11-29 16:15 ` [RFC][PATCH v021 7/9] PM: EM: Register perf domains with ho :active_power() callbacks Rafael J. Wysocki
2024-12-16 10:59 ` Dietmar Eggemann
2024-12-16 11:58 ` Rafael J. Wysocki
2024-11-29 16:21 ` [RFC][PATCH v021 8/9] cpufreq: intel_pstate: Introduce hybrid domains Rafael J. Wysocki
2024-12-12 17:04 ` Christian Loehle
2024-11-29 16:28 ` [RFC][PATCH v021 9/9] cpufreq: intel_pstate: Add basic EAS support on hybrid platforms Rafael J. Wysocki
2025-01-25 11:18 ` [RFC][PATCH v021 0/9] cpufreq: intel_pstate: Enable EAS on hybrid platforms without SMT Dietmar Eggemann
2025-01-27 13:57 ` Rafael J. Wysocki
2025-02-01 12:43 ` Christian Loehle
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=3353401.44csPzL39Z@rjwysocki.net \
--to=rjw@rjwysocki.net \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=morten.rasmussen@arm.com \
--cc=peterz@infradead.org \
--cc=pierre.gondois@arm.com \
--cc=ricardo.neri-calderon@linux.intel.com \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=vincent.guittot@linaro.org \
/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.