linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrea Parri <andrea.parri@amarulasolutions.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Will Deacon <will.deacon@arm.com>,
	Andrea Parri <parri.andrea@gmail.com>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	mingo@kernel.org, peterz@infradead.org, boqun.feng@gmail.com,
	npiggin@gmail.com, dhowells@redhat.com, j.alglave@ucl.ac.uk,
	luc.maranget@inria.fr, akiyks@gmail.com
Subject: Re: [PATCH RFC LKMM 1/7] tools/memory-model: Add extra ordering for locks and remove it for ordinary release/acquire
Date: Thu, 6 Sep 2018 11:36:55 +0200	[thread overview]
Message-ID: <20180906093655.GA9653@andrea> (raw)
Message-ID: <20180906093655.I7kIPeCRIFw8w55xQ49KfqwIHX_jJkJMPbM35U4inSE@z> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1809052115490.2261-100000@netrider.rowland.org>

On Wed, Sep 05, 2018 at 09:25:40PM -0400, Alan Stern wrote:
> On Mon, 3 Sep 2018, Andrea Parri wrote:
> 
> > I take this opportunity to summarize my viewpoint on these matters:
> > 


[1st approach/fix]

> > Someone would have to write the commit message for the above diff ...
> > that is, to describe -why- we should go RCtso (and update the documen-
> > tation accordingly); by now, the only argument for this appears to be:
> > "(most) people expect strong ordering" _and they will be "lazy enough"
> > to not check their expectations by using the LKMM tool (paraphrasing
> > from [1]); IAC, Linux "might work" better if we add this ordering to
> > the LKMM.  Agreeing on such an approach would mean agreeing that this
> > argument "wins" over:
> > 
> >   "We want new architectures to implement acquire/release efficiently,
> >    and it's not unlikely that they will have acquire loads that are
> >    similar in semantics to LDAPR." [2]
> > 
> >   "RISC-V probably would have been RCpc [...]  it takes extra fences
> >    to go from RCpc to either "RCtso" or RCsc." [3]
> > 
> > (or similar instances) since, of course, there is no such thing as a
> > "free strong ordering"; and I'm not only talking about "efficiency",
> > I'm also thinking at the fact that someone will have to maintain that
> > ordering across all the architectures and in the LKMM.
> > 


[2nd approach/fix]

> > If, OTOH, we agree that the above "win"/assumption is valid only for
> > locks or, in other/better words, if we agree that we should maintain
> > _two_ distinct release-acquire orderings (a first one for unlock-lock
> > sequences and a second one for ordinary/atomic release-acquire, say,
> > as proposed in the patch under RFC),
> 
> In fact, there have have been _two_ proposals along this line.  One as
> you describe here (which is what the 1/7 patch under discussion does),
> and another in which unlock-lock sequences and atomic acquire-release
> sequences both have "RCtso" semantics while ordinary acquire/release
> sequences have RCpc semantics.  You should consider the second
> proposal.  It could be put into the LKMM quite easily by building upon
> this 1/7 patch.

I posted a prototype here (no replies from other LKMM maintainers):

  http://lkml.kernel.org/r/20180712212351.GA5480@andrea

I'm certainly willing to consider it, but I would agree with you in
saying that this proposal follows this second "approach" above  (in
part., it might be subject to the same/similar counterarguments).


> 
> >  I ask that we audit and modify
> > the generic code accordingly/as suggested in other posts _before_ we
> > upstream the changes for the LKMM: we should identify those places
> > where (the newly introduced) _gap_ between unlock-lock and the other
> > release-acquire is not admissible and fix those places (notice that
> > this entails, in part., agreeing on what/where the generic code is).
> 
> Have you noticed any part of the generic code that relies on ordinary 
> acquire-release (rather than atomic RMW acquire-release) in order to 
> implement locking constructs?

There are several places in code where the "lock-acquire" seems to be
provided by an atomic_cond_read_acquire/smp_cond_load_acquire: I have
mentioned one in qspinlock in this thread; qrwlock and mcs_spinlock
provide other examples (grep for the primitives...).

As long as we don't consider these primitive as RMW (which would seem
odd...) or as acquire for which "most people expect strong ordering"
(see above), these provides other examples for the _gap_ I mentioned.

