linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Avoid mask based num_possible_cpus and num_online_cpus
@ 2012-01-18  2:07 Venkatesh Pallipadi
  2012-01-18  5:55 ` KOSAKI Motohiro
  0 siblings, 1 reply; 48+ messages in thread
From: Venkatesh Pallipadi @ 2012-01-18  2:07 UTC (permalink / raw)
  To: Andrew Morton, KOSAKI Motohiro, Mike Travis, Srivatsa S. Bhat,
	Paul E. McKenney, Rafael J. Wysocki, Paul Gortmaker
  Cc: linux-kernel, Venkatesh Pallipadi

Kernel's notion of possible cpus (from include/linux/cpumask.h)
 *     cpu_possible_mask- has bit 'cpu' set iff cpu is populatable

 *  The cpu_possible_mask is fixed at boot time, as the set of CPU id's
 *  that it is possible might ever be plugged in at anytime during the
 *  life of that system boot.

 #define num_possible_cpus()     cpumask_weight(cpu_possible_mask)

and on x86 cpumask_weight() calls hweight64 and hweight64 (on older kernels
and systems with !X86_FEATURE_POPCNT) or a popcnt based alternative.

i.e, We needlessly go through this mask based calculation everytime
num_possible_cpus() is called.

The problem is there with cpu_online_mask() as well, which is fixed value at
boot time in !CONFIG_HOTPLUG_CPU case and should not change that often even
in HOTPLUG case.

Though most of the callers of these two routines are init time (with few
exceptions of runtime calls), it is cleaner to use variables
and not go through this repeated mask based calculation.

Signed-off-by: Venkatesh Pallipadi <venki@google.com>
---
 include/linux/cpumask.h |    8 ++++++--
 kernel/cpu.c            |    9 +++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
index 4f7a632..2eb04dd 100644
--- a/include/linux/cpumask.h
+++ b/include/linux/cpumask.h
@@ -80,9 +80,13 @@ extern const struct cpumask *const cpu_online_mask;
 extern const struct cpumask *const cpu_present_mask;
 extern const struct cpumask *const cpu_active_mask;
 
+extern int nr_online_cpus;
+
 #if NR_CPUS > 1
-#define num_online_cpus()	cpumask_weight(cpu_online_mask)
-#define num_possible_cpus()	cpumask_weight(cpu_possible_mask)
+
+#define num_online_cpus()	(nr_online_cpus)
+#define num_possible_cpus()	(nr_cpu_ids)
+
 #define num_present_cpus()	cpumask_weight(cpu_present_mask)
 #define num_active_cpus()	cpumask_weight(cpu_active_mask)
 #define cpu_online(cpu)		cpumask_test_cpu((cpu), cpu_online_mask)
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 2060c6e..eed2169 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -622,6 +622,13 @@ static DECLARE_BITMAP(cpu_active_bits, CONFIG_NR_CPUS) __read_mostly;
 const struct cpumask *const cpu_active_mask = to_cpumask(cpu_active_bits);
 EXPORT_SYMBOL(cpu_active_mask);
 
+#ifdef CONFIG_HOTPLUG_CPU
+int nr_online_cpus;
+#else
+int nr_online_cpus __read_mostly;
+#endif
+EXPORT_SYMBOL(nr_online_cpus);
+
 void set_cpu_possible(unsigned int cpu, bool possible)
 {
 	if (possible)
@@ -644,6 +651,8 @@ void set_cpu_online(unsigned int cpu, bool online)
 		cpumask_set_cpu(cpu, to_cpumask(cpu_online_bits));
 	else
 		cpumask_clear_cpu(cpu, to_cpumask(cpu_online_bits));
+
+	nr_online_cpus = cpumask_weight(cpu_online_mask);
 }
 
 void set_cpu_active(unsigned int cpu, bool active)
-- 
1.7.7.3


^ permalink raw reply related	[flat|nested] 48+ messages in thread

end of thread, other threads:[~2012-03-01 18:32 UTC | newest]

Thread overview: 48+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-18  2:07 [PATCH] Avoid mask based num_possible_cpus and num_online_cpus Venkatesh Pallipadi
2012-01-18  5:55 ` KOSAKI Motohiro
2012-01-18 18:52   ` Venki Pallipadi
2012-01-18 19:20     ` KOSAKI Motohiro
2012-01-19 20:01       ` Venkatesh Pallipadi
2012-01-19 20:40         ` KOSAKI Motohiro
2012-01-21  1:01           ` Venki Pallipadi
2012-01-19 20:43         ` Srivatsa S. Bhat
2012-01-20 23:09           ` Venki Pallipadi
2012-01-20 23:45             ` KOSAKI Motohiro
2012-01-20 23:55               ` Venki Pallipadi
2012-01-23  5:22                 ` Srivatsa S. Bhat
2012-01-23 19:28                   ` Venki Pallipadi
2012-01-24  2:34                     ` [PATCH] Avoid mask based num_possible_cpus and num_online_cpus -v3 Venkatesh Pallipadi
2012-01-24 19:22                       ` Srivatsa S. Bhat
2012-01-24 19:30                         ` KOSAKI Motohiro
2012-01-24 21:01                         ` Venki Pallipadi
2012-01-24 23:25                           ` [PATCH] Avoid mask based num_possible_cpus and num_online_cpus -v4 Venkatesh Pallipadi
2012-01-26 17:22                             ` Srivatsa S. Bhat
2012-01-26 17:27                             ` Srivatsa S. Bhat
2012-01-26 21:25                               ` KOSAKI Motohiro
2012-01-26 23:22                             ` Andrew Morton
2012-01-27 23:58                               ` Venki Pallipadi
2012-02-01  0:17                                 ` [PATCH] Avoid mask based num_possible_cpus and num_online_cpus -v5 Venkatesh Pallipadi
2012-02-01 22:01                                   ` Andrew Morton
2012-02-02 20:03                                     ` Rusty Russell
2012-02-02 20:19                                       ` Andrew Morton
2012-02-02 21:00                                         ` Venki Pallipadi
2012-02-13 19:54                                       ` Tony Luck
2012-02-13 20:04                                         ` Venki Pallipadi
2012-02-13 20:25                                         ` Srivatsa S. Bhat
2012-02-13 20:43                                           ` Venki Pallipadi
2012-02-13 20:55                                             ` Srivatsa S. Bhat
2012-02-13 20:44                                           ` Srivatsa S. Bhat
2012-02-13 21:57                                             ` Tony Luck
2012-02-14  9:25                                               ` Rusty Russell
2012-02-14 21:35                                                 ` Srivatsa S. Bhat
2012-02-14 23:00                                                   ` Tony Luck
2012-02-14 22:49                                                 ` [PATCH 0/3] Cleanup raw handling of online/possible map Venkatesh Pallipadi
2012-02-14 22:49                                                   ` [PATCH 1/3] hexagon: Avoid raw handling of cpu_possible_map Venkatesh Pallipadi
2012-02-14 22:49                                                   ` [PATCH 2/3] mips: Avoid raw handling of cpu_possible_map/cpu_online_map Venkatesh Pallipadi
2012-02-27 22:19                                                     ` David Daney
2012-02-14 22:49                                                   ` [PATCH 3/3] um: Avoid raw handling of cpu_online_map Venkatesh Pallipadi
2012-02-27 21:55                                   ` [PATCH] Avoid mask based num_possible_cpus and num_online_cpus -v5 David Daney
2012-02-27 22:07                                     ` Andrew Morton
2012-02-27 22:16                                       ` David Daney
2012-03-01 18:32                                         ` Venki Pallipadi
2012-02-28  5:01                                       ` Stephen Rothwell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).