Skip to content

Commit e0a9ac1

Browse files
lrq-maxIngo Molnar
authored andcommitted
x86/cpu: Take NUMA node into account when allocating per-CPU cpumasks
per-CPU cpumasks are dominantly accessed from their own local CPUs, so allocate them node-local to improve performance. [ mingo: Rewrote the changelog. ] Signed-off-by: Li RongQing <[email protected]> Signed-off-by: Ingo Molnar <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 7911f14 commit e0a9ac1

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

arch/x86/kernel/apic/x2apic_cluster.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ static int x2apic_prepare_cpu(unsigned int cpu)
183183

184184
if (alloc_clustermask(cpu, cluster, cpu_to_node(cpu)) < 0)
185185
return -ENOMEM;
186-
if (!zalloc_cpumask_var(&per_cpu(ipi_mask, cpu), GFP_KERNEL))
186+
if (!zalloc_cpumask_var_node(&per_cpu(ipi_mask, cpu), GFP_KERNEL,
187+
cpu_to_node(cpu)))
187188
return -ENOMEM;
188189
return 0;
189190
}

arch/x86/kernel/smpboot.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,7 +1033,7 @@ static __init void disable_smp(void)
10331033

10341034
void __init smp_prepare_cpus_common(void)
10351035
{
1036-
unsigned int i;
1036+
unsigned int i, n;
10371037

10381038
/* Mark all except the boot CPU as hotpluggable */
10391039
for_each_possible_cpu(i) {
@@ -1042,11 +1042,12 @@ void __init smp_prepare_cpus_common(void)
10421042
}
10431043

10441044
for_each_possible_cpu(i) {
1045-
zalloc_cpumask_var(&per_cpu(cpu_sibling_map, i), GFP_KERNEL);
1046-
zalloc_cpumask_var(&per_cpu(cpu_core_map, i), GFP_KERNEL);
1047-
zalloc_cpumask_var(&per_cpu(cpu_die_map, i), GFP_KERNEL);
1048-
zalloc_cpumask_var(&per_cpu(cpu_llc_shared_map, i), GFP_KERNEL);
1049-
zalloc_cpumask_var(&per_cpu(cpu_l2c_shared_map, i), GFP_KERNEL);
1045+
n = cpu_to_node(i);
1046+
zalloc_cpumask_var_node(&per_cpu(cpu_sibling_map, i), GFP_KERNEL, n);
1047+
zalloc_cpumask_var_node(&per_cpu(cpu_core_map, i), GFP_KERNEL, n);
1048+
zalloc_cpumask_var_node(&per_cpu(cpu_die_map, i), GFP_KERNEL, n);
1049+
zalloc_cpumask_var_node(&per_cpu(cpu_llc_shared_map, i), GFP_KERNEL, n);
1050+
zalloc_cpumask_var_node(&per_cpu(cpu_l2c_shared_map, i), GFP_KERNEL, n);
10501051
}
10511052

10521053
set_cpu_sibling_map(0);

0 commit comments

Comments
 (0)