This source file includes following definitions.
- rcu_sync_is_idle
1
2
3
4
5
6
7
8
9
10 #ifndef _LINUX_RCU_SYNC_H_
11 #define _LINUX_RCU_SYNC_H_
12
13 #include <linux/wait.h>
14 #include <linux/rcupdate.h>
15
16
17 struct rcu_sync {
18 int gp_state;
19 int gp_count;
20 wait_queue_head_t gp_wait;
21
22 struct rcu_head cb_head;
23 };
24
25
26
27
28
29
30
31
32 static inline bool rcu_sync_is_idle(struct rcu_sync *rsp)
33 {
34 RCU_LOCKDEP_WARN(!rcu_read_lock_any_held(),
35 "suspicious rcu_sync_is_idle() usage");
36 return !READ_ONCE(rsp->gp_state);
37 }
38
39 extern void rcu_sync_init(struct rcu_sync *);
40 extern void rcu_sync_enter_start(struct rcu_sync *);
41 extern void rcu_sync_enter(struct rcu_sync *);
42 extern void rcu_sync_exit(struct rcu_sync *);
43 extern void rcu_sync_dtor(struct rcu_sync *);
44
45 #define __RCU_SYNC_INITIALIZER(name) { \
46 .gp_state = 0, \
47 .gp_count = 0, \
48 .gp_wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.gp_wait), \
49 }
50
51 #define DEFINE_RCU_SYNC(name) \
52 struct rcu_sync name = __RCU_SYNC_INITIALIZER(name)
53
54 #endif