From: "tip-bot for Paul E. McKenney" <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
tglx@linutronix.de, will.deacon@arm.com,
paulmck@linux.vnet.ibm.com, hpa@zytor.com, peterz@infradead.org,
torvalds@linux-foundation.org, mingo@kernel.org
Subject: [tip:locking/core] tools/memory-model: Add scripts to test memory model
Date: Mon, 14 May 2018 23:31:15 -0700 [thread overview]
Message-ID: <tip-2fb6ae162f25a9c3bc45663c479a2b15fb69e768@git.kernel.org> (raw)
In-Reply-To: <1526340837-12222-9-git-send-email-paulmck@linux.vnet.ibm.com>
Commit-ID: 2fb6ae162f25a9c3bc45663c479a2b15fb69e768
Gitweb: https://git.kernel.org/tip/2fb6ae162f25a9c3bc45663c479a2b15fb69e768
Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
AuthorDate: Mon, 14 May 2018 16:33:47 -0700
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 15 May 2018 08:11:17 +0200
tools/memory-model: Add scripts to test memory model
This commit adds a pair of scripts that run the memory model on litmus
tests, checking that the verification result of each litmus test matches
the result flagged in the litmus test itself. These scripts permit easier
checking of changes to the memory model against preconceived notions.
To run the scripts, go to the tools/memory-model directory and type
"scripts/checkalllitmus.sh". If all is well, the last line printed will
be "All litmus tests verified as was expected."
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Deacon <will.deacon@arm.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: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Cc: stern@rowland.harvard.edu
Link: http://lkml.kernel.org/r/1526340837-12222-9-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
tools/memory-model/litmus-tests/.gitignore | 1 +
tools/memory-model/scripts/checkalllitmus.sh | 73 +++++++++++++++++++++++
tools/memory-model/scripts/checklitmus.sh | 86 ++++++++++++++++++++++++++++
3 files changed, 160 insertions(+)
diff --git a/tools/memory-model/litmus-tests/.gitignore b/tools/memory-model/litmus-tests/.gitignore
new file mode 100644
index 000000000000..6e2ddc54152f
--- /dev/null
+++ b/tools/memory-model/litmus-tests/.gitignore
@@ -0,0 +1 @@
+*.litmus.out
diff --git a/tools/memory-model/scripts/checkalllitmus.sh b/tools/memory-model/scripts/checkalllitmus.sh
new file mode 100644
index 000000000000..af0aa15ab84e
--- /dev/null
+++ b/tools/memory-model/scripts/checkalllitmus.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+#
+# Run herd tests on all .litmus files in the specified directory (which
+# defaults to litmus-tests) and check each file's result against a "Result:"
+# comment within that litmus test. If the verification result does not
+# match that specified in the litmus test, this script prints an error
+# message prefixed with "^^^". It also outputs verification results to
+# a file whose name is that of the specified litmus test, but with ".out"
+# appended.
+#
+# Usage:
+# sh checkalllitmus.sh [ directory ]
+#
+# The LINUX_HERD_OPTIONS environment variable may be used to specify
+# arguments to herd, whose default is defined by the checklitmus.sh script.
+# Thus, one would normally run this in the directory containing the memory
+# model, specifying the pathname of the litmus test to check.
+#
+# This script makes no attempt to run the litmus tests concurrently.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you can access it online at
+# http://www.gnu.org/licenses/gpl-2.0.html.
+#
+# Copyright IBM Corporation, 2018
+#
+# Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+litmusdir=${1-litmus-tests}
+if test -d "$litmusdir" -a -r "$litmusdir" -a -x "$litmusdir"
+then
+ :
+else
+ echo ' --- ' error: $litmusdir is not an accessible directory
+ exit 255
+fi
+
+# Find the checklitmus script. If it is not where we expect it, then
+# assume that the caller has the PATH environment variable set
+# appropriately.
+if test -x scripts/checklitmus.sh
+then
+ clscript=scripts/checklitmus.sh
+else
+ clscript=checklitmus.sh
+fi
+
+# Run the script on all the litmus tests in the specified directory
+ret=0
+for i in litmus-tests/*.litmus
+do
+ if ! $clscript $i
+ then
+ ret=1
+ fi
+done
+if test "$ret" -ne 0
+then
+ echo " ^^^ VERIFICATION MISMATCHES"
+else
+ echo All litmus tests verified as was expected.
+fi
+exit $ret
diff --git a/tools/memory-model/scripts/checklitmus.sh b/tools/memory-model/scripts/checklitmus.sh
new file mode 100644
index 000000000000..e2e477472844
--- /dev/null
+++ b/tools/memory-model/scripts/checklitmus.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+#
+# Run a herd test and check the result against a "Result:" comment within
+# the litmus test. If the verification result does not match that specified
+# in the litmus test, this script prints an error message prefixed with
+# "^^^" and exits with a non-zero status. It also outputs verification
+# results to a file whose name is that of the specified litmus test, but
+# with ".out" appended.
+#
+# Usage:
+# sh checklitmus.sh file.litmus
+#
+# The LINUX_HERD_OPTIONS environment variable may be used to specify
+# arguments to herd, which default to "-conf linux-kernel.cfg". Thus,
+# one would normally run this in the directory containing the memory model,
+# specifying the pathname of the litmus test to check.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, you can access it online at
+# http://www.gnu.org/licenses/gpl-2.0.html.
+#
+# Copyright IBM Corporation, 2018
+#
+# Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+litmus=$1
+herdoptions=${LINUX_HERD_OPTIONS--conf linux-kernel.cfg}
+
+if test -f "$litmus" -a -r "$litmus"
+then
+ :
+else
+ echo ' --- ' error: \"$litmus\" is not a readable file
+ exit 255
+fi
+if grep -q '^ \* Result: ' $litmus
+then
+ outcome=`grep -m 1 '^ \* Result: ' $litmus | awk '{ print $3 }'`
+else
+ outcome=specified
+fi
+
+echo Herd options: $herdoptions > $litmus.out
+/usr/bin/time herd7 -o ~/tmp $herdoptions $litmus >> $litmus.out 2>&1
+grep "Herd options:" $litmus.out
+grep '^Observation' $litmus.out
+if grep -q '^Observation' $litmus.out
+then
+ :
+else
+ cat $litmus.out
+ echo ' ^^^ Verification error'
+ echo ' ^^^ Verification error' >> $litmus.out 2>&1
+ exit 255
+fi
+if test "$outcome" = DEADLOCK
+then
+ echo grep 3 and 4
+ if grep '^Observation' $litmus.out | grep -q 'Never 0 0$'
+ then
+ ret=0
+ else
+ echo " ^^^ Unexpected non-$outcome verification"
+ echo " ^^^ Unexpected non-$outcome verification" >> $litmus.out 2>&1
+ ret=1
+ fi
+elif grep '^Observation' $litmus.out | grep -q $outcome || test "$outcome" = Maybe
+then
+ ret=0
+else
+ echo " ^^^ Unexpected non-$outcome verification"
+ echo " ^^^ Unexpected non-$outcome verification" >> $litmus.out 2>&1
+ ret=1
+fi
+tail -2 $litmus.out | head -1
+exit $ret
next prev parent reply other threads:[~2018-05-15 6:31 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-14 23:33 [PATCH memory-model 0/19] Updates to the formal memory model Paul E. McKenney
2018-05-14 23:33 ` [PATCH memory-model 01/19] tools/memory-model: Rename link and rcu-path to rcu-link and rb Paul E. McKenney
2018-05-15 6:27 ` [tip:locking/core] " tip-bot for Alan Stern
2018-05-14 23:33 ` [PATCH memory-model 02/19] tools/memory-model: Redefine rb in terms of rcu-fence Paul E. McKenney
2018-05-15 6:27 ` [tip:locking/core] " tip-bot for Alan Stern
2018-05-14 23:33 ` [PATCH memory-model 03/19] tools/memory-model: Update required version of herdtools7 Paul E. McKenney
2018-05-15 6:28 ` [tip:locking/core] " tip-bot for Akira Yokosawa
2018-05-14 23:33 ` [PATCH memory-model 04/19] tools/memory-model: Fix cheat sheet typo Paul E. McKenney
2018-05-15 6:28 ` [tip:locking/core] " tip-bot for Paolo Bonzini
2018-05-14 23:33 ` [PATCH memory-model 05/19] tools/memory-order: Improve key for SELF and SV Paul E. McKenney
2018-05-15 6:29 ` [tip:locking/core] " tip-bot for Paul E. McKenney
2018-05-14 23:33 ` [PATCH memory-model 06/19] tools/memory-order: smp_mb__after_atomic() orders later RMW operations Paul E. McKenney
2018-05-15 6:29 ` [tip:locking/core] tools/memory-order: Update the cheat-sheet to show that " tip-bot for Paul E. McKenney
2018-05-14 23:33 ` [PATCH memory-model 07/19] tools/memory-model: Model 'smp_store_mb()' Paul E. McKenney
2018-05-15 6:30 ` [tip:locking/core] " tip-bot for Andrea Parri
2018-05-14 23:33 ` [PATCH memory-model 08/19] tools/memory-model: Fix coding style in 'linux-kernel.def' Paul E. McKenney
2018-05-15 6:30 ` [tip:locking/core] " tip-bot for Andrea Parri
2018-05-14 23:33 ` [PATCH memory-model 09/19] tools/memory-model: Add scripts to test memory model Paul E. McKenney
2018-05-15 6:31 ` tip-bot for Paul E. McKenney [this message]
2018-05-14 23:33 ` [PATCH memory-model 10/19] tools/memory-model: Add model support for spin_is_locked Paul E. McKenney
2018-05-15 6:31 ` [tip:locking/core] tools/memory-model: Add model support for spin_is_locked() tip-bot for Luc Maranget
2018-05-14 23:33 ` [PATCH memory-model 11/19] tools/memory-model: Flag "cumulativity" and "propagation" tests Paul E. McKenney
2018-05-15 6:32 ` [tip:locking/core] " tip-bot for Paul E. McKenney
2018-05-14 23:33 ` [PATCH memory-model 12/19] tools/memory-model: Remove duplicated code from lock.cat Paul E. McKenney
2018-05-15 6:32 ` [tip:locking/core] " tip-bot for Alan Stern
2018-05-14 23:33 ` [PATCH memory-model 13/19] tools/memory-model: Improve comments in lock.cat Paul E. McKenney
2018-05-15 6:33 ` [tip:locking/core] " tip-bot for Alan Stern
2018-05-14 23:33 ` [PATCH memory-model 14/19] tools/memory-model: Improve mixed-access checking " Paul E. McKenney
2018-05-15 6:33 ` [tip:locking/core] " tip-bot for Alan Stern
2018-05-14 23:33 ` [PATCH memory-model 15/19] tools/memory-model: Remove out-of-date comments and code from lock.cat Paul E. McKenney
2018-05-15 6:34 ` [tip:locking/core] " tip-bot for Alan Stern
2018-05-14 23:33 ` [PATCH memory-model 16/19] tools/memory-model: Fix coding style in 'lock.cat' Paul E. McKenney
2018-05-15 6:34 ` [tip:locking/core] " tip-bot for Andrea Parri
2018-05-14 23:33 ` [PATCH memory-model 17/19] MAINTAINERS: Update e-mail address for Andrea Parri Paul E. McKenney
2018-05-15 6:35 ` [tip:locking/core] MAINTAINERS, tools/memory-model: " tip-bot for Andrea Parri
2018-05-14 23:33 ` [PATCH memory-model 18/19] tools/memory-model: Update ASPLOS information Paul E. McKenney
2018-05-15 6:35 ` [tip:locking/core] " tip-bot for Andrea Parri
2018-05-14 23:33 ` [PATCH memory-model 19/19] tools/memory-model: Add reference for 'Simplifying ARM concurrency' Paul E. McKenney
2018-05-15 6:36 ` [tip:locking/core] " tip-bot for Andrea Parri
2018-05-15 6:15 ` [PATCH memory-model 0/19] Updates to the formal memory model Ingo Molnar
2018-05-15 16:20 ` 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=tip-2fb6ae162f25a9c3bc45663c479a2b15fb69e768@git.kernel.org \
--to=tipbot@zytor.com \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--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.