From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754520Ab3KGLR4 (ORCPT ); Thu, 7 Nov 2013 06:17:56 -0500 Received: from cam-admin0.cambridge.arm.com ([217.140.96.50]:34827 "EHLO cam-admin0.cambridge.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751783Ab3KGLRx (ORCPT ); Thu, 7 Nov 2013 06:17:53 -0500 Date: Thu, 7 Nov 2013 11:17:41 +0000 From: Will Deacon To: Peter Zijlstra Cc: Geert Uytterhoeven , "Paul E. McKenney" , Linus Torvalds , Victor Kaplansky , Oleg Nesterov , Anton Blanchard , Benjamin Herrenschmidt , Frederic Weisbecker , LKML , Linux PPC dev , Mathieu Desnoyers , Michael Ellerman , Michael Neuling , Russell King , Martin Schwidefsky , Heiko Carstens , Tony Luck Subject: Re: [RFC] arch: Introduce new TSO memory barrier smp_tmb() Message-ID: <20131107111741.GD13139@mudshark.cambridge.arm.com> References: <20131103224242.GF3947@linux.vnet.ibm.com> <20131104105059.GL3947@linux.vnet.ibm.com> <20131104112254.GK28601@twins.programming.kicks-ass.net> <20131104162732.GN3947@linux.vnet.ibm.com> <20131104191127.GW16117@laptop.programming.kicks-ass.net> <20131104205344.GW3947@linux.vnet.ibm.com> <20131106123946.GJ10651@twins.programming.kicks-ass.net> <20131106135736.GK10651@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20131106135736.GK10651@twins.programming.kicks-ass.net> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Peter, Couple of minor fixes on the arm64 side... On Wed, Nov 06, 2013 at 01:57:36PM +0000, Peter Zijlstra wrote: > --- a/arch/arm64/include/asm/barrier.h > +++ b/arch/arm64/include/asm/barrier.h > @@ -35,11 +35,59 @@ > #define smp_mb() barrier() > #define smp_rmb() barrier() > #define smp_wmb() barrier() > + > +#define smp_store_release(p, v) \ > +do { \ > + compiletime_assert_atomic_type(*p); \ > + smp_mb(); \ > + ACCESS_ONCE(*p) = (v); \ > +} while (0) > + > +#define smp_load_acquire(p) \ > +({ \ > + typeof(*p) ___p1 = ACCESS_ONCE(*p); \ > + compiletime_assert_atomic_type(*p); \ > + smp_mb(); \ > + ___p1; \ > +}) > + > #else > + > #define smp_mb() asm volatile("dmb ish" : : : "memory") > #define smp_rmb() asm volatile("dmb ishld" : : : "memory") > #define smp_wmb() asm volatile("dmb ishst" : : : "memory") > -#endif Why are you getting rid of this #endif? > +#define smp_store_release(p, v) \ > +do { \ > + compiletime_assert_atomic_type(*p); \ > + switch (sizeof(*p)) { \ > + case 4: \ > + asm volatile ("stlr %w1, [%0]" \ > + : "=Q" (*p) : "r" (v) : "memory"); \ > + break; \ > + case 8: \ > + asm volatile ("stlr %1, [%0]" \ > + : "=Q" (*p) : "r" (v) : "memory"); \ > + break; \ > + } \ > +} while (0) > + > +#define smp_load_acquire(p) \ > +({ \ > + typeof(*p) ___p1; \ > + compiletime_assert_atomic_type(*p); \ > + switch (sizeof(*p)) { \ > + case 4: \ > + asm volatile ("ldar %w0, [%1]" \ > + : "=r" (___p1) : "Q" (*p) : "memory"); \ > + break; \ > + case 8: \ > + asm volatile ("ldar %0, [%1]" \ > + : "=r" (___p1) : "Q" (*p) : "memory"); \ > + break; \ > + } \ > + ___p1; \ > +}) You don't need the square brackets when using the "Q" constraint (otherwise it will expand to something like [[x0]], which gas won't accept). With those changes, for the general idea and arm/arm64 parts: Acked-by: Will Deacon Will