Those aliases become unneeded with the upcoming soname bump.
Change-Id: Id6c368526d9cb04fc92c12b3f4632b4a9443f41d
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
.unregister_rculfhash_atfork = urcu_unregister_rculfhash_atfork,\
}
-#define DEFINE_RCU_FLAVOR_ALIAS(x, y) _DEFINE_RCU_FLAVOR_ALIAS(x, y)
-#ifdef __APPLE__
-#define _DEFINE_RCU_FLAVOR_ALIAS(x, y)
-#else
-#define _DEFINE_RCU_FLAVOR_ALIAS(x, y) \
-__attribute__((alias(#x))) \
-extern const struct rcu_flavor_struct y;
-#endif
-
extern const struct rcu_flavor_struct rcu_flavor;
#ifdef __cplusplus
#undef urcu_register_rculfhash_atfork
#undef urcu_unregister_rculfhash_atfork
-
-/* Aliases for ABI(6) compat */
-
-#undef alias_rcu_flavor
-
-/* src/urcu.c */
-#undef alias_rcu_read_lock
-#undef alias_rcu_read_unlock
-#undef alias_rcu_read_ongoing
-#undef alias_rcu_register_thread
-#undef alias_rcu_unregister_thread
-#undef alias_rcu_init
-#undef alias_rcu_exit
-#undef alias_synchronize_rcu
-#undef alias_rcu_reader
-#undef alias_rcu_gp
-
-/* src/urcu-call-rcu-impl.h */
-#undef alias_get_cpu_call_rcu_data
-#undef alias_get_call_rcu_thread
-#undef alias_create_call_rcu_data
-#undef alias_set_cpu_call_rcu_data
-#undef alias_get_default_call_rcu_data
-#undef alias_get_call_rcu_data
-#undef alias_get_thread_call_rcu_data
-#undef alias_set_thread_call_rcu_data
-#undef alias_create_all_cpu_call_rcu_data
-#undef alias_free_all_cpu_call_rcu_data
-#undef alias_call_rcu
-#undef alias_call_rcu_data_free
-#undef alias_call_rcu_before_fork
-#undef alias_call_rcu_after_fork_parent
-#undef alias_call_rcu_after_fork_child
-#undef alias_rcu_barrier
-
-#undef alias_urcu_register_rculfhash_atfork
-#undef alias_urcu_unregister_rculfhash_atfork
-
-/* src/urcu-defer-impl.h */
-#undef alias_defer_rcu
-#undef alias_rcu_defer_register_thread
-#undef alias_rcu_defer_unregister_thread
-#undef alias_rcu_defer_barrier
-#undef alias_rcu_defer_barrier_thread
-#undef alias_rcu_defer_exit
urcu_bp_unregister_rculfhash_atfork
-/* Aliases for ABI(6) compat */
-
-#define alias_rcu_flavor rcu_flavor_bp
-
-#define alias_get_cpu_call_rcu_data get_cpu_call_rcu_data_bp
-#define alias_get_call_rcu_thread get_call_rcu_thread_bp
-#define alias_create_call_rcu_data create_call_rcu_data_bp
-#define alias_set_cpu_call_rcu_data set_cpu_call_rcu_data_bp
-#define alias_get_default_call_rcu_data get_default_call_rcu_data_bp
-#define alias_get_call_rcu_data get_call_rcu_data_bp
-#define alias_get_thread_call_rcu_data get_thread_call_rcu_data_bp
-#define alias_set_thread_call_rcu_data set_thread_call_rcu_data_bp
-#define alias_create_all_cpu_call_rcu_data \
- create_all_cpu_call_rcu_data_bp
-#define alias_free_all_cpu_call_rcu_data \
- free_all_cpu_call_rcu_data_bp
-#define alias_call_rcu call_rcu_bp
-#define alias_call_rcu_data_free call_rcu_data_free_bp
-#define alias_call_rcu_before_fork call_rcu_before_fork_bp
-#define alias_call_rcu_after_fork_parent \
- call_rcu_after_fork_parent_bp
-#define alias_call_rcu_after_fork_child call_rcu_after_fork_child_bp
-#define alias_rcu_barrier rcu_barrier_bp
-
-#define alias_defer_rcu defer_rcu_bp
-#define alias_rcu_defer_register_thread rcu_defer_register_thread_bp
-#define alias_rcu_defer_unregister_thread \
- rcu_defer_unregister_thread_bp
-#define alias_rcu_defer_barrier rcu_defer_barrier_bp
-#define alias_rcu_defer_barrier_thread rcu_defer_barrier_thread_bp
-#define alias_rcu_defer_exit rcu_defer_exit_bp
-
-#define alias_urcu_register_rculfhash_atfork \
- urcu_register_rculfhash_atfork_bp
-#define alias_urcu_unregister_rculfhash_atfork \
- urcu_unregister_rculfhash_atfork_bp
-
-
/* Compat identifiers for prior undocumented multiflavor usage */
#ifndef URCU_NO_COMPAT_IDENTIFIERS
urcu_mb_unregister_rculfhash_atfork
-/* Aliases for ABI(6) compat */
-
-#define alias_rcu_flavor rcu_flavor_mb
-
-/* src/urcu.c */
-#define alias_rcu_read_lock rcu_read_lock_mb
-#define alias_rcu_read_unlock rcu_read_unlock_mb
-#define alias_rcu_read_ongoing rcu_read_ongoing_mb
-#define alias_rcu_register_thread rcu_register_thread_mb
-#define alias_rcu_unregister_thread rcu_unregister_thread_mb
-#define alias_rcu_init rcu_init_mb
-#define alias_synchronize_rcu synchronize_rcu_mb
-#define alias_rcu_reader rcu_reader_mb
-#define alias_rcu_gp rcu_gp_mb
-
-/* src/urcu-call-rcu-impl.h */
-#define alias_get_cpu_call_rcu_data get_cpu_call_rcu_data_mb
-#define alias_get_call_rcu_thread get_call_rcu_thread_mb
-#define alias_create_call_rcu_data create_call_rcu_data_mb
-#define alias_set_cpu_call_rcu_data set_cpu_call_rcu_data_mb
-#define alias_get_default_call_rcu_data get_default_call_rcu_data_mb
-#define alias_get_call_rcu_data get_call_rcu_data_mb
-#define alias_get_thread_call_rcu_data get_thread_call_rcu_data_mb
-#define alias_set_thread_call_rcu_data set_thread_call_rcu_data_mb
-#define alias_create_all_cpu_call_rcu_data \
- create_all_cpu_call_rcu_data_mb
-#define alias_free_all_cpu_call_rcu_data \
- free_all_cpu_call_rcu_data_mb
-#define alias_call_rcu call_rcu_mb
-#define alias_call_rcu_data_free call_rcu_data_free_mb
-#define alias_call_rcu_before_fork call_rcu_before_fork_mb
-#define alias_call_rcu_after_fork_parent \
- call_rcu_after_fork_parent_mb
-#define alias_call_rcu_after_fork_child call_rcu_after_fork_child_mb
-#define alias_rcu_barrier rcu_barrier_mb
-
-#define alias_urcu_register_rculfhash_atfork \
- urcu_register_rculfhash_atfork_mb
-#define alias_urcu_unregister_rculfhash_atfork \
- urcu_unregister_rculfhash_atfork_mb
-
-/* src/urcu-defer-impl.h */
-#define alias_defer_rcu defer_rcu_mb
-#define alias_rcu_defer_register_thread rcu_defer_register_thread_mb
-#define alias_rcu_defer_unregister_thread \
- rcu_defer_unregister_thread_mb
-#define alias_rcu_defer_barrier rcu_defer_barrier_mb
-#define alias_rcu_defer_barrier_thread rcu_defer_barrier_thread_mb
-#define alias_rcu_defer_exit rcu_defer_exit_mb
-
-
/* Compat identifiers for prior undocumented multiflavor usage */
#ifndef URCU_NO_COMPAT_IDENTIFIERS
urcu_memb_unregister_rculfhash_atfork
-/* Aliases for ABI(6) compat */
-
-#define alias_rcu_flavor rcu_flavor_memb
-
-/* src/urcu.c */
-#define alias_rcu_read_lock rcu_read_lock_memb
-#define alias_rcu_read_unlock rcu_read_unlock_memb
-#define alias_rcu_read_ongoing rcu_read_ongoing_memb
-#define alias_rcu_register_thread rcu_register_thread_memb
-#define alias_rcu_unregister_thread rcu_unregister_thread_memb
-#define alias_rcu_init rcu_init_memb
-#define alias_synchronize_rcu synchronize_rcu_memb
-#define alias_rcu_reader rcu_reader_memb
-#define alias_rcu_gp rcu_gp_memb
-
-/* src/urcu-call-rcu-impl.h */
-#define alias_get_cpu_call_rcu_data get_cpu_call_rcu_data_memb
-#define alias_get_call_rcu_thread get_call_rcu_thread_memb
-#define alias_create_call_rcu_data create_call_rcu_data_memb
-#define alias_set_cpu_call_rcu_data set_cpu_call_rcu_data_memb
-#define alias_get_default_call_rcu_data get_default_call_rcu_data_memb
-#define alias_get_call_rcu_data get_call_rcu_data_memb
-#define alias_get_thread_call_rcu_data get_thread_call_rcu_data_memb
-#define alias_set_thread_call_rcu_data set_thread_call_rcu_data_memb
-#define alias_create_all_cpu_call_rcu_data \
- create_all_cpu_call_rcu_data_memb
-#define alias_free_all_cpu_call_rcu_data \
- free_all_cpu_call_rcu_data_memb
-#define alias_call_rcu call_rcu_memb
-#define alias_call_rcu_data_free call_rcu_data_free_memb
-#define alias_call_rcu_before_fork call_rcu_before_fork_memb
-#define alias_call_rcu_after_fork_parent \
- call_rcu_after_fork_parent_memb
-#define alias_call_rcu_after_fork_child call_rcu_after_fork_child_memb
-#define alias_rcu_barrier rcu_barrier_memb
-
-#define alias_urcu_register_rculfhash_atfork \
- urcu_register_rculfhash_atfork_memb
-#define alias_urcu_unregister_rculfhash_atfork \
- urcu_unregister_rculfhash_atfork_memb
-
-/* src/urcu-defer-impl.h */
-#define alias_defer_rcu defer_rcu_memb
-#define alias_rcu_defer_register_thread rcu_defer_register_thread_memb
-#define alias_rcu_defer_unregister_thread \
- rcu_defer_unregister_thread_memb
-#define alias_rcu_defer_barrier rcu_defer_barrier_memb
-#define alias_rcu_defer_barrier_thread rcu_defer_barrier_thread_memb
-#define alias_rcu_defer_exit rcu_defer_exit_memb
-
-
/* Compat identifiers for prior undocumented multiflavor usage */
#ifndef URCU_NO_COMPAT_IDENTIFIERS
#define urcu_unregister_rculfhash_atfork \
urcu_qsbr_unregister_rculfhash_atfork
-/* Aliases for ABI(6) compat */
-
-#define alias_rcu_flavor rcu_flavor_qsbr
-
-/* src/urcu.c */
-#define alias_rcu_read_lock rcu_read_lock_qsbr
-#define alias_rcu_read_unlock rcu_read_unlock_qsbr
-#define alias_rcu_read_ongoing rcu_read_ongoing_qsbr
-#define alias_rcu_register_thread rcu_register_thread_qsbr
-#define alias_rcu_unregister_thread rcu_unregister_thread_qsbr
-#define alias_rcu_init rcu_init_qsbr
-#define alias_synchronize_rcu synchronize_rcu_qsbr
-#define alias_rcu_reader rcu_reader_qsbr
-#define alias_rcu_gp rcu_gp_qsbr
-
-/* src/urcu-call-rcu-impl.h */
-#define alias_get_cpu_call_rcu_data get_cpu_call_rcu_data_qsbr
-#define alias_get_call_rcu_thread get_call_rcu_thread_qsbr
-#define alias_create_call_rcu_data create_call_rcu_data_qsbr
-#define alias_set_cpu_call_rcu_data set_cpu_call_rcu_data_qsbr
-#define alias_get_default_call_rcu_data get_default_call_rcu_data_qsbr
-#define alias_get_call_rcu_data get_call_rcu_data_qsbr
-#define alias_get_thread_call_rcu_data get_thread_call_rcu_data_qsbr
-#define alias_set_thread_call_rcu_data set_thread_call_rcu_data_qsbr
-#define alias_create_all_cpu_call_rcu_data \
- create_all_cpu_call_rcu_data_qsbr
-#define alias_free_all_cpu_call_rcu_data \
- free_all_cpu_call_rcu_data_qsbr
-#define alias_call_rcu call_rcu_qsbr
-#define alias_call_rcu_data_free call_rcu_data_free_qsbr
-#define alias_call_rcu_before_fork call_rcu_before_fork_qsbr
-#define alias_call_rcu_after_fork_parent \
- call_rcu_after_fork_parent_qsbr
-#define alias_call_rcu_after_fork_child call_rcu_after_fork_child_qsbr
-#define alias_rcu_barrier rcu_barrier_qsbr
-
-#define alias_urcu_register_rculfhash_atfork \
- urcu_register_rculfhash_atfork_qsbr
-#define alias_urcu_unregister_rculfhash_atfork \
- urcu_unregister_rculfhash_atfork_qsbr
-
-/* src/urcu-defer-impl.h */
-#define alias_defer_rcu defer_rcu_qsbr
-#define alias_rcu_defer_register_thread rcu_defer_register_thread_qsbr
-#define alias_rcu_defer_unregister_thread \
- rcu_defer_unregister_thread_qsbr
-#define alias_rcu_defer_barrier rcu_defer_barrier_qsbr
-#define alias_rcu_defer_barrier_thread rcu_defer_barrier_thread_qsbr
-#define alias_rcu_defer_exit rcu_defer_exit_qsbr
-
-
/* Compat identifiers for prior undocumented multiflavor usage */
#ifndef URCU_NO_COMPAT_IDENTIFIERS
urcu_signal_unregister_rculfhash_atfork
-/* Aliases for ABI(6) compat */
-
-#define alias_rcu_flavor rcu_flavor_sig
-
-/* src/urcu.c */
-#define alias_rcu_read_lock rcu_read_lock_sig
-#define alias_rcu_read_unlock rcu_read_unlock_sig
-#define alias_rcu_read_ongoing rcu_read_ongoing_sig
-#define alias_rcu_register_thread rcu_register_thread_sig
-#define alias_rcu_unregister_thread rcu_unregister_thread_sig
-#define alias_rcu_init rcu_init_sig
-#define alias_rcu_exit rcu_exit_sig
-#define alias_synchronize_rcu synchronize_rcu_sig
-#define alias_rcu_reader rcu_reader_sig
-#define alias_rcu_gp rcu_gp_sig
-
-/* src/urcu-call-rcu-impl.h */
-#define alias_get_cpu_call_rcu_data get_cpu_call_rcu_data_sig
-#define alias_get_call_rcu_thread get_call_rcu_thread_sig
-#define alias_create_call_rcu_data create_call_rcu_data_sig
-#define alias_set_cpu_call_rcu_data set_cpu_call_rcu_data_sig
-#define alias_get_default_call_rcu_data get_default_call_rcu_data_sig
-#define alias_get_call_rcu_data get_call_rcu_data_sig
-#define alias_get_thread_call_rcu_data get_thread_call_rcu_data_sig
-#define alias_set_thread_call_rcu_data set_thread_call_rcu_data_sig
-#define alias_create_all_cpu_call_rcu_data \
- create_all_cpu_call_rcu_data_sig
-#define alias_free_all_cpu_call_rcu_data \
- free_all_cpu_call_rcu_data_sig
-#define alias_call_rcu call_rcu_sig
-#define alias_call_rcu_data_free call_rcu_data_free_sig
-#define alias_call_rcu_before_fork call_rcu_before_fork_sig
-#define alias_call_rcu_after_fork_parent \
- call_rcu_after_fork_parent_sig
-#define alias_call_rcu_after_fork_child call_rcu_after_fork_child_sig
-#define alias_rcu_barrier rcu_barrier_sig
-
-#define alias_urcu_register_rculfhash_atfork \
- urcu_register_rculfhash_atfork_sig
-#define alias_urcu_unregister_rculfhash_atfork \
- urcu_unregister_rculfhash_atfork_sig
-
-/* src/urcu-defer-impl.h */
-#define alias_defer_rcu defer_rcu_sig
-#define alias_rcu_defer_register_thread rcu_defer_register_thread_sig
-#define alias_rcu_defer_unregister_thread \
- rcu_defer_unregister_thread_sig
-#define alias_rcu_defer_barrier rcu_defer_barrier_sig
-#define alias_rcu_defer_barrier_thread rcu_defer_barrier_thread_sig
-#define alias_rcu_defer_exit rcu_defer_exit_sig
-
-
/* Compat identifiers for prior undocumented multiflavor usage */
#ifndef URCU_NO_COMPAT_IDENTIFIERS
static pthread_key_t urcu_bp_key;
struct urcu_bp_gp urcu_bp_gp = { .ctr = URCU_BP_GP_COUNT };
-URCU_ATTR_ALIAS("urcu_bp_gp") extern struct urcu_bp_gp rcu_gp_bp;
/*
* Pointer to registry elements. Written to only by each individual reader. Read
* by both the reader and the writers.
*/
DEFINE_URCU_TLS(struct urcu_bp_reader *, urcu_bp_reader);
-DEFINE_URCU_TLS_ALIAS(struct urcu_bp_reader *, urcu_bp_reader, rcu_reader_bp);
static CDS_LIST_HEAD(registry);
ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
assert(!ret);
}
-URCU_ATTR_ALIAS("urcu_bp_synchronize_rcu") void synchronize_rcu_bp();
/*
* library wrappers to be used by non-LGPL compatible source code.
{
_urcu_bp_read_lock();
}
-URCU_ATTR_ALIAS("urcu_bp_read_lock") void rcu_read_lock_bp();
void urcu_bp_read_unlock(void)
{
_urcu_bp_read_unlock();
}
-URCU_ATTR_ALIAS("urcu_bp_read_unlock") void rcu_read_unlock_bp();
int urcu_bp_read_ongoing(void)
{
return _urcu_bp_read_ongoing();
}
-URCU_ATTR_ALIAS("urcu_bp_read_ongoing") int rcu_read_ongoing_bp();
/*
* Only grow for now. If empty, allocate a ARENA_INIT_ALLOC sized chunk.
if (ret)
abort();
}
-URCU_ATTR_ALIAS("urcu_bp_register") void rcu_bp_register();
void urcu_bp_register_thread(void)
{
mutex_lock(&rcu_registry_lock);
saved_fork_signal_mask = oldmask;
}
-URCU_ATTR_ALIAS("urcu_bp_before_fork") void rcu_bp_before_fork();
void urcu_bp_after_fork_parent(void)
{
ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
assert(!ret);
}
-URCU_ATTR_ALIAS("urcu_bp_after_fork_parent")
-void rcu_bp_after_fork_parent(void);
/*
* Prune all entries from registry except our own thread. Fits the Linux
ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
assert(!ret);
}
-URCU_ATTR_ALIAS("urcu_bp_after_fork_child")
-void rcu_bp_after_fork_child(void);
void *urcu_bp_dereference_sym(void *p)
{
return _rcu_dereference(p);
}
-URCU_ATTR_ALIAS("urcu_bp_dereference_sym")
-void *rcu_dereference_sym_bp();
void *urcu_bp_set_pointer_sym(void **p, void *v)
{
uatomic_set(p, v);
return v;
}
-URCU_ATTR_ALIAS("urcu_bp_set_pointer_sym")
-void *rcu_set_pointer_sym_bp();
void *urcu_bp_xchg_pointer_sym(void **p, void *v)
{
cmm_wmb();
return uatomic_xchg(p, v);
}
-URCU_ATTR_ALIAS("urcu_bp_xchg_pointer_sym")
-void *rcu_xchg_pointer_sym_bp();
void *urcu_bp_cmpxchg_pointer_sym(void **p, void *old, void *_new)
{
cmm_wmb();
return uatomic_cmpxchg(p, old, _new);
}
-URCU_ATTR_ALIAS("urcu_bp_cmpxchg_pointer_sym")
-void *rcu_cmpxchg_pointer_sym_bp();
DEFINE_RCU_FLAVOR(rcu_flavor);
-DEFINE_RCU_FLAVOR_ALIAS(rcu_flavor, alias_rcu_flavor);
#include "urcu-call-rcu-impl.h"
#include "urcu-defer-impl.h"
return NULL;
return rcu_dereference(pcpu_crdp[cpu]);
}
-URCU_ATTR_ALIAS(urcu_stringify(get_cpu_call_rcu_data))
-struct call_rcu_data *alias_get_cpu_call_rcu_data();
/*
* Return the tid corresponding to the call_rcu thread whose
{
return crdp->tid;
}
-URCU_ATTR_ALIAS(urcu_stringify(get_call_rcu_thread))
-pthread_t alias_get_call_rcu_thread();
/*
* Create a call_rcu_data structure (with thread) and return a pointer.
return crdp;
}
-URCU_ATTR_ALIAS(urcu_stringify(create_call_rcu_data))
-struct call_rcu_data *alias_create_call_rcu_data();
struct call_rcu_data *create_call_rcu_data(unsigned long flags,
int cpu_affinity)
{
call_rcu_unlock(&call_rcu_mutex);
return 0;
}
-URCU_ATTR_ALIAS(urcu_stringify(set_cpu_call_rcu_data))
-int alias_set_cpu_call_rcu_data();
/*
* Return a pointer to the default call_rcu_data structure, creating
call_rcu_unlock(&call_rcu_mutex);
return default_call_rcu_data;
}
-URCU_ATTR_ALIAS(urcu_stringify(get_default_call_rcu_data))
-struct call_rcu_data *alias_get_default_call_rcu_data();
/*
* Return the call_rcu_data structure that applies to the currently
return get_default_call_rcu_data();
}
-URCU_ATTR_ALIAS(urcu_stringify(get_call_rcu_data))
-struct call_rcu_data *alias_get_call_rcu_data();
/*
* Return a pointer to this task's call_rcu_data if there is one.
{
return URCU_TLS(thread_call_rcu_data);
}
-URCU_ATTR_ALIAS(urcu_stringify(get_thread_call_rcu_data))
-struct call_rcu_data *alias_get_thread_call_rcu_data();
/*
* Set this task's call_rcu_data structure as specified, regardless
{
URCU_TLS(thread_call_rcu_data) = crdp;
}
-URCU_ATTR_ALIAS(urcu_stringify(set_thread_call_rcu_data))
-void alias_set_thread_call_rcu_data();
/*
* Create a separate call_rcu thread for each CPU. This does not
}
return 0;
}
-URCU_ATTR_ALIAS(urcu_stringify(create_all_cpu_call_rcu_data))
-int alias_create_all_cpu_call_rcu_data();
/*
* Wake up the call_rcu thread corresponding to the specified
_call_rcu(head, func, crdp);
_rcu_read_unlock();
}
-URCU_ATTR_ALIAS(urcu_stringify(call_rcu)) void alias_call_rcu();
/*
* Free up the specified call_rcu_data structure, terminating the
free(crdp);
}
-URCU_ATTR_ALIAS(urcu_stringify(call_rcu_data_free))
-void alias_call_rcu_data_free();
/*
* Clean up all the per-CPU call_rcu threads.
}
free(crdp);
}
-#ifdef RCU_QSBR
-/* ABI6 has a non-namespaced free_all_cpu_call_rcu_data for qsbr */
-#undef free_all_cpu_call_rcu_data
-URCU_ATTR_ALIAS("urcu_qsbr_free_all_cpu_call_rcu_data")
-void free_all_cpu_call_rcu_data();
-#define free_all_cpu_call_rcu_data urcu_qsbr_free_all_cpu_call_rcu_data
-#else
-URCU_ATTR_ALIAS(urcu_stringify(free_all_cpu_call_rcu_data))
-void alias_free_all_cpu_call_rcu_data();
-#endif
static
void free_completion(struct urcu_ref *ref)
if (was_online)
rcu_thread_online();
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_barrier))
-void alias_rcu_barrier();
/*
* Acquire the call_rcu_mutex in order to ensure that the child sees
(void) poll(NULL, 0, 1);
}
}
-URCU_ATTR_ALIAS(urcu_stringify(call_rcu_before_fork))
-void alias_call_rcu_before_fork();
/*
* Clean up call_rcu data structures in the parent of a successful fork()
atfork->after_fork_parent(atfork->priv);
call_rcu_unlock(&call_rcu_mutex);
}
-URCU_ATTR_ALIAS(urcu_stringify(call_rcu_after_fork_parent))
-void alias_call_rcu_after_fork_parent();
/*
* Clean up call_rcu data structures in the child of a successful fork()
call_rcu_data_free(crdp);
}
}
-URCU_ATTR_ALIAS(urcu_stringify(call_rcu_after_fork_child))
-void alias_call_rcu_after_fork_child();
void urcu_register_rculfhash_atfork(struct urcu_atfork *atfork)
{
end:
call_rcu_unlock(&call_rcu_mutex);
}
-URCU_ATTR_ALIAS(urcu_stringify(urcu_register_rculfhash_atfork))
-void alias_urcu_register_rculfhash_atfork();
void urcu_unregister_rculfhash_atfork(struct urcu_atfork *atfork __attribute__((unused)))
{
end:
call_rcu_unlock(&call_rcu_mutex);
}
-URCU_ATTR_ALIAS(urcu_stringify(urcu_unregister_rculfhash_atfork))
-void alias_urcu_unregister_rculfhash_atfork();
_rcu_defer_barrier_thread();
mutex_unlock(&rcu_defer_mutex);
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_barrier_thread))
-void alias_rcu_defer_barrier_thread();
/*
* rcu_defer_barrier - Execute all queued rcu callbacks.
end:
mutex_unlock(&rcu_defer_mutex);
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_barrier))
-void alias_rcu_defer_barrier();
/*
* _defer_rcu - Queue a RCU callback.
{
_defer_rcu(fct, p);
}
-URCU_ATTR_ALIAS(urcu_stringify(defer_rcu)) void alias_defer_rcu();
static void start_defer_thread(void)
{
mutex_unlock(&defer_thread_mutex);
return 0;
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_register_thread))
-int alias_rcu_defer_register_thread();
void rcu_defer_unregister_thread(void)
{
stop_defer_thread();
mutex_unlock(&defer_thread_mutex);
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_unregister_thread))
-void alias_rcu_defer_unregister_thread();
void rcu_defer_exit(void)
{
assert(cds_list_empty(®istry_defer));
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_exit))
-void alias_rcu_defer_exit();
#endif /* _URCU_DEFER_IMPL_H */
*/
static pthread_mutex_t rcu_registry_lock = PTHREAD_MUTEX_INITIALIZER;
struct urcu_gp urcu_qsbr_gp = { .ctr = URCU_QSBR_GP_ONLINE };
-URCU_ATTR_ALIAS("urcu_qsbr_gp") extern struct urcu_gp rcu_gp_qsbr;
/*
* Active attempts to check for reader Q.S. before calling futex().
* writers.
*/
DEFINE_URCU_TLS(struct urcu_qsbr_reader, urcu_qsbr_reader);
-DEFINE_URCU_TLS_ALIAS(struct urcu_qsbr_reader, urcu_qsbr_reader, rcu_reader_qsbr);
static CDS_LIST_HEAD(registry);
cmm_smp_mb();
}
#endif /* !(CAA_BITS_PER_LONG < 64) */
-URCU_ATTR_ALIAS("urcu_qsbr_synchronize_rcu")
-void synchronize_rcu_qsbr();
/*
* library wrappers to be used by non-LGPL compatible source code.
{
_urcu_qsbr_read_lock();
}
-URCU_ATTR_ALIAS("urcu_qsbr_read_lock") void rcu_read_lock_qsbr();
void urcu_qsbr_read_unlock(void)
{
_urcu_qsbr_read_unlock();
}
-URCU_ATTR_ALIAS("urcu_qsbr_read_unlock") void rcu_read_unlock_qsbr();
int urcu_qsbr_read_ongoing(void)
{
return _urcu_qsbr_read_ongoing();
}
-URCU_ATTR_ALIAS("urcu_qsbr_read_ongoing")
void rcu_read_ongoing_qsbr();
void urcu_qsbr_quiescent_state(void)
{
_urcu_qsbr_quiescent_state();
}
-URCU_ATTR_ALIAS("urcu_qsbr_quiescent_state")
void rcu_quiescent_state_qsbr();
void urcu_qsbr_thread_offline(void)
{
_urcu_qsbr_thread_offline();
}
-URCU_ATTR_ALIAS("urcu_qsbr_thread_offline")
void rcu_thread_offline_qsbr();
void urcu_qsbr_thread_online(void)
{
_urcu_qsbr_thread_online();
}
-URCU_ATTR_ALIAS("urcu_qsbr_thread_online")
-void rcu_thread_online_qsbr();
void urcu_qsbr_register_thread(void)
{
mutex_unlock(&rcu_registry_lock);
_urcu_qsbr_thread_online();
}
-URCU_ATTR_ALIAS("urcu_qsbr_register_thread")
-void rcu_register_thread_qsbr();
void urcu_qsbr_unregister_thread(void)
{
cds_list_del(&URCU_TLS(urcu_qsbr_reader).node);
mutex_unlock(&rcu_registry_lock);
}
-URCU_ATTR_ALIAS("urcu_qsbr_unregister_thread")
-void rcu_unregister_thread_qsbr();
void urcu_qsbr_exit(void)
{
* assert(cds_list_empty(®istry));
*/
}
-URCU_ATTR_ALIAS("urcu_qsbr_exit") void rcu_exit_qsbr();
DEFINE_RCU_FLAVOR(rcu_flavor);
-DEFINE_RCU_FLAVOR_ALIAS(rcu_flavor, alias_rcu_flavor);
#include "urcu-call-rcu-impl.h"
#include "urcu-defer-impl.h"
__min1 <= __min2 ? __min1: __min2; \
})
-/* There is no concept of symbol aliases on MacOS */
-#ifdef __APPLE__
-#define URCU_ATTR_ALIAS(x)
-#else
-#define URCU_ATTR_ALIAS(x) __attribute__((alias(x)))
-#endif
-
-#ifdef CONFIG_RCU_TLS
-#define DEFINE_URCU_TLS_ALIAS_1(type, name, alias) \
- URCU_ATTR_ALIAS(#name) \
- extern type alias
-
-#else
-#define DEFINE_URCU_TLS_ALIAS_1(type, name, alias) \
- URCU_ATTR_ALIAS("*__tls_access_" #name) \
- type *__tls_access_ ## alias()
-#endif
-
-#define DEFINE_URCU_TLS_ALIAS(type, name, alias) \
- DEFINE_URCU_TLS_ALIAS_1(type, name, alias)
-
#endif /* _URCU_UTILS_H */
* uninitialized variable.
*/
int urcu_memb_has_sys_membarrier = 0;
-URCU_ATTR_ALIAS("urcu_memb_has_sys_membarrier")
-extern int rcu_has_sys_membarrier_memb;
#endif
void __attribute__((constructor)) rcu_init(void);
void rcu_init(void)
{
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_init))
-void alias_rcu_init(void);
#endif
#ifdef RCU_SIGNAL
*/
static pthread_mutex_t rcu_registry_lock = PTHREAD_MUTEX_INITIALIZER;
struct urcu_gp rcu_gp = { .ctr = URCU_GP_COUNT };
-URCU_ATTR_ALIAS(urcu_stringify(rcu_gp))
-extern struct urcu_gp alias_rcu_gp;
/*
* Written to only by each individual reader. Read by both the reader and the
* writers.
*/
DEFINE_URCU_TLS(struct urcu_reader, rcu_reader);
-DEFINE_URCU_TLS_ALIAS(struct urcu_reader, rcu_reader, alias_rcu_reader);
static CDS_LIST_HEAD(registry);
*/
urcu_wake_all_waiters(&waiters);
}
-URCU_ATTR_ALIAS(urcu_stringify(synchronize_rcu))
-void alias_synchronize_rcu();
/*
* library wrappers to be used by non-LGPL compatible source code.
{
_rcu_read_lock();
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_read_lock))
-void alias_rcu_read_lock();
void rcu_read_unlock(void)
{
_rcu_read_unlock();
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_read_unlock))
-void alias_rcu_read_unlock();
int rcu_read_ongoing(void)
{
return _rcu_read_ongoing();
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_read_ongoing))
-void alias_rcu_read_ongoing();
void rcu_register_thread(void)
{
cds_list_add(&URCU_TLS(rcu_reader).node, ®istry);
mutex_unlock(&rcu_registry_lock);
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_register_thread))
-void alias_rcu_register_thread();
void rcu_unregister_thread(void)
{
cds_list_del(&URCU_TLS(rcu_reader).node);
mutex_unlock(&rcu_registry_lock);
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_unregister_thread))
-void alias_rcu_unregister_thread();
#ifdef RCU_MEMBARRIER
init_done = 1;
rcu_sys_membarrier_init();
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_init))
-void alias_rcu_init(void);
#endif
#ifdef RCU_SIGNAL
if (ret)
urcu_die(errno);
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_init))
-void alias_rcu_init(void);
void rcu_exit(void)
{
* assert(cds_list_empty(®istry));
*/
}
-URCU_ATTR_ALIAS(urcu_stringify(rcu_exit))
-void alias_rcu_exit(void);
#endif /* #ifdef RCU_SIGNAL */
DEFINE_RCU_FLAVOR(rcu_flavor);
-DEFINE_RCU_FLAVOR_ALIAS(rcu_flavor, alias_rcu_flavor);
#include "urcu-call-rcu-impl.h"
#include "urcu-defer-impl.h"