All of lore.kernel.org
 help / color / mirror / Atom feed
From: paulmck@kernel.org
To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	kernel-team@fb.com, mingo@kernel.org
Cc: stern@rowland.harvard.edu, parri.andrea@gmail.com,
	will@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,
	"Joel Fernandes (Google)" <joel@joelfernandes.org>,
	"Paul E . McKenney" <paulmck@kernel.org>
Subject: [PATCH tip/core/rcu 03/14] Documentation: LKMM: Add litmus test for RCU GP guarantee where updater frees object
Date: Mon, 22 Jun 2020 17:52:20 -0700	[thread overview]
Message-ID: <20200623005231.27712-3-paulmck@kernel.org> (raw)
In-Reply-To: <20200623005152.GA27459@paulmck-ThinkPad-P72>

From: "Joel Fernandes (Google)" <joel@joelfernandes.org>

This adds an example for the important RCU grace period guarantee, which
shows an RCU reader can never span a grace period.

Acked-by: Andrea Parri <parri.andrea@gmail.com>
Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 .../litmus-tests/rcu/RCU+sync+free.litmus          | 42 ++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 Documentation/litmus-tests/rcu/RCU+sync+free.litmus

diff --git a/Documentation/litmus-tests/rcu/RCU+sync+free.litmus b/Documentation/litmus-tests/rcu/RCU+sync+free.litmus
new file mode 100644
index 0000000..4ee67e1
--- /dev/null
+++ b/Documentation/litmus-tests/rcu/RCU+sync+free.litmus
@@ -0,0 +1,42 @@
+C RCU+sync+free
+
+(*
+ * Result: Never
+ *
+ * This litmus test demonstrates that an RCU reader can never see a write that
+ * follows a grace period, if it did not see writes that precede that grace
+ * period.
+ *
+ * This is a typical pattern of RCU usage, where the write before the grace
+ * period assigns a pointer, and the writes following the grace period destroy
+ * the object that the pointer used to point to.
+ *
+ * This is one implication of the RCU grace-period guarantee, which says (among
+ * other things) that an RCU read-side critical section cannot span a grace period.
+ *)
+
+{
+int x = 1;
+int *y = &x;
+int z = 1;
+}
+
+P0(int *x, int *z, int **y)
+{
+	int *r0;
+	int r1;
+
+	rcu_read_lock();
+	r0 = rcu_dereference(*y);
+	r1 = READ_ONCE(*r0);
+	rcu_read_unlock();
+}
+
+P1(int *x, int *z, int **y)
+{
+	rcu_assign_pointer(*y, z);
+	synchronize_rcu();
+	WRITE_ONCE(*x, 0);
+}
+
+exists (0:r0=x /\ 0:r1=0)
-- 
2.9.5

  parent reply	other threads:[~2020-06-23  0:52 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-23  0:51 [PATCH memory-model 0/14] LKMM updates for v5.9 Paul E. McKenney
2020-06-23  0:52 ` [PATCH tip/core/rcu 01/14] tools/memory-model: Add recent references paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 02/14] tools/memory-model: Fix "conflict" definition paulmck
2020-06-23  0:52 ` paulmck [this message]
2020-06-23  0:52 ` [PATCH tip/core/rcu 04/14] Documentation: LKMM: Add litmus test for RCU GP guarantee where reader stores paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 05/14] MAINTAINERS: Update maintainers for new Documentation/litmus-tests paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 06/14] tools/memory-model: Add an exception for limitations on _unless() family paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 07/14] Documentation/litmus-tests: Introduce atomic directory paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 08/14] Documentation/litmus-tests/atomic: Add a test for atomic_set() paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 09/14] Documentation/litmus-tests/atomic: Add a test for smp_mb__after_atomic() paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 10/14] tools/memory-model: Fix reference to litmus test in recipes.txt paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 11/14] Documentation/litmus-tests: Merge atomic's README into top-level one paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 12/14] Documentation/litmus-tests: Cite an RCU litmus test paulmck
2020-06-23  0:52 ` [PATCH tip/core/rcu 13/14] tools/memory-model/README: Expand dependency of klitmus7 paulmck
2020-06-23 14:37   ` Akira Yokosawa
2020-06-23 15:54     ` Paul E. McKenney
2020-06-23 22:06       ` [PATCH 1/2] tools/memory-model/README: Mention herdtools7 7.56 in compatibility table Akira Yokosawa
2020-06-23 22:09         ` [PATCH 2/2] Documentation/litmus-tests: Add note on herd7 7.56 in atomic litmus test Akira Yokosawa
2020-06-23 23:24           ` Andrea Parri
2020-06-24  4:05             ` Paul E. McKenney
2020-06-23 22:57         ` [PATCH 1/2] tools/memory-model/README: Mention herdtools7 7.56 in compatibility table Andrea Parri
2020-06-23  0:52 ` [PATCH tip/core/rcu 14/14] docs: fix references for DMA*.txt files paulmck

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=20200623005231.27712-3-paulmck@kernel.org \
    --to=paulmck@kernel.org \
    --cc=akiyks@gmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dhowells@redhat.com \
    --cc=j.alglave@ucl.ac.uk \
    --cc=joel@joelfernandes.org \
    --cc=kernel-team@fb.com \
    --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=peterz@infradead.org \
    --cc=stern@rowland.harvard.edu \
    --cc=will@kernel.org \
    /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.