From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Ellerman Subject: Re: [PATCH v2] arch: use WRITE_ONCE/READ_ONCE in smp_store_release/smp_load_acquire Date: Mon, 03 Aug 2015 11:41:58 +1000 Message-ID: <1438566118.8863.3.camel@ellerman.id.au> References: <1438528264-714-1-git-send-email-andreyknvl@google.com> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1438528264-714-1-git-send-email-andreyknvl@google.com> Sender: linux-ia64-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii" To: Andrey Konovalov Cc: Russell King , Catalin Marinas , Will Deacon , Tony Luck , Fenghua Yu , James Hogan , Ralf Baechle , Benjamin Herrenschmidt , Paul Mackerras , Martin Schwidefsky , Heiko Carstens , linux390@de.ibm.com, "David S. Miller" , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Arnd Bergmann , Peter Zijlstra , Alexander Duyck , Andre Przywara , "Paul E. McKenney" , Borislav Petkov , linux-arm-kernel@list On Sun, 2015-08-02 at 17:11 +0200, Andrey Konovalov wrote: > Replace ACCESS_ONCE() macro in smp_store_release() and smp_load_acquire() > with WRITE_ONCE() and READ_ONCE() on x86, arm, arm64, ia64, metag, mips, > powerpc, s390, sparc and asm-generic since ACCESS_ONCE does not work > reliably on non-scalar types. .. and there are no restrictions on the argument to smp_load_acquire(), so it may be a non-scalar type. Though from a quick grep it looks like no one is doing that at the moment? > WRITE_ONCE() and READ_ONCE() were introduced in the commits 230fa253df63 > ("kernel: Provide READ_ONCE and ASSIGN_ONCE") and 43239cbe79fc ("kernel: > Change ASSIGN_ONCE(val, x) to WRITE_ONCE(x, val)"). > > Signed-off-by: Andrey Konovalov > --- > Changed in v2: > - Other archs besides x86. > > arch/powerpc/include/asm/barrier.h | 4 ++-- > diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h > index 51ccc72..0eca6ef 100644 > --- a/arch/powerpc/include/asm/barrier.h > +++ b/arch/powerpc/include/asm/barrier.h > @@ -76,12 +76,12 @@ > do { \ > compiletime_assert_atomic_type(*p); \ > smp_lwsync(); \ > - ACCESS_ONCE(*p) = (v); \ > + WRITE_ONCE(*p, v); \ > } while (0) > > #define smp_load_acquire(p) \ > ({ \ > - typeof(*p) ___p1 = ACCESS_ONCE(*p); \ > + typeof(*p) ___p1 = READ_ONCE(*p); \ > compiletime_assert_atomic_type(*p); \ > smp_lwsync(); \ > ___p1; \ Acked-by: Michael Ellerman (powerpc) cheers