[PATCH] mips: micro-optimize calculate_cpu_foreign_map()

From: Yury Norov
Date: Tue Jun 21 2022 - 10:47:37 EST


The inner loop in calculate_cpu_foreign_map() walks the whole
cpumask to check if we have siblings for a given cpu.

We can just break after a 1st match and avoid useless traversing
the rest of mask.

Loongarch has an identical function, so fix it here as well.

Signed-off-by: Yury Norov <yury.norov@xxxxxxxxx>
---

It looks like loongarch copied quite a lot from arch/mips/kernel/smp.c.
For loongarch folks: Guys, can you consider moving shared code into a
shared file(s)?

arch/loongarch/kernel/smp.c | 7 +++----
arch/mips/kernel/smp.c | 7 +++----
2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c
index b8c53b755a25..c1c91df3c8ac 100644
--- a/arch/loongarch/kernel/smp.c
+++ b/arch/loongarch/kernel/smp.c
@@ -463,17 +463,16 @@ static inline void set_cpu_core_map(int cpu)
*/
void calculate_cpu_foreign_map(void)
{
- int i, k, core_present;
+ int i, k;
cpumask_t temp_foreign_map;

/* Re-calculate the mask */
cpumask_clear(&temp_foreign_map);
for_each_online_cpu(i) {
- core_present = 0;
for_each_cpu(k, &temp_foreign_map)
if (cpus_are_siblings(i, k))
- core_present = 1;
- if (!core_present)
+ break;
+ if (k >= nr_cpu_ids)
cpumask_set_cpu(i, &temp_foreign_map);
}

diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index 1d93b85271ba..a2ce641f5f18 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -115,17 +115,16 @@ static inline void set_cpu_core_map(int cpu)
*/
void calculate_cpu_foreign_map(void)
{
- int i, k, core_present;
+ int i, k;
cpumask_t temp_foreign_map;

/* Re-calculate the mask */
cpumask_clear(&temp_foreign_map);
for_each_online_cpu(i) {
- core_present = 0;
for_each_cpu(k, &temp_foreign_map)
if (cpus_are_siblings(i, k))
- core_present = 1;
- if (!core_present)
+ break;
+ if (k >= nr_cpu_ids)
cpumask_set_cpu(i, &temp_foreign_map);
}

--
2.32.0