|
@@ -911,6 +911,14 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
|
|
* rcu_assign_pointer() is a very bad thing that results in
|
|
* rcu_assign_pointer() is a very bad thing that results in
|
|
* impossible-to-diagnose memory corruption. So please be careful.
|
|
* impossible-to-diagnose memory corruption. So please be careful.
|
|
* See the RCU_INIT_POINTER() comment header for details.
|
|
* See the RCU_INIT_POINTER() comment header for details.
|
|
|
|
+ *
|
|
|
|
+ * Note that rcu_assign_pointer() evaluates each of its arguments only
|
|
|
|
+ * once, appearances notwithstanding. One of the "extra" evaluations
|
|
|
|
+ * is in typeof() and the other visible only to sparse (__CHECKER__),
|
|
|
|
+ * neither of which actually execute the argument. As with most cpp
|
|
|
|
+ * macros, this execute-arguments-only-once property is important, so
|
|
|
|
+ * please be careful when making changes to rcu_assign_pointer() and the
|
|
|
|
+ * other macros that it invokes.
|
|
*/
|
|
*/
|
|
#define rcu_assign_pointer(p, v) \
|
|
#define rcu_assign_pointer(p, v) \
|
|
__rcu_assign_pointer((p), (v), __rcu)
|
|
__rcu_assign_pointer((p), (v), __rcu)
|