diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-05-16 18:23:45 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-07-02 15:34:22 -0400 |
commit | 172708d002e0a2aca032b04fe6f2b8525c29244a (patch) | |
tree | 5245232b443036a68ffb2cccdadd797678aeb0c7 | |
parent | 1d1fb395f6dbc07b36285bbedcf01a73b57f7cb5 (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>
-rw-r--r-- | include/linux/rcupdate.h | 8 |
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 | |||
908 | static __always_inline bool __is_kfree_rcu_offset(unsigned long offset) | 916 | static __always_inline bool __is_kfree_rcu_offset(unsigned long offset) |
909 | { | 917 | { |
910 | return offset < 4096; | 918 | return offset < 4096; |