X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=urcu-call-rcu.h;h=8df44ef3adfc35bc4f2da2379c0241fc4db05aae;hb=5a2141a73185fb1aaaceb73f8239a7efb81c16e6;hp=f965911ebfc8b61e08e1af2b63b6c109c9e26a8b;hpb=3c24913f970c2dc1dab0a00e3ee9683250667f82;p=urcu.git diff --git a/urcu-call-rcu.h b/urcu-call-rcu.h index f965911..8df44ef 100644 --- a/urcu-call-rcu.h +++ b/urcu-call-rcu.h @@ -46,6 +46,8 @@ struct call_rcu_data; #define URCU_CALL_RCU_RT 0x1 #define URCU_CALL_RCU_RUNNING 0x2 +#define URCU_CALL_RCU_STOP 0x4 +#define URCU_CALL_RCU_STOPPED 0x8 /* * The rcu_head data structure is placed in the structure to be freed @@ -59,18 +61,32 @@ struct rcu_head { /* * Exported functions + * + * Important: see userspace RCU API.txt for call_rcu family of functions + * usage detail, including the surrounding RCU usage required when using + * these primitives. */ -struct call_rcu_data *get_cpu_call_rcu_data(int cpu); -pthread_t get_call_rcu_thread(struct call_rcu_data *crdp); -struct call_rcu_data *create_call_rcu_data(unsigned long flags); -int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp); + +void call_rcu(struct rcu_head *head, + void (*func)(struct rcu_head *head)); + +struct call_rcu_data *create_call_rcu_data(unsigned long flags, + int cpu_affinity); +void call_rcu_data_free(struct call_rcu_data *crdp); + struct call_rcu_data *get_default_call_rcu_data(void); -struct call_rcu_data *get_call_rcu_data(void); +struct call_rcu_data *get_cpu_call_rcu_data(int cpu); struct call_rcu_data *get_thread_call_rcu_data(void); +struct call_rcu_data *get_call_rcu_data(void); +pthread_t get_call_rcu_thread(struct call_rcu_data *crdp); + void set_thread_call_rcu_data(struct call_rcu_data *crdp); +int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp); + int create_all_cpu_call_rcu_data(unsigned long flags); -void call_rcu(struct rcu_head *head, - void (*func)(struct rcu_head *head)); +void free_all_cpu_call_rcu_data(void); + +void call_rcu_after_fork_child(void); #ifdef __cplusplus }