All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrea Parri <parri.andrea@gmail.com>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	mingo@kernel.org, stern@rowland.harvard.edu, will.deacon@arm.com,
	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 3/7] EXP tools/memory-model: Add more LKMM limitations
Date: Thu, 30 Aug 2018 11:17:13 +0200	[thread overview]
Message-ID: <20180830091713.GA4617@andrea> (raw)
In-Reply-To: <20180829211053.20531-3-paulmck@linux.vnet.ibm.com>

On Wed, Aug 29, 2018 at 02:10:49PM -0700, Paul E. McKenney wrote:
> This commit adds more detail about compiler optimizations and
> not-yet-modeled Linux-kernel APIs.
> 
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> ---
>  tools/memory-model/README | 39 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
> 
> diff --git a/tools/memory-model/README b/tools/memory-model/README
> index ee987ce20aae..acf9077cffaa 100644
> --- a/tools/memory-model/README
> +++ b/tools/memory-model/README
> @@ -171,6 +171,12 @@ The Linux-kernel memory model has the following limitations:
>  	particular, the "THE PROGRAM ORDER RELATION: po AND po-loc"
>  	and "A WARNING" sections).
>  
> +	Note that this limitation in turn limits LKMM's ability to
> +	accurately model address, control, and data dependencies.
> +	For example, if the compiler can deduce the value of some variable
> +	carrying a dependency, then the compiler can break that dependency
> +	by substituting a constant of that value.
> +
>  2.	Multiple access sizes for a single variable are not supported,
>  	and neither are misaligned or partially overlapping accesses.
>  
> @@ -190,6 +196,36 @@ The Linux-kernel memory model has the following limitations:
>  	However, a substantial amount of support is provided for these
>  	operations, as shown in the linux-kernel.def file.
>  
> +	a.	When rcu_assign_pointer() is passed NULL, the Linux
> +		kernel provides no ordering, but LKMM models this
> +		case as a store release.
> +
> +	b.	The "unless" RMW operations are not currently modeled:
> +		atomic_long_add_unless(), atomic_add_unless(),
> +		atomic_inc_unless_negative(), and
> +		atomic_dec_unless_positive().  These can be emulated
> +		in litmus tests, for example, by using atomic_cmpxchg().

There is a prototype atomic_add_unless(): with current herd7,

$ cat atomic_add_unless.litmus
C atomic_add_unless

{}

P0(atomic_t *u, atomic_t *v)
{
	int r0;
	int r1;

	r0 = atomic_add_unless(u, 1, 2);
	r1 = atomic_read(v);
}

P1(atomic_t *u, atomic_t *v)
{
	int r0;
	int r1;

	r0 = atomic_add_unless(v, 1, 2);
	r1 = atomic_read(u);
}

exists (0:r1=0 /\ 1:r1=0)

$ herd7 -conf linux-kernel.cfg atomic_add_unless.litmus
Test atomic_add_unless Allowed
States 3
0:r1=0; 1:r1=1;
0:r1=1; 1:r1=0;
0:r1=1; 1:r1=1;
No
Witnesses
Positive: 0 Negative: 3
Condition exists (0:r1=0 /\ 1:r1=0)
Observation atomic_add_unless Never 0 3
Time atomic_add_unless 0.00
Hash=fa37a2359831690299e4cc394e45d966

The last commit in the herdtools7 repo. related to this implementation
(AFAICT) is:

  9523c340917b6a ("herd/linux: make atomic_add_unless a primitive, so as to yield more precise dependencies for the returned boolean.")

but I can only vaguely remember those dependencies issues now :/  ...;
maybe we can now solve these issues?  or should we change herd7 to re-
turn a warning?  (Notice that this primitive is currently not exported
to the linux-kernel.def file.)

  Andrea


> +
> +	c.	The call_rcu() function is not modeled.  It can be
> +		emulated in litmus tests by adding another process that
> +		invokes synchronize_rcu() and the body of the callback
> +		function, with (for example) a release-acquire from
> +		the site of the emulated call_rcu() to the beginning
> +		of the additional process.
> +
> +	d.	The rcu_barrier() function is not modeled.  It can be
> +		emulated in litmus tests emulating call_rcu() via
> +		(for example) a release-acquire from the end of each
> +		additional call_rcu() process to the site of the
> +		emulated rcu-barrier().
> +
> +	e.	Sleepable RCU (SRCU) is not modeled.  It can be
> +		emulated, but perhaps not simply.
> +
> +	f.	Reader-writer locking is not modeled.  It can be
> +		emulated in litmus tests using atomic read-modify-write
> +		operations.
> +
>  The "herd7" tool has some additional limitations of its own, apart from
>  the memory model:
>  
> @@ -204,3 +240,6 @@ the memory model:
>  Some of these limitations may be overcome in the future, but others are
>  more likely to be addressed by incorporating the Linux-kernel memory model
>  into other tools.
> +
> +Finally, please note that LKMM is subject to change as hardware, use cases,
> +and compilers evolve.
> -- 
> 2.17.1
> 

  reply	other threads:[~2018-08-30  9:17 UTC|newest]

Thread overview: 71+ 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 ` [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-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 14:52         ` Alan Stern
2018-08-31 14:52           ` Alan Stern
2018-08-31 16:06           ` Will Deacon
2018-08-31 18:28             ` Andrea Parri
2018-09-03  9:01               ` Andrea Parri
2018-09-03 17:04                 ` Will Deacon
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 14:33                         ` Akira Yokosawa
2018-09-05 14:53                           ` Paul E. McKenney
2018-09-05 15:00                           ` Andrea Parri
2018-09-05 15:04                             ` Akira Yokosawa
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-06  1:25                 ` Alan Stern
2018-09-06  1:25                   ` Alan Stern
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: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-11 19:31                               ` Alan Stern
2018-09-11 19:31                                 ` Alan Stern
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 16:29                                       ` Alan Stern
2018-09-14 16:29                                         ` Alan Stern
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-03 17:05               ` [PATCH RFC LKMM 1/7] " Will Deacon
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-09-14 16:59   ` Will Deacon
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-30  9:17   ` Andrea Parri [this message]
2018-08-30 22:18     ` Paul E. McKenney
2018-08-31  9:43       ` Andrea Parri
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 ` [PATCH RFC LKMM 5/7] EXP tools/memory-model: Add scripts to check github litmus tests 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 ` [PATCH RFC LKMM 7/7] EXP tools/memory-model: Add .cfg and .cat files for s390 Paul E. McKenney
2018-08-31 16:06   ` Will Deacon
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 17:19   ` Alan Stern
2018-09-14 17:19     ` Alan Stern
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=20180830091713.GA4617@andrea \
    --to=parri.andrea@gmail.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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.