aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.h
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-06-15 18:47:09 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-06-16 02:07:21 -0400
commita46e0899eec7a3069bcadd45dfba7bf67c6ed016 (patch)
tree78158b4056fe1365d5086f66769abdc3ef2643c3 /kernel/rcutree.h
parent09223371deac67d08ca0b70bd18787920284c967 (diff)
rcu: use softirq instead of kthreads except when RCU_BOOST=y
This patch #ifdefs RCU kthreads out of the kernel unless RCU_BOOST=y, thus eliminating context-switch overhead if RCU priority boosting has not been configured. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.h')
-rw-r--r--kernel/rcutree.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
index 0fed6b934d2a..434288c7ad88 100644
--- a/kernel/rcutree.h
+++ b/kernel/rcutree.h
@@ -369,6 +369,7 @@ struct rcu_state {
369 /* period because */ 369 /* period because */
370 /* force_quiescent_state() */ 370 /* force_quiescent_state() */
371 /* was running. */ 371 /* was running. */
372 u8 boost; /* Subject to priority boost. */
372 unsigned long gpnum; /* Current gp number. */ 373 unsigned long gpnum; /* Current gp number. */
373 unsigned long completed; /* # of last completed gp. */ 374 unsigned long completed; /* # of last completed gp. */
374 375
@@ -439,7 +440,6 @@ static void rcu_preempt_offline_cpu(int cpu);
439#endif /* #ifdef CONFIG_HOTPLUG_CPU */ 440#endif /* #ifdef CONFIG_HOTPLUG_CPU */
440static void rcu_preempt_check_callbacks(int cpu); 441static void rcu_preempt_check_callbacks(int cpu);
441static void rcu_preempt_process_callbacks(void); 442static void rcu_preempt_process_callbacks(void);
442static void rcu_preempt_do_callbacks(void);
443void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu)); 443void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu));
444#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU) 444#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU)
445static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp); 445static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp);
@@ -451,11 +451,15 @@ static void rcu_preempt_send_cbs_to_online(void);
451static void __init __rcu_init_preempt(void); 451static void __init __rcu_init_preempt(void);
452static void rcu_needs_cpu_flush(void); 452static void rcu_needs_cpu_flush(void);
453static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags); 453static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags);
454static void rcu_preempt_boost_start_gp(struct rcu_node *rnp);
455static void invoke_rcu_callbacks_kthread(void);
456#ifdef CONFIG_RCU_BOOST
457static void rcu_preempt_do_callbacks(void);
454static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, 458static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp,
455 cpumask_var_t cm); 459 cpumask_var_t cm);
456static void rcu_preempt_boost_start_gp(struct rcu_node *rnp);
457static int __cpuinit rcu_spawn_one_boost_kthread(struct rcu_state *rsp, 460static int __cpuinit rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
458 struct rcu_node *rnp, 461 struct rcu_node *rnp,
459 int rnp_index); 462 int rnp_index);
463#endif /* #ifdef CONFIG_RCU_BOOST */
460 464
461#endif /* #ifndef RCU_TREE_NONCORE */ 465#endif /* #ifndef RCU_TREE_NONCORE */