cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

runlitmushist.sh (2085B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0+
      3#
      4# Runs the C-language litmus tests specified on standard input, using up
      5# to the specified number of CPUs (defaulting to all of them) and placing
      6# the results in the specified directory (defaulting to the same place
      7# the litmus test came from).
      8#
      9# sh runlitmushist.sh
     10#
     11# Run from the Linux kernel tools/memory-model directory.
     12# This script uses environment variables produced by parseargs.sh.
     13#
     14# Copyright IBM Corporation, 2018
     15#
     16# Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
     17
     18T=/tmp/runlitmushist.sh.$$
     19trap 'rm -rf $T' 0
     20mkdir $T
     21
     22if test -d litmus
     23then
     24	:
     25else
     26	echo Directory \"litmus\" missing, aborting run.
     27	exit 1
     28fi
     29
     30# Prefixes for per-CPU scripts
     31for ((i=0;i<$LKMM_JOBS;i++))
     32do
     33	echo dir="$LKMM_DESTDIR" > $T/$i.sh
     34	echo T=$T >> $T/$i.sh
     35	echo herdoptions=\"$LKMM_HERD_OPTIONS\" >> $T/$i.sh
     36	cat << '___EOF___' >> $T/$i.sh
     37	runtest () {
     38		echo ' ... ' /usr/bin/time $LKMM_TIMEOUT_CMD herd7 $herdoptions $1 '>' $dir/$1.out '2>&1'
     39		if /usr/bin/time $LKMM_TIMEOUT_CMD herd7 $herdoptions $1 > $dir/$1.out 2>&1
     40		then
     41			if ! grep -q '^Observation ' $dir/$1.out
     42			then
     43				echo ' !!! Herd failed, no Observation:' $1
     44			fi
     45		else
     46			exitcode=$?
     47			if test "$exitcode" -eq 124
     48			then
     49				exitmsg="timed out"
     50			else
     51				exitmsg="failed, exit code $exitcode"
     52			fi
     53			echo ' !!! Herd' ${exitmsg}: $1
     54		fi
     55	}
     56___EOF___
     57done
     58
     59awk -v q="'" -v b='\\' '
     60{
     61	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
     62}' | bash |
     63sort -k1n |
     64awk -v ncpu=$LKMM_JOBS -v t=$T '
     65{
     66	print "runtest " $2 >> t "/" NR % ncpu ".sh";
     67}
     68
     69END {
     70	for (i = 0; i < ncpu; i++) {
     71		print "sh " t "/" i ".sh > " t "/" i ".sh.out 2>&1 &";
     72		close(t "/" i ".sh");
     73	}
     74	print "wait";
     75}' | sh
     76cat $T/*.sh.out
     77if grep -q '!!!' $T/*.sh.out
     78then
     79	echo ' ---' Summary: 1>&2
     80	grep '!!!' $T/*.sh.out 1>&2
     81	nfail="`grep '!!!' $T/*.sh.out | wc -l`"
     82	echo 'Number of failed herd7 runs (e.g., timeout): ' $nfail 1>&2
     83	exit 1
     84else
     85	echo All runs completed successfully. 1>&2
     86	exit 0
     87fi