From: "Paul E. McKenney" <paulmck@linux.ibm.com>
To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
mingo@kernel.org
Cc: stern@rowland.harvard.edu, andrea.parri@amarulasolutions.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 RFC memory-model 08/31] tools/memory-model: Make judgelitmus.sh handle hardware verifications
Date: Thu, 1 Aug 2019 15:20:33 -0700 [thread overview]
Message-ID: <20190801222056.12144-8-paulmck@linux.ibm.com> (raw)
In-Reply-To: <20190801222026.GA11315@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 095c7eb36f9f..0e29a52044c1 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 d82133e75580..6f3c60065c8b 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.17.1
next prev parent reply other threads:[~2019-08-01 22:21 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-01 22:20 [PATCH RFC memory-model 0/31] LKMM updates for review Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 01/31] tools/memory-model: Make scripts be executable Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 02/31] tools/memory-model: Make judgelitmus.sh note timeouts Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 03/31] tools/memory-model: Make cmplitmushist.sh " Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 04/31] tools/memory-model: Make judgelitmus.sh identify bad macros Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 05/31] tools/memory-model: Make judgelitmus.sh detect hard deadlocks Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 06/31] tools/memory-model: Fix paulmck email address on pre-existing scripts Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 07/31] tools/memory-model: Update parseargs.sh for hardware verification Paul E. McKenney
2019-08-01 22:20 ` Paul E. McKenney [this message]
2019-08-01 22:20 ` [PATCH RFC memory-model 09/31] tools/memory-model: Add simpletest.sh to check locking, RCU, and SRCU Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 10/31] tools/memory-model: Fix checkalllitmus.sh comment Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 11/31] tools/memory-model: Hardware checking for check{,all}litmus.sh Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 12/31] tools/memory-model: Make judgelitmus.sh ransack .litmus.out files Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 13/31] tools/memory-model: Split runlitmus.sh out of checklitmus.sh Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 14/31] tools/memory-model: Make runlitmus.sh generate .litmus.out for --hw Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 15/31] tools/memory-model: Move from .AArch64.litmus.out to .litmus.AArch.out Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 16/31] tools/memory-model: Keep assembly-language litmus tests Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 17/31] tools/memory-model: Allow herd to deduce CPU type Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 18/31] tools/memory-model: Make runlitmus.sh check for jingle errors Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 19/31] tools/memory-model: Add -v flag to jingle7 runs Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 20/31] tools/memory-model: Implement --hw support for checkghlitmus.sh Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 21/31] tools/memory-model: Fix scripting --jobs argument Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 22/31] tools/memory-model: Make checkghlitmus.sh use mselect7 Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 23/31] tools/memory-model: Make history-check scripts " Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 24/31] tools/memory-model: Add "--" to parseargs.sh for additional arguments Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 25/31] tools/memory-model: Repair parseargs.sh header comment Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 26/31] tools/memory-model: Add checktheselitmus.sh to run specified litmus tests Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 27/31] tools/memory-model: Add data-race capabilities to judgelitmus.sh Paul E. McKenney
2019-08-12 14:32 ` Akira Yokosawa
2019-08-12 18:06 ` Paul E. McKenney
2019-08-14 15:11 ` [PATCH 0/2] tools/memory-model: Update comment of jugdelitmus.sh Akira Yokosawa
2019-08-14 15:13 ` Subject: [PATCH 1/2] tools/memory-model: Reflect updated file name convention in judgelitmus.sh Akira Yokosawa
2019-08-14 15:16 ` [PATCH 2/2] tools/memory-model: Mention data-race capability in jugdelitmus.sh's header Akira Yokosawa
2019-08-14 23:24 ` [PATCH 0/2] tools/memory-model: Update comment of jugdelitmus.sh Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 28/31] tools/memory-model: Make judgelitmus.sh handle scripted Result: tag Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 29/31] tools/memory-model: Use "-unroll 0" to keep --hw runs finite Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 30/31] tools/memory-model: Use cumul-fence instead of fence in ->prop example Paul E. McKenney
2019-08-01 22:20 ` [PATCH RFC memory-model 31/31] tools/memory-model: Update the informal documentation 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=20190801222056.12144-8-paulmck@linux.ibm.com \
--to=paulmck@linux.ibm.com \
--cc=akiyks@gmail.com \
--cc=andrea.parri@amarulasolutions.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=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