1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0+ 3# 4# Reruns the C-language litmus tests previously run that match the 5# specified criteria, and compares the result to that of the previous 6# runs from initlitmushist.sh and/or newlitmushist.sh. 7# 8# sh checklitmushist.sh 9# 10# Run from the Linux kernel tools/memory-model directory. 11# See scripts/parseargs.sh for list of arguments. 12# 13# Copyright IBM Corporation, 2018 14# 15# Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com> 16 17. scripts/parseargs.sh 18 19T=/tmp/checklitmushist.sh.$$ 20trap 'rm -rf $T' 0 21mkdir $T 22 23if test -d litmus 24then 25 : 26else 27 echo Run scripts/initlitmushist.sh first, need litmus repo. 28 exit 1 29fi 30 31# Create the results directory and populate it with subdirectories. 32# The initial output is created here to avoid clobbering the output 33# generated earlier. 34mkdir $T/results 35find litmus -type d -print | ( cd $T/results; sed -e 's/^/mkdir -p /' | sh ) 36 37# Create the list of litmus tests already run, then remove those that 38# are excluded by this run's --procs argument. 39( cd $LKMM_DESTDIR; find litmus -name '*.litmus.out' -print ) | 40 sed -e 's/\.out$//' | 41 xargs -r grep -L "^P${LKMM_PROCS}"> $T/list-C-already 42xargs < $T/list-C-already -r grep -L "^P${LKMM_PROCS}" > $T/list-C-short 43 44# Redirect output, run tests, then restore destination directory. 45destdir="$LKMM_DESTDIR" 46LKMM_DESTDIR=$T/results; export LKMM_DESTDIR 47scripts/runlitmushist.sh < $T/list-C-short > $T/runlitmushist.sh.out 2>&1 48LKMM_DESTDIR="$destdir"; export LKMM_DESTDIR 49 50# Move the newly generated .litmus.out files to .litmus.out.new files 51# in the destination directory. 52cdir=`pwd` 53ddir=`awk -v c="$cdir" -v d="$LKMM_DESTDIR" \ 54 'END { if (d ~ /^\//) print d; else print c "/" d; }' < /dev/null` 55( cd $T/results; find litmus -type f -name '*.litmus.out' -print | 56 sed -e 's,^.*$,cp & '"$ddir"'/&.new,' | sh ) 57 58sed < $T/list-C-short -e 's,^,'"$LKMM_DESTDIR/"',' | 59 sh scripts/cmplitmushist.sh 60exit $? 61