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

kvm-check-branches.sh (3538B)


      1#!/bin/sh
      2# SPDX-License-Identifier: GPL-2.0+
      3#
      4# Run a group of kvm.sh tests on the specified commits.  This currently
      5# unconditionally does three-minute runs on each scenario in CFLIST,
      6# taking advantage of all available CPUs and trusting the "make" utility.
      7# In the short term, adjustments can be made by editing this script and
      8# CFLIST.  If some adjustments appear to have ongoing value, this script
      9# might grow some command-line arguments.
     10#
     11# Usage: kvm-check-branches.sh commit1 commit2..commit3 commit4 ...
     12#
     13# This script considers its arguments one at a time.  If more elaborate
     14# specification of commits is needed, please use "git rev-list" to
     15# produce something that this simple script can understand.  The reason
     16# for retaining the simplicity is that it allows the user to more easily
     17# see which commit came from which branch.
     18#
     19# This script creates a yyyy.mm.dd-hh.mm.ss-group entry in the "res"
     20# directory.  The calls to kvm.sh create the usual entries, but this script
     21# moves them under the yyyy.mm.dd-hh.mm.ss-group entry, each in its own
     22# directory numbered in run order, that is, "0001", "0002", and so on.
     23# For successful runs, the large build artifacts are removed.  Doing this
     24# reduces the disk space required by about two orders of magnitude for
     25# successful runs.
     26#
     27# Copyright (C) Facebook, 2020
     28#
     29# Authors: Paul E. McKenney <paulmck@kernel.org>
     30
     31if ! git status > /dev/null 2>&1
     32then
     33	echo '!!!' This script needs to run in a git archive. 1>&2
     34	echo '!!!' Giving up. 1>&2
     35	exit 1
     36fi
     37
     38# Remember where we started so that we can get back and the end.
     39curcommit="`git status | head -1 | awk '{ print $NF }'`"
     40
     41nfail=0
     42ntry=0
     43resdir="tools/testing/selftests/rcutorture/res"
     44ds="`date +%Y.%m.%d-%H.%M.%S`-group"
     45if ! test -e $resdir
     46then
     47	mkdir $resdir || :
     48fi
     49mkdir $resdir/$ds
     50echo Results directory: $resdir/$ds
     51
     52RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
     53PATH=${RCUTORTURE}/bin:$PATH; export PATH
     54. functions.sh
     55echo Using all `identify_qemu_vcpus` CPUs.
     56
     57# Each pass through this loop does one command-line argument.
     58for gitbr in $@
     59do
     60	echo ' --- git branch ' $gitbr
     61
     62	# Each pass through this loop tests one commit.
     63	for i in `git rev-list "$gitbr"`
     64	do
     65		ntry=`expr $ntry + 1`
     66		idir=`awk -v ntry="$ntry" 'END { printf "%04d", ntry; }' < /dev/null`
     67		echo ' --- commit ' $i from branch $gitbr
     68		date
     69		mkdir $resdir/$ds/$idir
     70		echo $gitbr > $resdir/$ds/$idir/gitbr
     71		echo $i >> $resdir/$ds/$idir/gitbr
     72
     73		# Test the specified commit.
     74		git checkout $i > $resdir/$ds/$idir/git-checkout.out 2>&1
     75		echo git checkout return code: $? "(Commit $ntry: $i)"
     76		kvm.sh --allcpus --duration 3 --trust-make > $resdir/$ds/$idir/kvm.sh.out 2>&1
     77		ret=$?
     78		echo kvm.sh return code $ret for commit $i from branch $gitbr
     79
     80		# Move the build products to their resting place.
     81		runresdir="`grep -m 1 '^Results directory:' < $resdir/$ds/$idir/kvm.sh.out | sed -e 's/^Results directory://'`"
     82		mv $runresdir $resdir/$ds/$idir
     83		rrd="`echo $runresdir | sed -e 's,^.*/,,'`"
     84		echo Run results: $resdir/$ds/$idir/$rrd
     85		if test "$ret" -ne 0
     86		then
     87			# Failure, so leave all evidence intact.
     88			nfail=`expr $nfail + 1`
     89		else
     90			# Success, so remove large files to save about 1GB.
     91			( cd $resdir/$ds/$idir/$rrd; rm -f */vmlinux */bzImage */System.map */Module.symvers )
     92		fi
     93	done
     94done
     95date
     96
     97# Go back to the original commit.
     98git checkout "$curcommit"
     99
    100if test $nfail -ne 0
    101then
    102	echo '!!! ' $nfail failures in $ntry 'runs!!!'
    103	exit 1
    104else
    105	echo No failures in $ntry runs.
    106	exit 0
    107fi