aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/rcutiny.h
diff options
context:
space:
mode:
authorPaul E. McKenney <paul.mckenney@linaro.org>2010-09-09 16:40:39 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2010-11-17 18:45:09 -0500
commitb2c0710c464ede15e1fc52fb1e7ee9ba54cea186 (patch)
tree7524518fec8a02e53c3fab558b40a5e94f0bb5ec /include/linux/rcutiny.h
parent8e8be45e8e55daa381028aec339829929ddb53a5 (diff)
rcu: move TINY_RCU from softirq to kthread
If RCU priority boosting is to be meaningful, callback invocation must be boosted in addition to preempted RCU readers. Otherwise, in presence of CPU real-time threads, the grace period ends, but the callbacks don't get invoked. If the callbacks don't get invoked, the associated memory doesn't get freed, so the system is still subject to OOM. But it is not reasonable to priority-boost RCU_SOFTIRQ, so this commit moves the callback invocations to a kthread, which can be boosted easily. Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'include/linux/rcutiny.h')
-rw-r--r--include/linux/rcutiny.h8
1 files changed, 3 insertions, 5 deletions
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
index 13877cb93a60..ea025a611fcc 100644
--- a/include/linux/rcutiny.h
+++ b/include/linux/rcutiny.h
@@ -27,7 +27,9 @@
27 27
28#include <linux/cache.h> 28#include <linux/cache.h>
29 29
30#define rcu_init_sched() do { } while (0) 30static inline void rcu_init(void)
31{
32}
31 33
32#ifdef CONFIG_TINY_RCU 34#ifdef CONFIG_TINY_RCU
33 35
@@ -125,16 +127,12 @@ static inline void rcu_cpu_stall_reset(void)
125} 127}
126 128
127#ifdef CONFIG_DEBUG_LOCK_ALLOC 129#ifdef CONFIG_DEBUG_LOCK_ALLOC
128
129extern int rcu_scheduler_active __read_mostly; 130extern int rcu_scheduler_active __read_mostly;
130extern void rcu_scheduler_starting(void); 131extern void rcu_scheduler_starting(void);
131
132#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ 132#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
133
134static inline void rcu_scheduler_starting(void) 133static inline void rcu_scheduler_starting(void)
135{ 134{
136} 135}
137
138#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */ 136#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
139 137
140#endif /* __LINUX_RCUTINY_H */ 138#endif /* __LINUX_RCUTINY_H */