aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2012-05-16 18:23:45 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2012-07-02 15:34:22 -0400
commit172708d002e0a2aca032b04fe6f2b8525c29244a (patch)
tree5245232b443036a68ffb2cccdadd797678aeb0c7 /include
parent1d1fb395f6dbc07b36285bbedcf01a73b57f7cb5 (diff)
rcu: Add a gcc-style structure initializer for RCU pointers
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>
Diffstat (limited to 'include')
-rw-r--r--include/linux/rcupdate.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 9cac722b169c..ffe24c09e53d 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -905,6 +905,14 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
905#define RCU_INIT_POINTER(p, v) \ 905#define RCU_INIT_POINTER(p, v) \
906 p = (typeof(*v) __force __rcu *)(v) 906 p = (typeof(*v) __force __rcu *)(v)
907 907
908/**
909 * RCU_POINTER_INITIALIZER() - statically initialize an RCU protected pointer
910 *
911 * GCC-style initialization for an RCU-protected pointer in a structure field.
912 */
913#define RCU_POINTER_INITIALIZER(p, v) \
914 .p = (typeof(*v) __force __rcu *)(v)
915
908static __always_inline bool __is_kfree_rcu_offset(unsigned long offset) 916static __always_inline bool __is_kfree_rcu_offset(unsigned long offset)
909{ 917{
910 return offset < 4096; 918 return offset < 4096;