[PATCH] sched/topology: Covered all cpus of same node in asymmetric node setups

Bing Huang posted 1 patch 2 years, 6 months ago
kernel/sched/topology.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
[PATCH] sched/topology: Covered all cpus of same node in asymmetric node setups
Posted by Bing Huang 2 years, 6 months ago
in asymmetric node setups, if one cpu'sd spans is empty in some depth,
others in same node do

Signed-off-by: Bing Huang <huangbing@kylinos.cn>
---
 kernel/sched/topology.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index 7cfcfe5d27b9..8c5372ad7694 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -1045,8 +1045,10 @@ build_overlap_sched_groups(struct sched_domain *sd, int cpu)
 		 * Domains should always include the CPU they're built on, so
 		 * check that.
 		 */
-		if (!cpumask_test_cpu(i, sched_domain_span(sibling)))
+		if (!cpumask_test_cpu(i, sched_domain_span(sibling))) {
+			cpumask_or(covered, covered, cpumask_of_node(cpu_to_node(i)));
 			continue;
+		}
 
 		/*
 		 * Usually we build sched_group by sibling's child sched_domain
-- 
2.25.1
Re: [PATCH] sched/topology: Covered all cpus of same node in asymmetric node setups
Posted by Peter Zijlstra 2 years, 6 months ago
On Sun, Jul 30, 2023 at 06:22:03AM +0800, Bing Huang wrote:
> in asymmetric node setups, if one cpu'sd spans is empty in some depth,
> others in same node do

Sorry, what?!?

> Signed-off-by: Bing Huang <huangbing@kylinos.cn>
> ---
>  kernel/sched/topology.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
> index 7cfcfe5d27b9..8c5372ad7694 100644
> --- a/kernel/sched/topology.c
> +++ b/kernel/sched/topology.c
> @@ -1045,8 +1045,10 @@ build_overlap_sched_groups(struct sched_domain *sd, int cpu)
>  		 * Domains should always include the CPU they're built on, so
>  		 * check that.
>  		 */
> -		if (!cpumask_test_cpu(i, sched_domain_span(sibling)))
> +		if (!cpumask_test_cpu(i, sched_domain_span(sibling))) {
> +			cpumask_or(covered, covered, cpumask_of_node(cpu_to_node(i)));
>  			continue;
> +		}
>  
>  		/*
>  		 * Usually we build sched_group by sibling's child sched_domain
> -- 
> 2.25.1
>