X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=urcu-call-rcu.h;h=f7eac8de964d56d717cfc5b48432f57c16fc32f9;hb=edf0b358d645c135f903a2331324b900e79f65ae;hp=5ea0c23b21d74698a1a2f1f1b913ad5bb50d0687;hpb=1f689e13ea7e519b1afc001e9c55a7b1b60b599f;p=urcu.git diff --git a/urcu-call-rcu.h b/urcu-call-rcu.h index 5ea0c23..f7eac8d 100644 --- a/urcu-call-rcu.h +++ b/urcu-call-rcu.h @@ -61,33 +61,33 @@ struct rcu_head { /* * Exported functions + * + * Important: see rcu-api.txt in userspace-rcu documentation for + * call_rcu family of functions usage detail, including the surrounding + * RCU usage required when using these primitives. */ -/* - * get_cpu_call_rcu_data should be called with RCU read-side lock held. - * Callers should be registered RCU read-side threads. - */ -struct call_rcu_data *get_cpu_call_rcu_data(int cpu); -pthread_t get_call_rcu_thread(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); -int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp); +void call_rcu_data_free(struct call_rcu_data *crdp); + struct call_rcu_data *get_default_call_rcu_data(void); -/* - * get_call_rcu_data should be called from registered RCU read-side - * threads. - */ -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); -/* - * call_rcu should be called from registered RCU read-side threads. - */ -void call_rcu(struct rcu_head *head, - void (*func)(struct rcu_head *head)); -void call_rcu_data_free(struct call_rcu_data *crdp); void free_all_cpu_call_rcu_data(void); + +void call_rcu_before_fork(void); +void call_rcu_after_fork_parent(void); void call_rcu_after_fork_child(void); #ifdef __cplusplus