162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+ 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Runs the C-language litmus tests specified on standard input, using up 562306a36Sopenharmony_ci# to the specified number of CPUs (defaulting to all of them) and placing 662306a36Sopenharmony_ci# the results in the specified directory (defaulting to the same place 762306a36Sopenharmony_ci# the litmus test came from). 862306a36Sopenharmony_ci# 962306a36Sopenharmony_ci# sh runlitmushist.sh 1062306a36Sopenharmony_ci# 1162306a36Sopenharmony_ci# Run from the Linux kernel tools/memory-model directory. 1262306a36Sopenharmony_ci# This script uses environment variables produced by parseargs.sh. 1362306a36Sopenharmony_ci# 1462306a36Sopenharmony_ci# Copyright IBM Corporation, 2018 1562306a36Sopenharmony_ci# 1662306a36Sopenharmony_ci# Author: Paul E. McKenney <paulmck@linux.ibm.com> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci. scripts/hwfnseg.sh 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciT=/tmp/runlitmushist.sh.$$ 2162306a36Sopenharmony_citrap 'rm -rf $T' 0 2262306a36Sopenharmony_cimkdir $T 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciif test -d litmus 2562306a36Sopenharmony_cithen 2662306a36Sopenharmony_ci : 2762306a36Sopenharmony_cielse 2862306a36Sopenharmony_ci echo Directory \"litmus\" missing, aborting run. 2962306a36Sopenharmony_ci exit 1 3062306a36Sopenharmony_cifi 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci# Prefixes for per-CPU scripts 3362306a36Sopenharmony_cifor ((i=0;i<$LKMM_JOBS;i++)) 3462306a36Sopenharmony_cido 3562306a36Sopenharmony_ci echo T=$T >> $T/$i.sh 3662306a36Sopenharmony_ci cat << '___EOF___' >> $T/$i.sh 3762306a36Sopenharmony_ci runtest () { 3862306a36Sopenharmony_ci if scripts/runlitmus.sh $1 3962306a36Sopenharmony_ci then 4062306a36Sopenharmony_ci if ! grep -q '^Observation ' $LKMM_DESTDIR/$1$2.out 4162306a36Sopenharmony_ci then 4262306a36Sopenharmony_ci echo ' !!! Herd failed, no Observation:' $1 4362306a36Sopenharmony_ci fi 4462306a36Sopenharmony_ci else 4562306a36Sopenharmony_ci exitcode=$? 4662306a36Sopenharmony_ci if test "$exitcode" -eq 124 4762306a36Sopenharmony_ci then 4862306a36Sopenharmony_ci exitmsg="timed out" 4962306a36Sopenharmony_ci elif test "$exitcode" -eq 253 5062306a36Sopenharmony_ci then 5162306a36Sopenharmony_ci exitmsg= 5262306a36Sopenharmony_ci else 5362306a36Sopenharmony_ci exitmsg="failed, exit code $exitcode" 5462306a36Sopenharmony_ci fi 5562306a36Sopenharmony_ci if test -n "$exitmsg" 5662306a36Sopenharmony_ci then 5762306a36Sopenharmony_ci echo ' !!! Herd' ${exitmsg}: $1 5862306a36Sopenharmony_ci fi 5962306a36Sopenharmony_ci fi 6062306a36Sopenharmony_ci } 6162306a36Sopenharmony_ci___EOF___ 6262306a36Sopenharmony_cidone 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ciawk -v q="'" -v b='\\' ' 6562306a36Sopenharmony_ci{ 6662306a36Sopenharmony_ci 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 6762306a36Sopenharmony_ci}' | sh | sort -k1n | 6862306a36Sopenharmony_ciawk -v dq='"' -v hwfnseg="$hwfnseg" -v ncpu="$LKMM_JOBS" -v t="$T" ' 6962306a36Sopenharmony_ci{ 7062306a36Sopenharmony_ci print "if test -z " dq hwfnseg dq " || scripts/simpletest.sh " dq $2 dq 7162306a36Sopenharmony_ci print "then" 7262306a36Sopenharmony_ci print "\techo runtest " dq $2 dq " " hwfnseg " >> " t "/" NR % ncpu ".sh"; 7362306a36Sopenharmony_ci print "fi" 7462306a36Sopenharmony_ci} 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ciEND { 7762306a36Sopenharmony_ci for (i = 0; i < ncpu; i++) { 7862306a36Sopenharmony_ci print "sh " t "/" i ".sh > " t "/" i ".sh.out 2>&1 &"; 7962306a36Sopenharmony_ci close(t "/" i ".sh"); 8062306a36Sopenharmony_ci } 8162306a36Sopenharmony_ci print "wait"; 8262306a36Sopenharmony_ci}' | sh 8362306a36Sopenharmony_cicat $T/*.sh.out 8462306a36Sopenharmony_ciif grep -q '!!!' $T/*.sh.out 8562306a36Sopenharmony_cithen 8662306a36Sopenharmony_ci echo ' ---' Summary: 1>&2 8762306a36Sopenharmony_ci grep '!!!' $T/*.sh.out 1>&2 8862306a36Sopenharmony_ci nfail="`grep '!!!' $T/*.sh.out | wc -l`" 8962306a36Sopenharmony_ci echo 'Number of failed herd7 runs (e.g., timeout): ' $nfail 1>&2 9062306a36Sopenharmony_ci exit 1 9162306a36Sopenharmony_cielse 9262306a36Sopenharmony_ci echo All runs completed successfully. 1>&2 9362306a36Sopenharmony_ci exit 0 9462306a36Sopenharmony_cifi 95