aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcu/tree.c
diff options
context:
space:
mode:
authorAlexander Gordeev <agordeev@redhat.com>2015-06-03 02:18:30 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-07-15 17:45:20 -0400
commitcb007102398edd06ffc4488bf841c2e10f14d2e7 (patch)
tree617798e5e989c19032c3219dcddf24256670abdd /kernel/rcu/tree.c
parent199977bff9efceec649d74510fa9754e107ce0c5 (diff)
rcu: Limit count of static data to the number of RCU levels
Although a number of RCU levels may be less than the current maximum of four, some static data associated with each level are allocated for all four levels. As result, the extra data never get accessed and just wast memory. This update limits count of allocated items to the number of used RCU levels. Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Cc: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Alexander Gordeev <agordeev@redhat.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/tree.c')
-rw-r--r--kernel/rcu/tree.c21
1 files changed, 4 insertions, 17 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index 7226e25ba97f..e53bbc53bcd5 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -124,13 +124,8 @@ module_param(rcu_fanout_exact, bool, 0444);
124static int rcu_fanout_leaf = RCU_FANOUT_LEAF; 124static int rcu_fanout_leaf = RCU_FANOUT_LEAF;
125module_param(rcu_fanout_leaf, int, 0444); 125module_param(rcu_fanout_leaf, int, 0444);
126int rcu_num_lvls __read_mostly = RCU_NUM_LVLS; 126int rcu_num_lvls __read_mostly = RCU_NUM_LVLS;
127static int num_rcu_lvl[] = { /* Number of rcu_nodes at specified level. */ 127/* Number of rcu_nodes at specified level. */
128 NUM_RCU_LVL_0, 128static int num_rcu_lvl[] = NUM_RCU_LVL_INIT;
129 NUM_RCU_LVL_1,
130 NUM_RCU_LVL_2,
131 NUM_RCU_LVL_3,
132 NUM_RCU_LVL_4,
133};
134int rcu_num_nodes __read_mostly = NUM_RCU_NODES; /* Total # rcu_nodes in use. */ 129int rcu_num_nodes __read_mostly = NUM_RCU_NODES; /* Total # rcu_nodes in use. */
135 130
136/* 131/*
@@ -3994,16 +3989,8 @@ static void __init rcu_init_levelspread(int *levelspread, const int *levelcnt)
3994static void __init rcu_init_one(struct rcu_state *rsp, 3989static void __init rcu_init_one(struct rcu_state *rsp,
3995 struct rcu_data __percpu *rda) 3990 struct rcu_data __percpu *rda)
3996{ 3991{
3997 static const char * const buf[] = { 3992 static const char * const buf[] = RCU_NODE_NAME_INIT;
3998 "rcu_node_0", 3993 static const char * const fqs[] = RCU_FQS_NAME_INIT;
3999 "rcu_node_1",
4000 "rcu_node_2",
4001 "rcu_node_3" };
4002 static const char * const fqs[] = {
4003 "rcu_node_fqs_0",
4004 "rcu_node_fqs_1",
4005 "rcu_node_fqs_2",
4006 "rcu_node_fqs_3" };
4007 static u8 fl_mask = 0x1; 3994 static u8 fl_mask = 0x1;
4008 3995
4009 int levelcnt[RCU_NUM_LVLS]; /* # nodes in each level. */ 3996 int levelcnt[RCU_NUM_LVLS]; /* # nodes in each level. */