Messages in this thread Patch in this message | | | From | "Paul E. McKenney" <> | Subject | [PATCH tip/core/rcu 04/14] rcu: Add a gcc-style structure initializer for RCU pointers | Date | Fri, 15 Jun 2012 13:13:05 -0700 |
| |
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
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 INIT_RCU_POINTER() macro that is specifically designed for gcc-style initialization.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> --- 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 26d1a47..eb92c21 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) +/** + * INIT_RCU_POINTER() - statically initialize an RCU protected pointer + * + * GCC-style initialization for an RCU-protected pointer in a structure field. + */ +#define INIT_RCU_POINTER(p, v) \ + .p = (typeof(*v) __force __rcu *)(v) + static __always_inline bool __is_kfree_rcu_offset(unsigned long offset) { return offset < 4096; -- 1.7.8
| |