[PATCH tip/core/rcu 02/12] rcu: Provide compile-time control for no-CBs CPUs

2013-01-26 Thread Paul E. McKenney
From: "Paul E. McKenney" 

Currently, the only way to specify no-CBs CPUs is via the rcu_nocbs
kernel command-line parameter.  This is inconvenient in some cases,
particularly for randconfig testing, so this commit adds a new
RCU_NOCB_CPU_DEFAULT kernel configuration parameter.  Setting this
new parameter to zero (the default) retains the old behavior, setting
it to one offloads callback processing from CPU 0 (along with any
other CPUs specified by the rcu_nocbs boot-time parameter), and setting
it to two offloads callback processing from all CPUs.

Signed-off-by: Paul E. McKenney 
Signed-off-by: Paul E. McKenney 
---
 init/Kconfig|   35 +++
 kernel/rcutree_plugin.h |   14 ++
 2 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/init/Kconfig b/init/Kconfig
index 97fc178..9a04156 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -686,6 +686,41 @@ config RCU_NOCB_CPU
  Say Y here if you want to help to debug reduced OS jitter.
  Say N here if you are unsure.
 
+choice
+   prompt "Build-forced no-CBs CPUs"
+   default RCU_NOCB_CPU_NONE
+
+config RCU_NOCB_CPU_NONE
+   bool "No build_forced no-CBs CPUs"
+   depends on RCU_NOCB_CPU
+   help
+ This option does not force any of the CPUs to be no-CBs CPUs.
+ Only CPUs designated by the rcu_nocbs= boot parameter will be
+ no-CBs CPUs.
+
+config RCU_NOCB_CPU_ZERO
+   bool "CPU 0 is a build_forced no-CBs CPU"
+   depends on RCU_NOCB_CPU
+   help
+ This option forces CPU 0 to be a no-CBs CPU.  Additional CPUs
+ may be designated as no-CBs CPUs using the rcu_nocbs= boot
+ parameter will be no-CBs CPUs.
+
+ Select this if CPU 0 needs to be a no-CBs CPU for real-time
+ or energy-efficiency reasons.
+
+config RCU_NOCB_CPU_ALL
+   bool "All CPUs are build_forced no-CBs CPUs"
+   depends on RCU_NOCB_CPU
+   help
+ This option forces all CPUs to be no-CBs CPUs.  The rcu_nocbs=
+ boot parameter will be ignored.
+
+ Select this if all CPUs need to be no-CBs CPUs for real-time
+ or energy-efficiency reasons.
+
+endchoice
+
 endmenu # "RCU Subsystem"
 
 config IKCONFIG
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 2db3160..e32236e 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -85,6 +85,20 @@ static void __init rcu_bootup_announce_oddness(void)
if (nr_cpu_ids != NR_CPUS)
printk(KERN_INFO "\tRCU restricting CPUs from NR_CPUS=%d to 
nr_cpu_ids=%d.\n", NR_CPUS, nr_cpu_ids);
 #ifdef CONFIG_RCU_NOCB_CPU
+#ifndef CONFIG_RCU_NOCB_CPU_NONE
+   if (!have_rcu_nocb_mask) {
+   alloc_bootmem_cpumask_var(_nocb_mask);
+   have_rcu_nocb_mask = true;
+   }
+#ifdef CONFIG_RCU_NOCB_CPU_ZERO
+   pr_info("\tExperimental no-CBs CPU 0\n");
+   cpumask_set_cpu(0, rcu_nocb_mask);
+#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ZERO */
+#ifdef CONFIG_RCU_NOCB_CPU_ALL
+   pr_info("\tExperimental no-CBs for all CPUs\n");
+   cpumask_setall(rcu_nocb_mask);
+#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
+#endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
if (have_rcu_nocb_mask) {
cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
pr_info("\tExperimental no-CBs CPUs: %s.\n", nocb_buf);
-- 
1.7.8

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH tip/core/rcu 02/12] rcu: Provide compile-time control for no-CBs CPUs

2013-01-26 Thread Paul E. McKenney
From: Paul E. McKenney paul.mcken...@linaro.org

Currently, the only way to specify no-CBs CPUs is via the rcu_nocbs
kernel command-line parameter.  This is inconvenient in some cases,
particularly for randconfig testing, so this commit adds a new
RCU_NOCB_CPU_DEFAULT kernel configuration parameter.  Setting this
new parameter to zero (the default) retains the old behavior, setting
it to one offloads callback processing from CPU 0 (along with any
other CPUs specified by the rcu_nocbs boot-time parameter), and setting
it to two offloads callback processing from all CPUs.

Signed-off-by: Paul E. McKenney paul.mcken...@linaro.org
Signed-off-by: Paul E. McKenney paul...@linux.vnet.ibm.com
---
 init/Kconfig|   35 +++
 kernel/rcutree_plugin.h |   14 ++
 2 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/init/Kconfig b/init/Kconfig
index 97fc178..9a04156 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -686,6 +686,41 @@ config RCU_NOCB_CPU
  Say Y here if you want to help to debug reduced OS jitter.
  Say N here if you are unsure.
 
+choice
+   prompt Build-forced no-CBs CPUs
+   default RCU_NOCB_CPU_NONE
+
+config RCU_NOCB_CPU_NONE
+   bool No build_forced no-CBs CPUs
+   depends on RCU_NOCB_CPU
+   help
+ This option does not force any of the CPUs to be no-CBs CPUs.
+ Only CPUs designated by the rcu_nocbs= boot parameter will be
+ no-CBs CPUs.
+
+config RCU_NOCB_CPU_ZERO
+   bool CPU 0 is a build_forced no-CBs CPU
+   depends on RCU_NOCB_CPU
+   help
+ This option forces CPU 0 to be a no-CBs CPU.  Additional CPUs
+ may be designated as no-CBs CPUs using the rcu_nocbs= boot
+ parameter will be no-CBs CPUs.
+
+ Select this if CPU 0 needs to be a no-CBs CPU for real-time
+ or energy-efficiency reasons.
+
+config RCU_NOCB_CPU_ALL
+   bool All CPUs are build_forced no-CBs CPUs
+   depends on RCU_NOCB_CPU
+   help
+ This option forces all CPUs to be no-CBs CPUs.  The rcu_nocbs=
+ boot parameter will be ignored.
+
+ Select this if all CPUs need to be no-CBs CPUs for real-time
+ or energy-efficiency reasons.
+
+endchoice
+
 endmenu # RCU Subsystem
 
 config IKCONFIG
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 2db3160..e32236e 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -85,6 +85,20 @@ static void __init rcu_bootup_announce_oddness(void)
if (nr_cpu_ids != NR_CPUS)
printk(KERN_INFO \tRCU restricting CPUs from NR_CPUS=%d to 
nr_cpu_ids=%d.\n, NR_CPUS, nr_cpu_ids);
 #ifdef CONFIG_RCU_NOCB_CPU
+#ifndef CONFIG_RCU_NOCB_CPU_NONE
+   if (!have_rcu_nocb_mask) {
+   alloc_bootmem_cpumask_var(rcu_nocb_mask);
+   have_rcu_nocb_mask = true;
+   }
+#ifdef CONFIG_RCU_NOCB_CPU_ZERO
+   pr_info(\tExperimental no-CBs CPU 0\n);
+   cpumask_set_cpu(0, rcu_nocb_mask);
+#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ZERO */
+#ifdef CONFIG_RCU_NOCB_CPU_ALL
+   pr_info(\tExperimental no-CBs for all CPUs\n);
+   cpumask_setall(rcu_nocb_mask);
+#endif /* #ifdef CONFIG_RCU_NOCB_CPU_ALL */
+#endif /* #ifndef CONFIG_RCU_NOCB_CPU_NONE */
if (have_rcu_nocb_mask) {
cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
pr_info(\tExperimental no-CBs CPUs: %s.\n, nocb_buf);
-- 
1.7.8

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/