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