On Tue, Feb 04, 2014 at 12:29:12PM +0000, Will Deacon wrote:
> @@ -112,17 +114,20 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int 
> old, int new)
>       unsigned long tmp;
>       int oldval;
>  
> +     smp_mb();
> +
>       asm volatile("// atomic_cmpxchg\n"
> -"1:  ldaxr   %w1, %2\n"
> +"1:  ldxr    %w1, %2\n"
>  "    cmp     %w1, %w3\n"
>  "    b.ne    2f\n"
> -"    stlxr   %w0, %w4, %2\n"
> +"    stxr    %w0, %w4, %2\n"
>  "    cbnz    %w0, 1b\n"
>  "2:"
>       : "=&r" (tmp), "=&r" (oldval), "+Q" (ptr->counter)
>       : "Ir" (old), "r" (new)
>       : "cc", "memory");
>  
> +     smp_mb();
>       return oldval;
>  }
>  

Any particular reason atomic_cmpxchg() doesn't use the proposed rel + mb
scheme? It would be a waste to have atomic_cmpxchg() be more expensive
than it needs to be.
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to