From: paulmck@kernel.org
To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
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,
"Paul E. McKenney" <paulmck@linux.ibm.com>
Subject: [PATCH tip/core/rcu 11/32] tools/memory-model: Make judgelitmus.sh handle hardware verifications
Date: Wed, 2 Oct 2019 17:26:29 -0700 [thread overview]
Message-ID: <20191003002650.11249-11-paulmck@kernel.org> (raw)
In-Reply-To: <20191003001039.GA8027@paulmck-ThinkPad-P72>
From: "Paul E. McKenney" <paulmck@linux.ibm.com>
This commit makes the judgelitmus.sh script check the --hw argument
(AKA the LKMM_HW_MAP_FILE environment variable) and to adjust its
judgment for a run where a C-language litmus test has been translated to
assembly and the assembly version verified. In this case, the assembly
verification output is checked against the C-language script's "Result:"
comment. However, because hardware can be stronger than LKMM requires,
the judgelitmus.sh script forgives verification mismatches featuring
a "Sometimes" in the C-language script and an "Always" or "Never"
assembly-language verification.
Note that deadlock is not forgiven, however, this should not normally be
an issue given that C-language tests containing locking, RCU, or SRCU
cannot be translated to assembly. However, this issue can crop up in
litmus tests that mimic deadlock by using the "filter" clause to ignore
all executions. It can also crop up when certain herd arguments are
used to autofilter everything that does not match the "exists" clause
in cases where the "exists" clause cannot be satisfied.
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
---
tools/memory-model/scripts/README | 8 ++--
tools/memory-model/scripts/judgelitmus.sh | 75 +++++++++++++++++++------------
2 files changed, 51 insertions(+), 32 deletions(-)
diff --git a/tools/memory-model/scripts/README b/tools/memory-model/scripts/README
index 095c7eb..0e29a52 100644
--- a/tools/memory-model/scripts/README
+++ b/tools/memory-model/scripts/README
@@ -43,10 +43,10 @@ initlitmushist.sh
judgelitmus.sh
- Given a .litmus file and its .litmus.out herd7 output, check the
- .litmus.out file against the .litmus file's "Result:" comment to
- judge whether the test ran correctly. Not normally run manually,
- provided instead for use by other scripts.
+ Given a .litmus file and its herd7 output, check the output file
+ against the .litmus file's "Result:" comment to judge whether
+ the test ran correctly. Not normally run manually, provided
+ instead for use by other scripts.
newlitmushist.sh
diff --git a/tools/memory-model/scripts/judgelitmus.sh b/tools/memory-model/scripts/judgelitmus.sh
index d82133e..6f3c600 100755
--- a/tools/memory-model/scripts/judgelitmus.sh
+++ b/tools/memory-model/scripts/judgelitmus.sh
@@ -1,9 +1,14 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0+
#
-# Given a .litmus test and the corresponding .litmus.out file, check
-# the .litmus.out file against the "Result:" comment to judge whether
-# the test ran correctly.
+# Given a .litmus test and the corresponding litmus output file, check
+# the .litmus.out file against the "Result:" comment to judge whether the
+# test ran correctly. If the --hw argument is omitted, check against the
+# LKMM output, which is assumed to be in file.litmus.out. If this argument
+# is provided, this is assumed to be a hardware test, and the output is
+# assumed to be in file.HW.litmus.out, where "HW" is the --hw argument.
+# In addition, non-Sometimes verification results will be noted, but
+# forgiven.
#
# Usage:
# judgelitmus.sh file.litmus
@@ -24,11 +29,18 @@ else
echo ' --- ' error: \"$litmus\" is not a readable file
exit 255
fi
-if test -f "$LKMM_DESTDIR/$litmus".out -a -r "$LKMM_DESTDIR/$litmus".out
+if test -z "$LKMM_HW_MAP_FILE"
+then
+ litmusout=$litmus.out
+else
+ litmusout="`echo $litmus |
+ sed -e 's/\.litmus$/.'${LKMM_HW_MAP_FILE}'.litmus/'`.out"
+fi
+if test -f "$LKMM_DESTDIR/$litmusout" -a -r "$LKMM_DESTDIR/$litmusout"
then
:
else
- echo ' --- ' error: \"$LKMM_DESTDIR/$litmus\".out is not a readable file
+ echo ' --- ' error: \"$LKMM_DESTDIR/$litmusout is not a readable file
exit 255
fi
if grep -q '^ \* Result: ' $litmus
@@ -38,69 +50,76 @@ else
outcome=specified
fi
-grep '^Observation' $LKMM_DESTDIR/$litmus.out
-if grep -q '^Observation' $LKMM_DESTDIR/$litmus.out
+grep '^Observation' $LKMM_DESTDIR/$litmusout
+if grep -q '^Observation' $LKMM_DESTDIR/$litmusout
then
:
-elif grep ': Unknown macro ' $LKMM_DESTDIR/$litmus.out
+elif grep ': Unknown macro ' $LKMM_DESTDIR/$litmusout
then
- badname=`grep ': Unknown macro ' $LKMM_DESTDIR/$litmus.out |
+ badname=`grep ': Unknown macro ' $LKMM_DESTDIR/$litmusout |
sed -e 's/^.*: Unknown macro //' |
sed -e 's/ (User error).*$//'`
badmsg=' !!! Current LKMM version does not know "'$badname'"'" $litmus"
echo $badmsg
- if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
+ if ! grep -q '!!!' $LKMM_DESTDIR/$litmusout
then
- echo ' !!! '$badmsg >> $LKMM_DESTDIR/$litmus.out 2>&1
+ echo ' !!! '$badmsg >> $LKMM_DESTDIR/$litmusout 2>&1
fi
exit 254
-elif grep '^Command exited with non-zero status 124' $LKMM_DESTDIR/$litmus.out
+elif grep '^Command exited with non-zero status 124' $LKMM_DESTDIR/$litmusout
then
echo ' !!! Timeout' $litmus
- if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
+ if ! grep -q '!!!' $LKMM_DESTDIR/$litmusout
then
- echo ' !!! Timeout' >> $LKMM_DESTDIR/$litmus.out 2>&1
+ echo ' !!! Timeout' >> $LKMM_DESTDIR/$litmusout 2>&1
fi
exit 124
else
echo ' !!! Verification error' $litmus
- if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
+ if ! grep -q '!!!' $LKMM_DESTDIR/$litmusout
then
- echo ' !!! Verification error' >> $LKMM_DESTDIR/$litmus.out 2>&1
+ echo ' !!! Verification error' >> $LKMM_DESTDIR/$litmusout 2>&1
fi
exit 255
fi
if test "$outcome" = DEADLOCK
then
- if grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q 'Never 0 0$'
+ if grep '^Observation' $LKMM_DESTDIR/$litmusout | grep -q 'Never 0 0$'
then
ret=0
else
echo " !!! Unexpected non-$outcome verification" $litmus
- if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
+ if ! grep -q '!!!' $LKMM_DESTDIR/$litmusout
then
- echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1
+ echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmusout 2>&1
fi
ret=1
fi
-elif grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q 'Never 0 0$'
+elif grep '^Observation' $LKMM_DESTDIR/$litmusout | grep -q 'Never 0 0$'
then
echo " !!! Unexpected non-$outcome deadlock" $litmus
- if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
+ if ! grep -q '!!!' $LKMM_DESTDIR/$litmusout
then
- echo " !!! Unexpected non-$outcome deadlock" $litmus >> $LKMM_DESTDIR/$litmus.out 2>&1
+ echo " !!! Unexpected non-$outcome deadlock" $litmus >> $LKMM_DESTDIR/$litmusout 2>&1
fi
ret=1
-elif grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q $outcome || test "$outcome" = Maybe
+elif grep '^Observation' $LKMM_DESTDIR/$litmusout | grep -q $outcome || test "$outcome" = Maybe
then
ret=0
else
- echo " !!! Unexpected non-$outcome verification" $litmus
- if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
+ if test -n "$LKMM_HW_MAP_FILE" -a "$outcome" = Sometimes
then
- echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1
+ flag="--- Forgiven"
+ ret=0
+ else
+ flag="!!! Unexpected"
+ ret=1
+ fi
+ echo " $flag non-$outcome verification" $litmus
+ if ! grep -qe "$flag" $LKMM_DESTDIR/$litmusout
+ then
+ echo " $flag non-$outcome verification" >> $LKMM_DESTDIR/$litmusout 2>&1
fi
- ret=1
fi
-tail -2 $LKMM_DESTDIR/$litmus.out | head -1
+tail -2 $LKMM_DESTDIR/$litmusout | head -1
exit $ret
--
2.9.5
next prev parent reply other threads:[~2019-10-03 0:26 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-03 0:10 [PATCH memory-model 0/32] Memory-model updates Paul E. McKenney
2019-10-03 0:10 ` Paul E. McKenney
2019-10-03 0:26 ` [PATCH tip/core/rcu 01/32] tools/memory-model: Fix data race detection for unordered store and load paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 02/32] tools/memory-model/Documentation: Fix typos in explanation.txt paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 03/32] tools/memory-model/Documentation: Put redefinition of rcu-fence into explanation.txt paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 04/32] tools/memory-model/Documentation: Add plain accesses and data races to explanation.txt paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 05/32] tools/memory-model: Make judgelitmus.sh note timeouts paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 06/32] tools/memory-model: Make cmplitmushist.sh " paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 07/32] tools/memory-model: Make judgelitmus.sh identify bad macros paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 08/32] tools/memory-model: Make judgelitmus.sh detect hard deadlocks paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 09/32] tools/memory-model: Fix paulmck email address on pre-existing scripts paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 10/32] tools/memory-model: Update parseargs.sh for hardware verification paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` paulmck [this message]
2019-10-03 0:26 ` [PATCH tip/core/rcu 11/32] tools/memory-model: Make judgelitmus.sh handle hardware verifications paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 12/32] tools/memory-model: Add simpletest.sh to check locking, RCU, and SRCU paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 13/32] tools/memory-model: Fix checkalllitmus.sh comment paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 14/32] tools/memory-model: Hardware checking for check{,all}litmus.sh paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 15/32] tools/memory-model: Make judgelitmus.sh ransack .litmus.out files paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 16/32] tools/memory-model: Split runlitmus.sh out of checklitmus.sh paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 17/32] tools/memory-model: Make runlitmus.sh generate .litmus.out for --hw paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 18/32] tools/memory-model: Move from .AArch64.litmus.out to .litmus.AArch.out paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 19/32] tools/memory-model: Keep assembly-language litmus tests paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 20/32] tools/memory-model: Allow herd to deduce CPU type paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 21/32] tools/memory-model: Make runlitmus.sh check for jingle errors paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 22/32] tools/memory-model: Add -v flag to jingle7 runs paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 23/32] tools/memory-model: Implement --hw support for checkghlitmus.sh paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 24/32] tools/memory-model: Fix scripting --jobs argument paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 25/32] tools/memory-model: Make checkghlitmus.sh use mselect7 paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 26/32] tools/memory-model: Make history-check scripts " paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 27/32] tools/memory-model: Add "--" to parseargs.sh for additional arguments paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 28/32] tools/memory-model: Repair parseargs.sh header comment paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 29/32] tools/memory-model: Add checktheselitmus.sh to run specified litmus tests paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 30/32] tools/memory-model: Add data-race capabilities to judgelitmus.sh paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 31/32] tools/memory-model: Make judgelitmus.sh handle scripted Result: tag paulmck
2019-10-03 0:26 ` paulmck
2019-10-03 0:26 ` [PATCH tip/core/rcu 32/32] tools/memory-model: Use "-unroll 0" to keep --hw runs finite paulmck
2019-10-03 0:26 ` 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=20191003002650.11249-11-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=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.ibm.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 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).