mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-04 05:11:46 +00:00
rcu: define __rcu address space modifier for sparse
This commit provides definitions for the __rcu annotation defined earlier. This annotation permits sparse to check for correct use of RCU-protected pointers. If a pointer that is annotated with __rcu is accessed directly (as opposed to via rcu_dereference(), rcu_assign_pointer(), or one of their variants), sparse can be made to complain. To enable such complaints, use the new default-disabled CONFIG_SPARSE_RCU_POINTER kernel configuration option. Please note that these sparse complaints are intended to be a debugging aid, -not- a code-style-enforcement mechanism. There are special rcu_dereference_protected() and rcu_access_pointer() accessors for use when RCU read-side protection is not required, for example, when no other CPU has access to the data structure in question or while the current CPU hold the update-side lock. This patch also updates a number of docbook comments that were showing their age. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Christopher Li <sparse@chrisli.org> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
parent
d34a16661e
commit
ca5ecddfa8
5 changed files with 260 additions and 148 deletions
|
@ -108,12 +108,31 @@ 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
|
||||
* srcu_dereference_check - fetch SRCU-protected pointer for later dereferencing
|
||||
* @p: the pointer to fetch and protect for later dereferencing
|
||||
* @sp: pointer to the srcu_struct, which is used to check that we
|
||||
* really are in an SRCU read-side critical section.
|
||||
* @c: condition to check for update-side use
|
||||
*
|
||||
* Makes rcu_dereference_check() do the dirty work.
|
||||
* If PROVE_RCU is enabled, invoking this outside of an RCU read-side
|
||||
* critical section will result in an RCU-lockdep splat, unless @c evaluates
|
||||
* to 1. The @c argument will normally be a logical expression containing
|
||||
* lockdep_is_held() calls.
|
||||
*/
|
||||
#define srcu_dereference(p, sp) \
|
||||
rcu_dereference_check(p, srcu_read_lock_held(sp))
|
||||
#define srcu_dereference_check(p, sp, c) \
|
||||
__rcu_dereference_check((p), srcu_read_lock_held(sp) || (c), __rcu)
|
||||
|
||||
/**
|
||||
* srcu_dereference - fetch SRCU-protected pointer for later dereferencing
|
||||
* @p: the pointer to fetch and protect for later dereferencing
|
||||
* @sp: pointer to the srcu_struct, which is used to check that we
|
||||
* really are in an SRCU read-side critical section.
|
||||
*
|
||||
* Makes rcu_dereference_check() do the dirty work. If PROVE_RCU
|
||||
* is enabled, invoking this outside of an RCU read-side critical
|
||||
* section will result in an RCU-lockdep splat.
|
||||
*/
|
||||
#define srcu_dereference(p, sp) srcu_dereference_check((p), (sp), 0)
|
||||
|
||||
/**
|
||||
* srcu_read_lock - register a new reader for an SRCU-protected structure.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue