xref: /openbmc/linux/tools/memory-model/scripts/runlitmushist.sh (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1b02eb5b0SPaul E. McKenney#!/bin/bash
2b02eb5b0SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+
3b02eb5b0SPaul E. McKenney#
4b02eb5b0SPaul E. McKenney# Runs the C-language litmus tests specified on standard input, using up
5b02eb5b0SPaul E. McKenney# to the specified number of CPUs (defaulting to all of them) and placing
6b02eb5b0SPaul E. McKenney# the results in the specified directory (defaulting to the same place
7b02eb5b0SPaul E. McKenney# the litmus test came from).
8b02eb5b0SPaul E. McKenney#
9b02eb5b0SPaul E. McKenney# sh runlitmushist.sh
10b02eb5b0SPaul E. McKenney#
11b02eb5b0SPaul E. McKenney# Run from the Linux kernel tools/memory-model directory.
12b02eb5b0SPaul E. McKenney# This script uses environment variables produced by parseargs.sh.
13b02eb5b0SPaul E. McKenney#
14b02eb5b0SPaul E. McKenney# Copyright IBM Corporation, 2018
15b02eb5b0SPaul E. McKenney#
1661f615ccSPaul E. McKenney# Author: Paul E. McKenney <paulmck@linux.ibm.com>
17b02eb5b0SPaul E. McKenney
18*69d476c5SPaul E. McKenney. scripts/hwfnseg.sh
19*69d476c5SPaul E. McKenney
20b02eb5b0SPaul E. McKenneyT=/tmp/runlitmushist.sh.$$
21b02eb5b0SPaul E. McKenneytrap 'rm -rf $T' 0
22b02eb5b0SPaul E. McKenneymkdir $T
23b02eb5b0SPaul E. McKenney
24b02eb5b0SPaul E. McKenneyif test -d litmus
25b02eb5b0SPaul E. McKenneythen
26b02eb5b0SPaul E. McKenney	:
27b02eb5b0SPaul E. McKenneyelse
28b02eb5b0SPaul E. McKenney	echo Directory \"litmus\" missing, aborting run.
29b02eb5b0SPaul E. McKenney	exit 1
30b02eb5b0SPaul E. McKenneyfi
31b02eb5b0SPaul E. McKenney
32b02eb5b0SPaul E. McKenney# Prefixes for per-CPU scripts
33b02eb5b0SPaul E. McKenneyfor ((i=0;i<$LKMM_JOBS;i++))
34b02eb5b0SPaul E. McKenneydo
35b02eb5b0SPaul E. McKenney	echo T=$T >> $T/$i.sh
36b02eb5b0SPaul E. McKenney	cat << '___EOF___' >> $T/$i.sh
37b02eb5b0SPaul E. McKenney	runtest () {
38*69d476c5SPaul E. McKenney		if scripts/runlitmus.sh $1
39b02eb5b0SPaul E. McKenney		then
40*69d476c5SPaul E. McKenney			if ! grep -q '^Observation ' $LKMM_DESTDIR/$1$2.out
41b02eb5b0SPaul E. McKenney			then
42b02eb5b0SPaul E. McKenney				echo ' !!! Herd failed, no Observation:' $1
43b02eb5b0SPaul E. McKenney			fi
44b02eb5b0SPaul E. McKenney		else
45b02eb5b0SPaul E. McKenney			exitcode=$?
46b02eb5b0SPaul E. McKenney			if test "$exitcode" -eq 124
47b02eb5b0SPaul E. McKenney			then
48b02eb5b0SPaul E. McKenney				exitmsg="timed out"
49*69d476c5SPaul E. McKenney			elif test "$exitcode" -eq 253
50*69d476c5SPaul E. McKenney			then
51*69d476c5SPaul E. McKenney				exitmsg=
52b02eb5b0SPaul E. McKenney			else
53b02eb5b0SPaul E. McKenney				exitmsg="failed, exit code $exitcode"
54b02eb5b0SPaul E. McKenney			fi
55*69d476c5SPaul E. McKenney			if test -n "$exitmsg"
56*69d476c5SPaul E. McKenney			then
57b02eb5b0SPaul E. McKenney				echo ' !!! Herd' ${exitmsg}: $1
58b02eb5b0SPaul E. McKenney			fi
59*69d476c5SPaul E. McKenney		fi
60b02eb5b0SPaul E. McKenney	}
61b02eb5b0SPaul E. McKenney___EOF___
62b02eb5b0SPaul E. McKenneydone
63b02eb5b0SPaul E. McKenney
64b02eb5b0SPaul E. McKenneyawk -v q="'" -v b='\\' '
65b02eb5b0SPaul E. McKenney{
66b02eb5b0SPaul E. McKenney	print "echo `grep " q "^P[0-9]" b "+(" q " " $0 " | tail -1 | sed -e " q "s/^P" b "([0-9]" b "+" b ")(.*$/" b "1/" q "` " $0
67*69d476c5SPaul E. McKenney}' | sh | sort -k1n |
68*69d476c5SPaul E. McKenneyawk -v dq='"' -v hwfnseg="$hwfnseg" -v ncpu="$LKMM_JOBS" -v t="$T" '
69b02eb5b0SPaul E. McKenney{
70*69d476c5SPaul E. McKenney	print "if test -z " dq hwfnseg dq " || scripts/simpletest.sh " dq $2 dq
71*69d476c5SPaul E. McKenney	print "then"
72*69d476c5SPaul E. McKenney	print "\techo runtest " dq $2 dq " " hwfnseg " >> " t "/" NR % ncpu ".sh";
73*69d476c5SPaul E. McKenney	print "fi"
74b02eb5b0SPaul E. McKenney}
75b02eb5b0SPaul E. McKenney
76b02eb5b0SPaul E. McKenneyEND {
77b02eb5b0SPaul E. McKenney	for (i = 0; i < ncpu; i++) {
78b02eb5b0SPaul E. McKenney		print "sh " t "/" i ".sh > " t "/" i ".sh.out 2>&1 &";
79b02eb5b0SPaul E. McKenney		close(t "/" i ".sh");
80b02eb5b0SPaul E. McKenney	}
81b02eb5b0SPaul E. McKenney	print "wait";
82b02eb5b0SPaul E. McKenney}' | sh
83b02eb5b0SPaul E. McKenneycat $T/*.sh.out
84b02eb5b0SPaul E. McKenneyif grep -q '!!!' $T/*.sh.out
85b02eb5b0SPaul E. McKenneythen
86b02eb5b0SPaul E. McKenney	echo ' ---' Summary: 1>&2
87b02eb5b0SPaul E. McKenney	grep '!!!' $T/*.sh.out 1>&2
88b02eb5b0SPaul E. McKenney	nfail="`grep '!!!' $T/*.sh.out | wc -l`"
8937c600a3SAndrea Parri	echo 'Number of failed herd7 runs (e.g., timeout): ' $nfail 1>&2
90b02eb5b0SPaul E. McKenney	exit 1
91b02eb5b0SPaul E. McKenneyelse
92b02eb5b0SPaul E. McKenney	echo All runs completed successfully. 1>&2
93b02eb5b0SPaul E. McKenney	exit 0
94b02eb5b0SPaul E. McKenneyfi
95