Message ID | 1340379312-6684-4-git-send-email-paulmck@linux.vnet.ibm.com |
---|---|
State | Accepted |
Commit | 172708d002e0a2aca032b04fe6f2b8525c29244a |
Headers | show |
Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote: > RCU_INIT_POINTER() returns a value that is never used, and which should > be abolished due to terminal ugliness: > > q = RCU_INIT_POINTER(global_p, p); > > However, there are two uses that cannot be handled by a do-while > formulation because they do gcc-style initialization: > > RCU_INIT_POINTER(.real_cred, &init_cred), > RCU_INIT_POINTER(.cred, &init_cred), > > This usage is clever, but not necessarily the nicest approach. > This commit therefore creates an RCU_POINTER_INITIALIZER() macro that > is specifically designed for gcc-style initialization. > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Acked-by: David Howells <dhowells@redhat.com>
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 26d1a47..88e4e08 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -906,6 +906,14 @@ static inline notrace void rcu_read_unlock_sched_notrace(void) #define RCU_INIT_POINTER(p, v) \ p = (typeof(*v) __force __rcu *)(v) +/** + * RCU_POINTER_INITIALIZER() - statically initialize an RCU protected pointer + * + * GCC-style initialization for an RCU-protected pointer in a structure field. + */ +#define RCU_POINTER_INITIALIZER(p, v) \ + .p = (typeof(*v) __force __rcu *)(v) + static __always_inline bool __is_kfree_rcu_offset(unsigned long offset) { return offset < 4096;