From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757160AbcH2Kwk (ORCPT ); Mon, 29 Aug 2016 06:52:40 -0400 Received: from merlin.infradead.org ([205.233.59.134]:39634 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756515AbcH2Kwj (ORCPT ); Mon, 29 Aug 2016 06:52:39 -0400 Date: Mon, 29 Aug 2016 12:52:32 +0200 From: Peter Zijlstra To: Manfred Spraul Cc: benh@kernel.crashing.org, paulmck@linux.vnet.ibm.com, Ingo Molnar , Boqun Feng , Andrew Morton , LKML , 1vier1@web.de, Davidlohr Bueso Subject: Re: [PATCH 4/4] qspinlock for x86: smp_mb__after_spin_lock() is free Message-ID: <20160829105232.GK10153@twins.programming.kicks-ass.net> References: <1472385376-8801-1-git-send-email-manfred@colorfullife.com> <1472385376-8801-2-git-send-email-manfred@colorfullife.com> <1472385376-8801-3-git-send-email-manfred@colorfullife.com> <1472385376-8801-4-git-send-email-manfred@colorfullife.com> <1472385376-8801-5-git-send-email-manfred@colorfullife.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1472385376-8801-5-git-send-email-manfred@colorfullife.com> User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Aug 28, 2016 at 01:56:16PM +0200, Manfred Spraul wrote: > For x86 qspinlocks, no additional memory barrier is required in > smp_mb__after_spin_lock: > > Theoretically, for qspinlock we could define two barriers: > - smp_mb__after_spin_lock: Free for x86, not free for powerpc > - smp_mb__between_spin_lock_and_spin_unlock_wait(): > Free for all archs, see queued_spin_unlock_wait for details. > > As smp_mb__between_spin_lock_and_spin_unlock_wait() is not used > in any hotpaths, the patch does not create that define yet. > > Signed-off-by: Manfred Spraul > --- > arch/x86/include/asm/qspinlock.h | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/arch/x86/include/asm/qspinlock.h b/arch/x86/include/asm/qspinlock.h > index eaba080..da06433 100644 > --- a/arch/x86/include/asm/qspinlock.h > +++ b/arch/x86/include/asm/qspinlock.h > @@ -61,6 +61,17 @@ static inline bool virt_spin_lock(struct qspinlock *lock) > } > #endif /* CONFIG_PARAVIRT */ > > +#ifndef smp_mb__after_spin_lock > +/** > + * smp_mb__after_spin_lock() - Provide smp_mb() after spin_lock > + * > + * queued_spin_lock() provides full memory barriers semantics, > + * thus no further memory barrier is required. See > + * queued_spin_unlock_wait() for further details. > + */ > +#define smp_mb__after_spin_lock() barrier() > +#endif I don't get this barrier, and I from my understanding this isn't correct. Please explain more.