From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758793AbdKPI6g (ORCPT ); Thu, 16 Nov 2017 03:58:36 -0500 Received: from merlin.infradead.org ([205.233.59.134]:57390 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933029AbdKPI6T (ORCPT ); Thu, 16 Nov 2017 03:58:19 -0500 Date: Thu, 16 Nov 2017 09:58:04 +0100 From: Peter Zijlstra To: Andrea Parri Cc: Alan Stern , Will Deacon , "Reshetova, Elena" , "linux-kernel@vger.kernel.org" , "gregkh@linuxfoundation.org" , "keescook@chromium.org" , "tglx@linutronix.de" , "mingo@redhat.com" , "ishkamiel@gmail.com" , Paul McKenney , boqun.feng@gmail.com, dhowells@redhat.com, david@fromorbit.com Subject: Re: [PATCH] refcount: provide same memory ordering guarantees as in atomic_t Message-ID: <20171116085804.ixw4x7ssf2ruooqg@hirez.programming.kicks-ass.net> References: <20171115180540.GQ19071@arm.com> <20171115200307.ns4ja7xjwhunen65@hirez.programming.kicks-ass.net> <20171115205823.GA2608@andrea> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171115205823.GA2608@andrea> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 15, 2017 at 10:01:11PM +0100, Andrea Parri wrote: > > And in specific things like: > > > > 135e8c9250dd5 > > ecf7d01c229d1 > > > > which use the release of rq->lock paired with the next acquire of the > > same rq->lock to match with an smp_rmb(). > > Those cycles are currently forbidden by LKMM _when_ you consider the > smp_mb__after_spinlock() from schedule(). See rfi-rel-acq-is-not-mb > from my previous email and Alan's remarks about cumul-fence. I'm not sure I get your point; and you all seem to forget I do not in fact speak the ordering lingo. So I have no idea what rfi-blah-blah or cumul-fence mean. I know rel-acq isn't smp_mb() and I don't think any of the above patches need it to be. They just need it do be a local ordering, no? Even without smp_mb__after_spinlock() we get that: spin_lock(&x) x = 1 spin_unlock(&x) spin_lock(&x) y = 1 spin_unlock(&x) guarantees that x happens-before y, right? And that should be sufficient to then order something else against, like for example: r2 = y smp_rmb() r1 = x no?