Commit caa8e29d authored by Srikar Dronamraju's avatar Srikar Dronamraju Committed by Michael Ellerman

powerpc/smp: Optimize start_secondary

In start_secondary, even if shared_cache was already set, system does a
redundant match for cpumask. This redundant check can be removed by
checking if shared_cache is already set.

While here, localize the sibling_mask variable to within the if
condition.
Signed-off-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
Reviewed-by: default avatarGautham R. Shenoy <ego@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200810071834.92514-7-srikar@linux.vnet.ibm.com
parent f6606cfd
...@@ -852,7 +852,7 @@ static int powerpc_shared_cache_flags(void) ...@@ -852,7 +852,7 @@ static int powerpc_shared_cache_flags(void)
*/ */
static const struct cpumask *shared_cache_mask(int cpu) static const struct cpumask *shared_cache_mask(int cpu)
{ {
return cpu_l2_cache_mask(cpu); return per_cpu(cpu_l2_cache_map, cpu);
} }
#ifdef CONFIG_SCHED_SMT #ifdef CONFIG_SCHED_SMT
...@@ -1319,7 +1319,6 @@ static void add_cpu_to_masks(int cpu) ...@@ -1319,7 +1319,6 @@ static void add_cpu_to_masks(int cpu)
void start_secondary(void *unused) void start_secondary(void *unused)
{ {
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
struct cpumask *(*sibling_mask)(int) = cpu_sibling_mask;
mmgrab(&init_mm); mmgrab(&init_mm);
current->active_mm = &init_mm; current->active_mm = &init_mm;
...@@ -1345,14 +1344,20 @@ void start_secondary(void *unused) ...@@ -1345,14 +1344,20 @@ void start_secondary(void *unused)
/* Update topology CPU masks */ /* Update topology CPU masks */
add_cpu_to_masks(cpu); add_cpu_to_masks(cpu);
if (has_big_cores)
sibling_mask = cpu_smallcore_mask;
/* /*
* Check for any shared caches. Note that this must be done on a * Check for any shared caches. Note that this must be done on a
* per-core basis because one core in the pair might be disabled. * per-core basis because one core in the pair might be disabled.
*/ */
if (!cpumask_equal(cpu_l2_cache_mask(cpu), sibling_mask(cpu))) if (!shared_caches) {
struct cpumask *(*sibling_mask)(int) = cpu_sibling_mask;
struct cpumask *mask = cpu_l2_cache_mask(cpu);
if (has_big_cores)
sibling_mask = cpu_smallcore_mask;
if (cpumask_weight(mask) > cpumask_weight(sibling_mask(cpu)))
shared_caches = true; shared_caches = true;
}
set_numa_node(numa_cpu_lookup_table[cpu]); set_numa_node(numa_cpu_lookup_table[cpu]);
set_numa_mem(local_memory_node(numa_cpu_lookup_table[cpu])); set_numa_mem(local_memory_node(numa_cpu_lookup_table[cpu]));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment