tls-compat.h | tls-compat.h | |||
---|---|---|---|---|
skipping to change at line 50 | skipping to change at line 50 | |||
* | * | |||
* Answer: Use typedef to assign a type_name to the compound type. | * Answer: Use typedef to assign a type_name to the compound type. | |||
* Example: Define a TLS variable which is an int array with len=4: | * Example: Define a TLS variable which is an int array with len=4: | |||
* | * | |||
* typedef int my_int_array_type[4]; | * typedef int my_int_array_type[4]; | |||
* DEFINE_URCU_TLS(my_int_array_type, var_name); | * DEFINE_URCU_TLS(my_int_array_type, var_name); | |||
* | * | |||
* Another exmaple: | * Another exmaple: | |||
* typedef void (*call_rcu_flavor)(struct rcu_head *, XXXX); | * typedef void (*call_rcu_flavor)(struct rcu_head *, XXXX); | |||
* DECLARE_URCU_TLS(call_rcu_flavor, p_call_rcu); | * DECLARE_URCU_TLS(call_rcu_flavor, p_call_rcu); | |||
* | ||||
* NOTE: URCU_TLS() is NOT async-signal-safe, you can't use it | ||||
* inside any function which can be called from signal handler. | ||||
* | ||||
* But if pthread_getspecific() is async-signal-safe in your | ||||
* platform, you can make URCU_TLS() async-signal-safe via: | ||||
* ensuring the first call to URCU_TLS() of a given TLS variable of | ||||
* all threads is called earliest from a non-signal handler function. | ||||
* | ||||
* Example: In any thread, the first call of URCU_TLS(rcu_reader) | ||||
* is called from rcu_register_thread(), so we can ensure all later | ||||
* URCU_TLS(rcu_reader) in any thread is async-signal-safe. | ||||
* | ||||
* Moreover, URCU_TLS variables should not be touched from signal | ||||
* handlers setup with with sigaltstack(2). | ||||
*/ | */ | |||
# define DECLARE_URCU_TLS(type, name) \ | # define DECLARE_URCU_TLS(type, name) \ | |||
CONFIG_RCU_TLS type name | CONFIG_RCU_TLS type name | |||
# define DEFINE_URCU_TLS(type, name) \ | # define DEFINE_URCU_TLS(type, name) \ | |||
CONFIG_RCU_TLS type name | CONFIG_RCU_TLS type name | |||
# define URCU_TLS(name) (name) | # define URCU_TLS(name) (name) | |||
End of changes. 1 change blocks. | ||||
0 lines changed or deleted | 15 lines changed or added | |||