From: Sudeep Holla <sudeep.holla@arm.com>
To: Atish Patra <atishp@atishpatra.org>, linux-kernel@vger.kernel.org
Cc: Sudeep Holla <sudeep.holla@arm.com>,
Atish Patra <atishp@rivosinc.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Morten Rasmussen <morten.rasmussen@arm.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Qing Wang <wangqing@vivo.com>,
linux-arm-kernel@lists.infradead.org,
linux-riscv@lists.infradead.org, Rob Herring <robh+dt@kernel.org>
Subject: [PATCH v2 8/8] arch_topology: Add support to build llc_sibling on DT platforms
Date: Wed, 18 May 2022 10:33:25 +0100 [thread overview]
Message-ID: <20220518093325.2070336-9-sudeep.holla@arm.com> (raw)
In-Reply-To: <20220518093325.2070336-1-sudeep.holla@arm.com>
ACPI PPTT provides cache identifiers and especially the last level cache
identifier is used in obtaining last level cache siblings amongst CPUs.
While we have the cpu map representing all the CPUs sharing last level
cache in the cacheinfo driver, it is populated quite late in the boot
while the information is needed to build scheduler domains quite early.
On DT platforms we can use the pointer to the last level cache as the
firmware identifier for the last level cache and build the cpumap sharing
the last level cache based on the same.
Cc: Rob Herring <robh+dt@kernel.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
drivers/base/arch_topology.c | 18 ++++++++++++++----
include/linux/arch_topology.h | 1 +
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index 6d3346efe74b..bc57f0f1862e 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -661,11 +661,14 @@ static int __init parse_dt_topology(void)
* Check that all cores are in the topology; the SMP code will
* only mark cores described in the DT as possible.
*/
- for_each_possible_cpu(cpu)
+ for_each_possible_cpu(cpu) {
if (cpu_topology[cpu].package_id < 0) {
ret = -EINVAL;
break;
}
+ cpu_topology[cpu].llc_fw_node =
+ of_find_last_level_cache_node(cpu);
+ }
out_map:
of_node_put(map);
@@ -681,6 +684,12 @@ static int __init parse_dt_topology(void)
struct cpu_topology cpu_topology[NR_CPUS];
EXPORT_SYMBOL_GPL(cpu_topology);
+#define IS_VALID_LLC_ID(x) \
+ ((x)->llc_id >= 0 || (x)->llc_fw_node)
+#define IS_MATCH_LLC_ID(x, y) \
+ (((x)->llc_id >= 0 && (x)->llc_id == (y)->llc_id) || \
+ ((x)->llc_fw_node && (x)->llc_fw_node == (y)->llc_fw_node))
+
const struct cpumask *cpu_coregroup_mask(int cpu)
{
const cpumask_t *core_mask = cpumask_of_node(cpu_to_node(cpu));
@@ -690,7 +699,8 @@ const struct cpumask *cpu_coregroup_mask(int cpu)
/* not numa in package, lets use the package siblings */
core_mask = &cpu_topology[cpu].core_sibling;
}
- if (cpu_topology[cpu].llc_id >= 0) {
+
+ if (IS_VALID_LLC_ID(&cpu_topology[cpu])) {
if (cpumask_subset(&cpu_topology[cpu].llc_sibling, core_mask))
core_mask = &cpu_topology[cpu].llc_sibling;
}
@@ -721,8 +731,7 @@ void update_siblings_masks(unsigned int cpuid)
for_each_online_cpu(cpu) {
cpu_topo = &cpu_topology[cpu];
- if (cpu_topo->llc_id >= 0 &&
- cpuid_topo->llc_id == cpu_topo->llc_id) {
+ if (IS_MATCH_LLC_ID(cpu_topo, cpuid_topo)) {
cpumask_set_cpu(cpu, &cpuid_topo->llc_sibling);
cpumask_set_cpu(cpuid, &cpu_topo->llc_sibling);
}
@@ -777,6 +786,7 @@ void __init reset_cpu_topology(void)
cpu_topo->cluster_id = -1;
cpu_topo->package_id = -1;
cpu_topo->llc_id = -1;
+ cpu_topo->llc_fw_node = NULL;
clear_cpu_topology(cpu);
}
diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h
index 58cbe18d825c..d8a36b0e27c9 100644
--- a/include/linux/arch_topology.h
+++ b/include/linux/arch_topology.h
@@ -69,6 +69,7 @@ struct cpu_topology {
int cluster_id;
int package_id;
int llc_id;
+ void *llc_fw_node;
cpumask_t thread_sibling;
cpumask_t core_sibling;
cpumask_t cluster_sibling;
--
2.36.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-05-18 9:38 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-18 9:33 [PATCH v2 0/8] arch_topology: Updates to add socket support and fix cluster ids Sudeep Holla
2022-05-18 9:33 ` [PATCH v2 1/8] arch_topology: Don't set cluster identifier as physical package identifier Sudeep Holla
2022-05-20 12:31 ` Dietmar Eggemann
2022-05-20 13:13 ` Sudeep Holla
2022-05-18 9:33 ` [PATCH v2 2/8] arch_topology: Set thread sibling cpumask only within the cluster Sudeep Holla
2022-05-20 12:32 ` Dietmar Eggemann
2022-05-20 13:20 ` Sudeep Holla
2022-05-18 9:33 ` [PATCH v2 3/8] arch_topology: Set cluster identifier in each core/thread from /cpu-map Sudeep Holla
2022-05-19 16:55 ` Ionela Voinescu
2022-05-20 12:33 ` Dietmar Eggemann
2022-05-20 13:54 ` Sudeep Holla
2022-05-20 15:27 ` Sudeep Holla
2022-05-18 9:33 ` [PATCH v2 4/8] arch_topology: Add support for parsing sockets in /cpu-map Sudeep Holla
2022-05-18 9:33 ` [PATCH v2 5/8] arch_topology: Check for non-negative value rather than -1 for IDs validity Sudeep Holla
2022-05-18 9:33 ` [PATCH v2 6/8] arch_topology: Avoid parsing through all the CPUs once a outlier CPU is found Sudeep Holla
2022-05-18 9:33 ` [PATCH v2 7/8] of: base: add support to get the device node for the CPU's last level cache Sudeep Holla
2022-05-18 9:33 ` Sudeep Holla [this message]
2022-05-19 18:10 ` [PATCH v2 8/8] arch_topology: Add support to build llc_sibling on DT platforms Rob Herring
2022-05-20 12:59 ` Sudeep Holla
2022-05-20 14:36 ` Rob Herring
2022-05-20 15:06 ` Sudeep Holla
2022-05-20 12:33 ` Dietmar Eggemann
2022-05-20 14:56 ` Sudeep Holla
2022-05-19 16:32 ` [PATCH v2 0/8] arch_topology: Updates to add socket support and fix cluster ids Ionela Voinescu
2022-05-20 15:33 ` Sudeep Holla
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=20220518093325.2070336-9-sudeep.holla@arm.com \
--to=sudeep.holla@arm.com \
--cc=atishp@atishpatra.org \
--cc=atishp@rivosinc.com \
--cc=dietmar.eggemann@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=morten.rasmussen@arm.com \
--cc=robh+dt@kernel.org \
--cc=vincent.guittot@linaro.org \
--cc=wangqing@vivo.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