Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 182242
b: refs/heads/master
c: c26d34a
h: refs/heads/master
v: v3
  • Loading branch information
Paul E. McKenney authored and Ingo Molnar committed Feb 25, 2010
1 parent dbcb8e2 commit 74c5197
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 632ee200130899252508c478ad0e808222573fbc
refs/heads/master: c26d34a5858f96a564c45048bf5f09319d2abad1
41 changes: 34 additions & 7 deletions trunk/include/linux/rcupdate.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,12 +184,12 @@ static inline int rcu_read_lock_sched_held(void)
({ \
if (debug_locks) \
WARN_ON_ONCE(!(c)); \
rcu_dereference(p); \
rcu_dereference_raw(p); \
})

#else /* #ifdef CONFIG_PROVE_RCU */

#define rcu_dereference_check(p, c) rcu_dereference(p)
#define rcu_dereference_check(p, c) rcu_dereference_raw(p)

#endif /* #else #ifdef CONFIG_PROVE_RCU */

Expand Down Expand Up @@ -325,21 +325,48 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)


/**
* rcu_dereference - fetch an RCU-protected pointer in an
* RCU read-side critical section. This pointer may later
* be safely dereferenced.
* rcu_dereference_raw - fetch an RCU-protected pointer
*
* The caller must be within some flavor of RCU read-side critical
* section, or must be otherwise preventing the pointer from changing,
* for example, by holding an appropriate lock. This pointer may later
* be safely dereferenced. It is the caller's responsibility to have
* done the right thing, as this primitive does no checking of any kind.
*
* Inserts memory barriers on architectures that require them
* (currently only the Alpha), and, more importantly, documents
* exactly which pointers are protected by RCU.
*/

#define rcu_dereference(p) ({ \
#define rcu_dereference_raw(p) ({ \
typeof(p) _________p1 = ACCESS_ONCE(p); \
smp_read_barrier_depends(); \
(_________p1); \
})

/**
* rcu_dereference - fetch an RCU-protected pointer, checking for RCU
*
* Makes rcu_dereference_check() do the dirty work.
*/
#define rcu_dereference(p) \
rcu_dereference_check(p, rcu_read_lock_held())

/**
* rcu_dereference_bh - fetch an RCU-protected pointer, checking for RCU-bh
*
* Makes rcu_dereference_check() do the dirty work.
*/
#define rcu_dereference_bh(p) \
rcu_dereference_check(p, rcu_read_lock_bh_held())

/**
* rcu_dereference_sched - fetch RCU-protected pointer, checking for RCU-sched
*
* Makes rcu_dereference_check() do the dirty work.
*/
#define rcu_dereference_sched(p) \
rcu_dereference_check(p, rcu_read_lock_sched_held())

/**
* rcu_assign_pointer - assign (publicize) a pointer to a newly
* initialized structure that will be dereferenced by RCU read-side
Expand Down
8 changes: 8 additions & 0 deletions trunk/include/linux/srcu.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,14 @@ static inline int srcu_read_lock_held(struct srcu_struct *sp)

#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */

/**
* srcu_dereference - fetch SRCU-protected pointer with checking
*
* Makes rcu_dereference_check() do the dirty work.
*/
#define srcu_dereference(p, sp) \
rcu_dereference_check(p, srcu_read_lock_held(sp))

/**
* srcu_read_lock - register a new reader for an SRCU-protected structure.
* @sp: srcu_struct in which to register the new reader.
Expand Down

0 comments on commit 74c5197

Please sign in to comment.