Notice that the issue/counter-argument here is not only:

  "the proposal is taking us away from a tested-and-verified-over
   -years design kernel developers are _used to reason with [have
   one release-acquire] in favor of an "unrealistically" or harder,
   FWIW, verifiable one [as if one wasn't enough fun already... ;-)]"
   
The issue is also how to realize the proposed "abstract" design in
kernel code!, since that "gap" makes doing so _not straightforward
at _least (examples: arm64 using LDAPR for its acquire and having
to fix its *cond_read* implementation;  or riscv using .aq/.rl for
its atomics and having to audit generic code, which is "hard" ...).


> 

[3rd approach/fix]

> > Finally, if we don't agree with the above assumption at all (that is,
> > no matter if we are considering unlock-lock or other release-acquire
> > sequences), then we should go RCpc [4].
> > 
> > I described three different approaches (which are NOT "independent",
> > clearly; let us find an agreement...); even though some of them look
> > insane to me, I'm currently open to all of them: thoughts?
> 
> How about this fourth approach?

Are you referring to the variation on the 2nd approach remarked above?
if so, please see above; otherwise, I'd ask "which one?".

  Andrea


> 
> Alan
> 
> >   Andrea
> > 
> > [1] http://lkml.kernel.org/r/20180712134821.GT2494@hirez.programming.kicks-ass.net
> >     http://lkml.kernel.org/r/CA+55aFwKpkU5C23OYt1HCiD3X5bJHVh1jz5G2dSnF1+kVrOCTA@mail.gmail.com
> > [2] http://lkml.kernel.org/r/20180622183007.GD1802@arm.com
> > [3] http://lkml.kernel.org/r/11b27d32-4a8a-3f84-0f25-723095ef1076@nvidia.com
> > [4] http://lkml.kernel.org/r/20180711123421.GA9673@andrea
> >     http://lkml.kernel.org/r/Pine.LNX.4.44L0.1807132133330.26947-100000@netrider.rowland.org
> 

  parent reply	other threads:[~2018-09-06 14:11 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29 21:10 [PATCH RFC memory-model 0/7] Memory-model changes Paul E. McKenney
2018-08-29 21:10 ` Paul E. McKenney
2018-08-29 21:10 ` [PATCH RFC LKMM 1/7] tools/memory-model: Add extra ordering for locks and remove it for ordinary release/acquire Paul E. McKenney
2018-08-29 21:10   ` Paul E. McKenney
2018-08-30 12:50   ` Andrea Parri
2018-08-30 12:50     ` Andrea Parri
2018-08-30 21:31     ` Alan Stern
2018-08-30 21:31       ` Alan Stern
2018-08-31  9:17       ` Andrea Parri
2018-08-31  9:17         ` Andrea Parri
2018-08-31 14:52         ` Alan Stern
2018-08-31 14:52           ` Alan Stern
2018-08-31 16:06           ` Will Deacon
2018-08-31 16:06             ` Will Deacon
2018-08-31 18:28             ` Andrea Parri
2018-08-31 18:28               ` Andrea Parri
2018-09-03  9:01               ` Andrea Parri
2018-09-03  9:01                 ` Andrea Parri
2018-09-03 17:04                 ` Will Deacon
2018-09-03 17:04                   ` Will Deacon
2018-09-04  8:11                   ` Andrea Parri
2018-09-04  8:11                     ` Andrea Parri
2018-09-04 19:09                     ` Alan Stern
2018-09-04 19:09                       ` Alan Stern
2018-09-05  7:21                       ` Andrea Parri
2018-09-05  7:21                         ` Andrea Parri
2018-09-05 14:33                         ` Akira Yokosawa
2018-09-05 14:33                           ` Akira Yokosawa
2018-09-05 14:53                           ` Paul E. McKenney
2018-09-05 14:53                             ` Paul E. McKenney
2018-09-05 15:00                           ` Andrea Parri
2018-09-05 15:00                             ` Andrea Parri
2018-09-05 15:04                             ` Akira Yokosawa
2018-09-05 15:04                               ` Akira Yokosawa
2018-09-05 15:24                               ` Andrea Parri
2018-09-05 15:24                                 ` Andrea Parri
2018-09-03 17:52                 ` Alan Stern
2018-09-03 17:52                   ` Alan Stern
2018-09-03 18:28                   ` Andrea Parri
2018-09-03 18:28                     ` Andrea Parri
2018-09-06  1:25                 ` Alan Stern
2018-09-06  1:25                   ` Alan Stern
2018-09-06  9:36                   ` Andrea Parri [this message]
2018-09-06  9:36                     ` Andrea Parri
2018-09-07 16:00                     ` Alan Stern
2018-09-07 16:00                       ` Alan Stern
2018-09-07 16:09                       ` Will Deacon
2018-09-07 16:09                         ` Will Deacon
2018-09-07 16:39                         ` Daniel Lustig
2018-09-07 16:39                           ` Daniel Lustig
2018-09-07 17:38                           ` Alan Stern
2018-09-07 17:38                             ` Alan Stern
2018-09-08  0:04                             ` Daniel Lustig
2018-09-08  0:04                               ` Daniel Lustig
2018-09-08  9:58                             ` Andrea Parri
2018-09-08  9:58                               ` Andrea Parri
2018-09-11 19:31                               ` Alan Stern
2018-09-11 19:31                                 ` Alan Stern
2018-09-11 20:03                                 ` Paul E. McKenney
2018-09-11 20:03                                   ` Paul E. McKenney
2018-09-12 14:24                                   ` Alan Stern
2018-09-12 14:24                                     ` Alan Stern
2018-09-13 17:07                                   ` Alan Stern
2018-09-13 17:07                                     ` Alan Stern
2018-09-14 14:37                                     ` Andrea Parri
2018-09-14 14:37                                       ` Andrea Parri
2018-09-14 16:29                                       ` Alan Stern
2018-09-14 16:29                                         ` Alan Stern
2018-09-14 19:44                                         ` Andrea Parri
2018-09-14 19:44                                           ` Andrea Parri
2018-09-14 21:08                                       ` [PATCH v5] " Alan Stern
2018-09-14 21:08                                         ` Alan Stern
2018-09-15  3:56                                         ` Paul E. McKenney
2018-09-15  3:56                                           ` Paul E. McKenney
2018-09-03 17:05               ` [PATCH RFC LKMM 1/7] " Will Deacon
2018-09-03 17:05                 ` Will Deacon
2018-08-31 17:55           ` Andrea Parri
2018-08-31 17:55             ` Andrea Parri
2018-08-29 21:10 ` [PATCH RFC LKMM 2/7] doc: Replace smp_cond_acquire() with smp_cond_load_acquire() Paul E. McKenney
2018-08-29 21:10   ` Paul E. McKenney
2018-09-14 16:59   ` Will Deacon
2018-09-14 16:59     ` Will Deacon
2018-09-14 18:20     ` Paul E. McKenney
2018-09-14 18:20       ` Paul E. McKenney
2018-08-29 21:10 ` [PATCH RFC LKMM 3/7] EXP tools/memory-model: Add more LKMM limitations Paul E. McKenney
2018-08-29 21:10   ` Paul E. McKenney
2018-08-30  9:17   ` Andrea Parri
2018-08-30  9:17     ` Andrea Parri
2018-08-30 22:18     ` Paul E. McKenney
2018-08-30 22:18       ` Paul E. McKenney
2018-08-31  9:43       ` Andrea Parri
2018-08-31  9:43         ` Andrea Parri
2018-09-06 18:34         ` Paul E. McKenney
2018-09-06 18:34           ` Paul E. McKenney
2018-08-29 21:10 ` [PATCH RFC LKMM 4/7] tools/memory-model: Fix a README typo Paul E. McKenney
2018-08-29 21:10   ` Paul E. McKenney
2018-08-29 21:10 ` [PATCH RFC LKMM 5/7] EXP tools/memory-model: Add scripts to check github litmus tests Paul E. McKenney
2018-08-29 21:10   ` Paul E. McKenney
2018-08-29 21:10 ` [PATCH RFC LKMM 6/7] EXP tools/memory-model: Make scripts take "-j" abbreviation for "--jobs" Paul E. McKenney
2018-08-29 21:10   ` Paul E. McKenney
2018-08-29 21:10 ` [PATCH RFC LKMM 7/7] EXP tools/memory-model: Add .cfg and .cat files for s390 Paul E. McKenney
2018-08-29 21:10   ` Paul E. McKenney
2018-08-31 16:06   ` Will Deacon
2018-08-31 16:06     ` Will Deacon
2018-09-01 17:08     ` Paul E. McKenney
2018-09-01 17:08       ` Paul E. McKenney
2018-09-14 16:36 ` [PATCH RFC memory-model 0/7] Memory-model changes Paul E. McKenney
2018-09-14 16:36   ` Paul E. McKenney
2018-09-14 17:19   ` Alan Stern
2018-09-14 17:19     ` Alan Stern
2018-09-14 18:29     ` Paul E. McKenney
2018-09-14 18:29       ` Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180906093655.GA9653@andrea \
    --to=andrea.parri@amarulasolutions.com \
    --cc=akiyks@gmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dhowells@redhat.com \
    --cc=j.alglave@ucl.ac.uk \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luc.maranget@inria.fr \
    --cc=mingo@kernel.org \
    --cc=npiggin@gmail.com \
    --cc=parri.andrea@gmail.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=stern@rowland.harvard.edu \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).