aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/hardirq.h24
-rw-r--r--include/linux/rcupdate.h6
-rw-r--r--include/linux/rcutiny.h97
3 files changed, 127 insertions, 0 deletions
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
index 6d527ee82b2b..d5b387669dab 100644
--- a/include/linux/hardirq.h
+++ b/include/linux/hardirq.h
@@ -139,10 +139,34 @@ static inline void account_system_vtime(struct task_struct *tsk)
139#endif 139#endif
140 140
141#if defined(CONFIG_NO_HZ) 141#if defined(CONFIG_NO_HZ)
142#if defined(CONFIG_TINY_RCU)
143extern void rcu_enter_nohz(void);
144extern void rcu_exit_nohz(void);
145
146static inline void rcu_irq_enter(void)
147{
148 rcu_exit_nohz();
149}
150
151static inline void rcu_irq_exit(void)
152{
153 rcu_enter_nohz();
154}
155
156static inline void rcu_nmi_enter(void)
157{
158}
159
160static inline void rcu_nmi_exit(void)
161{
162}
163
164#else
142extern void rcu_irq_enter(void); 165extern void rcu_irq_enter(void);
143extern void rcu_irq_exit(void); 166extern void rcu_irq_exit(void);
144extern void rcu_nmi_enter(void); 167extern void rcu_nmi_enter(void);
145extern void rcu_nmi_exit(void); 168extern void rcu_nmi_exit(void);
169#endif
146#else 170#else
147# define rcu_irq_enter() do { } while (0) 171# define rcu_irq_enter() do { } while (0)
148# define rcu_irq_exit() do { } while (0) 172# define rcu_irq_exit() do { } while (0)
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 3ebd0b7bcb08..6dd71fa48429 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -68,11 +68,17 @@ extern int sched_expedited_torture_stats(char *page);
68/* Internal to kernel */ 68/* Internal to kernel */
69extern void rcu_init(void); 69extern void rcu_init(void);
70extern void rcu_scheduler_starting(void); 70extern void rcu_scheduler_starting(void);
71#ifndef CONFIG_TINY_RCU
71extern int rcu_needs_cpu(int cpu); 72extern int rcu_needs_cpu(int cpu);
73#else
74static inline int rcu_needs_cpu(int cpu) { return 0; }
75#endif
72extern int rcu_scheduler_active; 76extern int rcu_scheduler_active;
73 77
74#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) 78#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
75#include <linux/rcutree.h> 79#include <linux/rcutree.h>
80#elif CONFIG_TINY_RCU
81#include <linux/rcutiny.h>
76#else 82#else
77#error "Unknown RCU implementation specified to kernel configuration" 83#error "Unknown RCU implementation specified to kernel configuration"
78#endif 84#endif
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
new file mode 100644
index 000000000000..891073c264dc
--- /dev/null
+++ b/include/linux/rcutiny.h
@@ -0,0 +1,97 @@
1/*
2 * Read-Copy Update mechanism for mutual exclusion, the Bloatwatch edition.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 *
18 * Copyright IBM Corporation, 2008
19 *
20 * Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
21 *
22 * For detailed explanation of Read-Copy Update mechanism see -
23 * Documentation/RCU
24 */
25
26#ifndef __LINUX_TINY_H
27#define __LINUX_TINY_H
28
29#include <linux/cache.h>
30
31void rcu_sched_qs(int cpu);
32void rcu_bh_qs(int cpu);
33
34#define __rcu_read_lock() preempt_disable()
35#define __rcu_read_unlock() preempt_enable()
36#define __rcu_read_lock_bh() local_bh_disable()
37#define __rcu_read_unlock_bh() local_bh_enable()
38#define call_rcu_sched call_rcu
39
40#define rcu_init_sched() do { } while (0)
41extern void rcu_check_callbacks(int cpu, int user);
42extern void __rcu_init(void);
43
44/*
45 * Return the number of grace periods.
46 */
47static inline long rcu_batches_completed(void)
48{
49 return 0;
50}
51
52/*
53 * Return the number of bottom-half grace periods.
54 */
55static inline long rcu_batches_completed_bh(void)
56{
57 return 0;
58}
59
60extern int rcu_expedited_torture_stats(char *page);
61
62static inline void synchronize_rcu_expedited(void)
63{
64 synchronize_sched();
65}
66
67static inline void synchronize_rcu_bh_expedited(void)
68{
69 synchronize_sched();
70}
71
72struct notifier_block;
73extern int rcu_cpu_notify(struct notifier_block *self,
74 unsigned long action, void *hcpu);
75
76#ifdef CONFIG_NO_HZ
77
78extern void rcu_enter_nohz(void);
79extern void rcu_exit_nohz(void);
80
81#else /* #ifdef CONFIG_NO_HZ */
82
83static inline void rcu_enter_nohz(void)
84{
85}
86
87static inline void rcu_exit_nohz(void)
88{
89}
90
91#endif /* #else #ifdef CONFIG_NO_HZ */
92
93static inline void exit_rcu(void)
94{
95}
96
97#endif /* __LINUX_RCUTINY_H */