return NULL;
return rcu_dereference(pcpu_crdp[cpu]);
}
-__attribute__((alias(urcu_stringify(get_cpu_call_rcu_data))))
+URCU_ATTR_ALIAS(urcu_stringify(get_cpu_call_rcu_data))
struct call_rcu_data *alias_get_cpu_call_rcu_data();
/*
{
return crdp->tid;
}
-__attribute__((alias(urcu_stringify(get_call_rcu_thread))))
+URCU_ATTR_ALIAS(urcu_stringify(get_call_rcu_thread))
pthread_t alias_get_call_rcu_thread();
/*
return crdp;
}
-__attribute__((alias(urcu_stringify(create_call_rcu_data))))
+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;
}
-__attribute__((alias(urcu_stringify(set_cpu_call_rcu_data))))
+URCU_ATTR_ALIAS(urcu_stringify(set_cpu_call_rcu_data))
int alias_set_cpu_call_rcu_data();
/*
call_rcu_unlock(&call_rcu_mutex);
return default_call_rcu_data;
}
-__attribute__((alias(urcu_stringify(get_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 get_default_call_rcu_data();
}
-__attribute__((alias(urcu_stringify(get_call_rcu_data))))
+URCU_ATTR_ALIAS(urcu_stringify(get_call_rcu_data))
struct call_rcu_data *alias_get_call_rcu_data();
/*
{
return URCU_TLS(thread_call_rcu_data);
}
-__attribute__((alias(urcu_stringify(get_thread_call_rcu_data))))
+URCU_ATTR_ALIAS(urcu_stringify(get_thread_call_rcu_data))
struct call_rcu_data *alias_get_thread_call_rcu_data();
/*
{
URCU_TLS(thread_call_rcu_data) = crdp;
}
-__attribute__((alias(urcu_stringify(set_thread_call_rcu_data))))
+URCU_ATTR_ALIAS(urcu_stringify(set_thread_call_rcu_data))
void alias_set_thread_call_rcu_data();
/*
}
return 0;
}
-__attribute__((alias(urcu_stringify(create_all_cpu_call_rcu_data))))
+URCU_ATTR_ALIAS(urcu_stringify(create_all_cpu_call_rcu_data))
int alias_create_all_cpu_call_rcu_data();
/*
_call_rcu(head, func, crdp);
_rcu_read_unlock();
}
-__attribute__((alias(urcu_stringify(call_rcu)))) void alias_call_rcu();
+URCU_ATTR_ALIAS(urcu_stringify(call_rcu)) void alias_call_rcu();
/*
* Free up the specified call_rcu_data structure, terminating the
while ((uatomic_read(&crdp->flags) & URCU_CALL_RCU_STOPPED) == 0)
(void) poll(NULL, 0, 1);
}
+ call_rcu_lock(&call_rcu_mutex);
if (!cds_wfcq_empty(&crdp->cbs_head, &crdp->cbs_tail)) {
- /* Create default call rcu data if need be */
+ call_rcu_unlock(&call_rcu_mutex);
+ /* Create default call rcu data if need be. */
+ /* CBs queued here will be handed to the default list. */
(void) get_default_call_rcu_data();
+ call_rcu_lock(&call_rcu_mutex);
__cds_wfcq_splice_blocking(&default_call_rcu_data->cbs_head,
&default_call_rcu_data->cbs_tail,
&crdp->cbs_head, &crdp->cbs_tail);
wake_call_rcu_thread(default_call_rcu_data);
}
- call_rcu_lock(&call_rcu_mutex);
cds_list_del(&crdp->list);
call_rcu_unlock(&call_rcu_mutex);
free(crdp);
}
-__attribute__((alias(urcu_stringify(call_rcu_data_free))))
+URCU_ATTR_ALIAS(urcu_stringify(call_rcu_data_free))
void alias_call_rcu_data_free();
/*
#ifdef RCU_QSBR
/* ABI6 has a non-namespaced free_all_cpu_call_rcu_data for qsbr */
#undef free_all_cpu_call_rcu_data
-__attribute__((alias("urcu_qsbr_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
-__attribute__((alias(urcu_stringify(free_all_cpu_call_rcu_data))))
+URCU_ATTR_ALIAS(urcu_stringify(free_all_cpu_call_rcu_data))
void alias_free_all_cpu_call_rcu_data();
#endif
if (was_online)
rcu_thread_online();
}
-__attribute__((alias(urcu_stringify(rcu_barrier))))
+URCU_ATTR_ALIAS(urcu_stringify(rcu_barrier))
void alias_rcu_barrier();
/*
(void) poll(NULL, 0, 1);
}
}
-__attribute__((alias(urcu_stringify(call_rcu_before_fork))))
+URCU_ATTR_ALIAS(urcu_stringify(call_rcu_before_fork))
void alias_call_rcu_before_fork();
/*
atfork->after_fork_parent(atfork->priv);
call_rcu_unlock(&call_rcu_mutex);
}
-__attribute__((alias(urcu_stringify(call_rcu_after_fork_parent))))
+URCU_ATTR_ALIAS(urcu_stringify(call_rcu_after_fork_parent))
void alias_call_rcu_after_fork_parent();
/*
call_rcu_data_free(crdp);
}
}
-__attribute__((alias(urcu_stringify(call_rcu_after_fork_child))))
+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);
}
-__attribute__((alias(urcu_stringify(urcu_register_rculfhash_atfork))))
+URCU_ATTR_ALIAS(urcu_stringify(urcu_register_rculfhash_atfork))
void alias_urcu_register_rculfhash_atfork();
void urcu_unregister_rculfhash_atfork(struct urcu_atfork *atfork)
end:
call_rcu_unlock(&call_rcu_mutex);
}
-__attribute__((alias(urcu_stringify(urcu_unregister_rculfhash_atfork))))
+URCU_ATTR_ALIAS(urcu_stringify(urcu_unregister_rculfhash_atfork))
void alias_urcu_unregister_rculfhash_atfork();