Thread (48 messages) 48 messages, 4 authors, 2022-07-01

Re: [PATCH v5 16/19] arch_topology: Limit span of cpu_clustergroup_mask()

From: Vincent Guittot <vincent.guittot@linaro.org>
Date: 2022-06-28 10:28:22
Also in: linux-riscv, lkml

On Mon, 27 Jun 2022 at 18:51, Sudeep Holla [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Ionela Voinescu <redacted>

Currently the cluster identifier is not set on DT based platforms.
The reset or default value is -1 for all the CPUs. Once we assign the
cluster identifier values correctly, the cluster_sibling mask will be
populated and returned by cpu_clustergroup_mask() to contribute in the
creation of the CLS scheduling domain level, if SCHED_CLUSTER is
enabled.

To avoid topologies that will result in questionable or incorrect
scheduling domains, impose restrictions regarding the span of clusters,
as presented to scheduling domains building code: cluster_sibling should
not span more or the same CPUs as cpu_coregroup_mask().

This is needed in order to obtain a strict separation between the MC and
CLS levels, and maintain the same domains for existing platforms in
the presence of CONFIG_SCHED_CLUSTER, where the new cluster information
is redundant and irrelevant for the scheduler.

While previously the scheduling domain builder code would have removed MC
as redundant and kept CLS if SCHED_CLUSTER was enabled and the
cpu_coregroup_mask() and cpu_clustergroup_mask() spanned the same CPUs,
now CLS will be removed and MC kept.

Link: https://lore.kernel.org/r/20220621192034.3332546-18-sudeep.holla@arm.com (local)
Cc: Darren Hart <redacted>
Tested-by: Ionela Voinescu <redacted>
Signed-off-by: Ionela Voinescu <redacted>
Signed-off-by: Sudeep Holla <redacted>
---
 drivers/base/arch_topology.c | 8 ++++++++
 1 file changed, 8 insertions(+)
diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index 46fa1b70b02b..277b65cf3306 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -686,6 +686,14 @@ const struct cpumask *cpu_coregroup_mask(int cpu)

 const struct cpumask *cpu_clustergroup_mask(int cpu)
 {
+       /*
+        * Forbid cpu_clustergroup_mask() to span more or the same CPUs as
+        * cpu_coregroup_mask().
+        */
+       if (cpumask_subset(cpu_coregroup_mask(cpu),
+                          &cpu_topology[cpu].cluster_sibling))
+               return get_cpu_mask(cpu);
AFAICT, this will change the Altra scheduling topology which will now
have a MC level instead of the CLS but it's probably not a problem as
the flags are the same for now

Acked-by: Vincent Guittot <vincent.guittot@linaro.org>
+
        return &cpu_topology[cpu].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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help