On Wed, Sep 28, 2011 at 04:34:33PM +0800, Lai Jiangshan wrote:
> Signed-off-by: Lai Jiangshan <[email protected]>

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
> 


_______________________________________________
ltt-dev mailing list
[email protected]
http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev

Reply via email to