[ltt-dev] [PATCH 7/7] urcu, call_rcu: Array initialized before pointer is planted
Paul E. McKenney
paulmck at linux.vnet.ibm.com
Thu Sep 29 13:33:48 EDT 2011
On Wed, Sep 28, 2011 at 04:34:33PM +0800, Lai Jiangshan wrote:
> Signed-off-by: Lai Jiangshan <laijs at cn.fujitsu.com>
This one I don't understand. It looks to me that all dereferences
of the per_cpu_call_rcu_data pointer are done while holding the
call_rcu_mutex, so there should be no need for the memory barrier.
Yes, there is an access to the pointer without lock protection
in create_all_cpu_call_rcu_data(), but that access does not
do a dereference, so still no need for the memory barrier.
So, what am I missing?
Thanx, Paul
> ---
> urcu-call-rcu-impl.h | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/urcu-call-rcu-impl.h b/urcu-call-rcu-impl.h
> index 3c68ae7..462139a 100644
> --- a/urcu-call-rcu-impl.h
> +++ b/urcu-call-rcu-impl.h
> @@ -104,6 +104,10 @@ static void alloc_cpu_call_rcu_data(void)
> p = malloc(maxcpus * sizeof(*per_cpu_call_rcu_data));
> if (p != NULL) {
> memset(p, '\0', maxcpus * sizeof(*per_cpu_call_rcu_data));
> +
> + /* Array initialized before pointer is planted. */
> + cmm_smp_mb();
> +
> per_cpu_call_rcu_data = p;
> } else {
> if (!warned) {
> --
> 1.7.4.4
>
More information about the lttng-dev
mailing list