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