[PATCH] mips: micro-optimize calculate_cpu_foreign_map()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux