aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2010-12-14 19:07:52 -0500
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2010-12-17 15:34:20 -0500
commit0209f6490b030f35349a2bb71294f3fd75b0f36d (patch)
tree159e233c6fcaf63fbb1a18f5db54af38a8336ee3 /kernel/rcutree.c
parent121dfc4b3eba9e2f3c42d35205a3510cc65b9931 (diff)
rcu: limit rcu_node leaf-level fanout
Some recent benchmarks have indicated possible lock contention on the leaf-level rcu_node locks. This commit therefore limits the number of CPUs per leaf-level rcu_node structure to 16, in other words, there can be at most 16 rcu_data structures fanning into a given rcu_node structure. Prior to this, the limit was 32 on 32-bit systems and 64 on 64-bit systems. Note that the fanout of non-leaf rcu_node structures is unchanged. The organization of accesses to the rcu_node tree is such that references to non-leaf rcu_node structures are much less frequent than to the leaf structures. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index c39ec5b4ae82..01c8ad33c510 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1869,8 +1869,9 @@ static void __init rcu_init_levelspread(struct rcu_state *rsp)
1869{ 1869{
1870 int i; 1870 int i;
1871 1871
1872 for (i = NUM_RCU_LVLS - 1; i >= 0; i--) 1872 for (i = NUM_RCU_LVLS - 1; i > 0; i--)
1873 rsp->levelspread[i] = CONFIG_RCU_FANOUT; 1873 rsp->levelspread[i] = CONFIG_RCU_FANOUT;
1874 rsp->levelspread[0] = RCU_FANOUT_LEAF;
1874} 1875}
1875#else /* #ifdef CONFIG_RCU_FANOUT_EXACT */ 1876#else /* #ifdef CONFIG_RCU_FANOUT_EXACT */
1876static void __init rcu_init_levelspread(struct rcu_state *rsp) 1877static void __init rcu_init_levelspread(struct rcu_state *rsp)