diff options
Diffstat (limited to 'kernel/rcu/tree.h')
| -rw-r--r-- | kernel/rcu/tree.h | 35 | 
1 files changed, 26 insertions, 9 deletions
| diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index a69d3dab2ec4..4adb7ca0bf47 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -35,11 +35,33 @@   * In practice, this did work well going from three levels to four.   * Of course, your mileage may vary.   */ +  #define MAX_RCU_LVLS 4 -#define RCU_FANOUT_1	      (CONFIG_RCU_FANOUT_LEAF) -#define RCU_FANOUT_2	      (RCU_FANOUT_1 * CONFIG_RCU_FANOUT) -#define RCU_FANOUT_3	      (RCU_FANOUT_2 * CONFIG_RCU_FANOUT) -#define RCU_FANOUT_4	      (RCU_FANOUT_3 * CONFIG_RCU_FANOUT) + +#ifdef CONFIG_RCU_FANOUT +#define RCU_FANOUT CONFIG_RCU_FANOUT +#else /* #ifdef CONFIG_RCU_FANOUT */ +# ifdef CONFIG_64BIT +# define RCU_FANOUT 64 +# else +# define RCU_FANOUT 32 +# endif +#endif /* #else #ifdef CONFIG_RCU_FANOUT */ + +#ifdef CONFIG_RCU_FANOUT_LEAF +#define RCU_FANOUT_LEAF CONFIG_RCU_FANOUT_LEAF +#else /* #ifdef CONFIG_RCU_FANOUT_LEAF */ +# ifdef CONFIG_64BIT +# define RCU_FANOUT_LEAF 64 +# else +# define RCU_FANOUT_LEAF 32 +# endif +#endif /* #else #ifdef CONFIG_RCU_FANOUT_LEAF */ + +#define RCU_FANOUT_1	      (RCU_FANOUT_LEAF) +#define RCU_FANOUT_2	      (RCU_FANOUT_1 * RCU_FANOUT) +#define RCU_FANOUT_3	      (RCU_FANOUT_2 * RCU_FANOUT) +#define RCU_FANOUT_4	      (RCU_FANOUT_3 * RCU_FANOUT)  #if NR_CPUS <= RCU_FANOUT_1  #  define RCU_NUM_LVLS	      1 @@ -170,7 +192,6 @@ struct rcu_node {  				/*  if there is no such task.  If there */  				/*  is no current expedited grace period, */  				/*  then there can cannot be any such task. */ -#ifdef CONFIG_RCU_BOOST  	struct list_head *boost_tasks;  				/* Pointer to first task that needs to be */  				/*  priority boosted, or NULL if no priority */ @@ -208,7 +229,6 @@ struct rcu_node {  	unsigned long n_balk_nos;  				/* Refused to boost: not sure why, though. */  				/*  This can happen due to race conditions. */ -#endif /* #ifdef CONFIG_RCU_BOOST */  #ifdef CONFIG_RCU_NOCB_CPU  	wait_queue_head_t nocb_gp_wq[2];  				/* Place for rcu_nocb_kthread() to wait GP. */ @@ -519,14 +539,11 @@ extern struct list_head rcu_struct_flavors;   * RCU implementation internal declarations:   */  extern struct rcu_state rcu_sched_state; -DECLARE_PER_CPU(struct rcu_data, rcu_sched_data);  extern struct rcu_state rcu_bh_state; -DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);  #ifdef CONFIG_PREEMPT_RCU  extern struct rcu_state rcu_preempt_state; -DECLARE_PER_CPU(struct rcu_data, rcu_preempt_data);  #endif /* #ifdef CONFIG_PREEMPT_RCU */  #ifdef CONFIG_RCU_BOOST |