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>
This commit is contained in:
parent
1d1fb395f6
commit
172708d002
|
@ -905,6 +905,14 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
|
||||||
#define RCU_INIT_POINTER(p, v) \
|
#define RCU_INIT_POINTER(p, v) \
|
||||||
p = (typeof(*v) __force __rcu *)(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)
|
static __always_inline bool __is_kfree_rcu_offset(unsigned long offset)
|
||||||
{
|
{
|
||||||
return offset < 4096;
|
return offset < 4096;
|
||||||
|
|
Loading…
Reference in New Issue