summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2012-09-06 22:38:02 (GMT)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2012-09-23 14:41:56 (GMT)
commitb17c7035f37f47c7f7cb08a5555ab2aebfa31f91 (patch)
tree995c37771f64470dda04e631a8223e74d6713b0a
parent4dbd6bb38dd1cbfa5cb21e56e51dffc74aa20038 (diff)
downloadlinux-b17c7035f37f47c7f7cb08a5555ab2aebfa31f91.tar.xz
rcu: Shrink RCU based on number of CPUs
Currently, rcu_init_geometry() only reshapes RCU's combining trees if the leaf fanout is changed at boot time. This means that by default, kernels compiled with (say) NR_CPUS=4096 will keep oversized data structures, even when running on systems with (say) four CPUs. This commit therefore checks to see if the maximum number of CPUs on the actual running system (nr_cpu_ids) differs from NR_CPUS, and if so reshapes the combining trees accordingly. Reported-by: Mike Galbraith <efault@gmx.de> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-rw-r--r--kernel/rcutree.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 8b9496f..b703989 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -2821,7 +2821,8 @@ static void __init rcu_init_geometry(void)
int rcu_capacity[MAX_RCU_LVLS + 1];
/* If the compile-time values are accurate, just leave. */
- if (rcu_fanout_leaf == CONFIG_RCU_FANOUT_LEAF)
+ if (rcu_fanout_leaf == CONFIG_RCU_FANOUT_LEAF &&
+ nr_cpu_ids == NR_CPUS)
return;
/*