]>
Commit | Line | Data |
---|---|---|
9b1d82fa PM |
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 | |
87de1cfd PM |
15 | * along with this program; if not, you can access it online at |
16 | * http://www.gnu.org/licenses/gpl-2.0.html. | |
9b1d82fa PM |
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 - | |
4ce5b903 | 23 | * Documentation/RCU |
9b1d82fa | 24 | */ |
9b1d82fa PM |
25 | #ifndef __LINUX_TINY_H |
26 | #define __LINUX_TINY_H | |
27 | ||
5f192ab0 | 28 | #include <linux/ktime.h> |
9b1d82fa | 29 | |
71c40fd0 PM |
30 | /* Never flag non-existent other CPUs! */ |
31 | static inline bool rcu_eqs_special_set(int cpu) { return false; } | |
b8c17e66 | 32 | |
765a3f4f PM |
33 | static inline unsigned long get_state_synchronize_rcu(void) |
34 | { | |
35 | return 0; | |
36 | } | |
37 | ||
38 | static inline void cond_synchronize_rcu(unsigned long oldstate) | |
39 | { | |
40 | might_sleep(); | |
41 | } | |
42 | ||
709fdce7 | 43 | extern void rcu_barrier(void); |
2c42818e | 44 | |
a57eb940 | 45 | static inline void synchronize_rcu_expedited(void) |
bf66f18e | 46 | { |
a8bb74ac | 47 | synchronize_rcu(); |
bf66f18e PM |
48 | } |
49 | ||
709fdce7 | 50 | static inline void kfree_call_rcu(struct rcu_head *head, rcu_callback_t func) |
bf66f18e | 51 | { |
486e2593 | 52 | call_rcu(head, func); |
9b1d82fa PM |
53 | } |
54 | ||
709fdce7 | 55 | void rcu_qs(void); |
7b27d547 | 56 | |
d28139c4 | 57 | static inline void rcu_softirq_qs(void) |
486e2593 | 58 | { |
709fdce7 | 59 | rcu_qs(); |
486e2593 PM |
60 | } |
61 | ||
bcbfdd01 PM |
62 | #define rcu_note_context_switch(preempt) \ |
63 | do { \ | |
709fdce7 | 64 | rcu_qs(); \ |
6f56f714 | 65 | rcu_tasks_qs(current); \ |
bcbfdd01 | 66 | } while (0) |
a57eb940 | 67 | |
5f192ab0 PM |
68 | static inline int rcu_needs_cpu(u64 basemono, u64 *nextevt) |
69 | { | |
70 | *nextevt = KTIME_MAX; | |
71 | return 0; | |
72 | } | |
73 | ||
29ce8310 GN |
74 | /* |
75 | * Take advantage of the fact that there is only one CPU, which | |
76 | * allows us to ignore virtualization-based context switches. | |
77 | */ | |
71c40fd0 PM |
78 | static inline void rcu_virt_note_context_switch(int cpu) { } |
79 | static inline void rcu_cpu_stall_reset(void) { } | |
1b27291b | 80 | static inline int rcu_jiffies_till_stall_check(void) { return 21 * HZ; } |
71c40fd0 PM |
81 | static inline void rcu_idle_enter(void) { } |
82 | static inline void rcu_idle_exit(void) { } | |
83 | static inline void rcu_irq_enter(void) { } | |
71c40fd0 PM |
84 | static inline void rcu_irq_exit_irqson(void) { } |
85 | static inline void rcu_irq_enter_irqson(void) { } | |
86 | static inline void rcu_irq_exit(void) { } | |
87 | static inline void exit_rcu(void) { } | |
3e310098 PM |
88 | static inline bool rcu_preempt_need_deferred_qs(struct task_struct *t) |
89 | { | |
90 | return false; | |
91 | } | |
92 | static inline void rcu_preempt_deferred_qs(struct task_struct *t) { } | |
825c5bd2 | 93 | #ifdef CONFIG_SRCU |
584dc4ce | 94 | void rcu_scheduler_starting(void); |
825c5bd2 | 95 | #else /* #ifndef CONFIG_SRCU */ |
71c40fd0 | 96 | static inline void rcu_scheduler_starting(void) { } |
825c5bd2 | 97 | #endif /* #else #ifndef CONFIG_SRCU */ |
d2b1654f | 98 | static inline void rcu_end_inkernel_boot(void) { } |
71c40fd0 | 99 | static inline bool rcu_is_watching(void) { return true; } |
5c173eb8 | 100 | |
71c40fd0 PM |
101 | /* Avoid RCU read-side critical sections leaking across. */ |
102 | static inline void rcu_all_qs(void) { barrier(); } | |
5cd37193 | 103 | |
4df83742 TG |
104 | /* RCUtree hotplug events */ |
105 | #define rcutree_prepare_cpu NULL | |
106 | #define rcutree_online_cpu NULL | |
107 | #define rcutree_offline_cpu NULL | |
108 | #define rcutree_dead_cpu NULL | |
109 | #define rcutree_dying_cpu NULL | |
f64c6013 | 110 | static inline void rcu_cpu_starting(unsigned int cpu) { } |
4df83742 | 111 | |
9b1d82fa | 112 | #endif /* __LINUX_RCUTINY_H */ |