1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0+ 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Runs the C-language litmus tests having a maximum number of processes 5*4882a593Smuzhiyun# to run, defaults to 6. 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun# sh checkghlitmus.sh 8*4882a593Smuzhiyun# 9*4882a593Smuzhiyun# Run from the Linux kernel tools/memory-model directory. See the 10*4882a593Smuzhiyun# parseargs.sh scripts for arguments. 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun. scripts/parseargs.sh 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunT=/tmp/checkghlitmus.sh.$$ 15*4882a593Smuzhiyuntrap 'rm -rf $T' 0 16*4882a593Smuzhiyunmkdir $T 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun# Clone the repository if it is not already present. 19*4882a593Smuzhiyunif test -d litmus 20*4882a593Smuzhiyunthen 21*4882a593Smuzhiyun : 22*4882a593Smuzhiyunelse 23*4882a593Smuzhiyun git clone https://github.com/paulmckrcu/litmus 24*4882a593Smuzhiyun ( cd litmus; git checkout origin/master ) 25*4882a593Smuzhiyunfi 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun# Create any new directories that have appeared in the github litmus 28*4882a593Smuzhiyun# repo since the last run. 29*4882a593Smuzhiyunif test "$LKMM_DESTDIR" != "." 30*4882a593Smuzhiyunthen 31*4882a593Smuzhiyun find litmus -type d -print | 32*4882a593Smuzhiyun ( cd "$LKMM_DESTDIR"; sed -e 's/^/mkdir -p /' | sh ) 33*4882a593Smuzhiyunfi 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun# Create a list of the C-language litmus tests previously run. 36*4882a593Smuzhiyun( cd $LKMM_DESTDIR; find litmus -name '*.litmus.out' -print ) | 37*4882a593Smuzhiyun sed -e 's/\.out$//' | 38*4882a593Smuzhiyun xargs -r egrep -l '^ \* Result: (Never|Sometimes|Always|DEADLOCK)' | 39*4882a593Smuzhiyun xargs -r grep -L "^P${LKMM_PROCS}"> $T/list-C-already 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun# Create a list of C-language litmus tests with "Result:" commands and 42*4882a593Smuzhiyun# no more than the specified number of processes. 43*4882a593Smuzhiyunfind litmus -name '*.litmus' -exec grep -l -m 1 "^C " {} \; > $T/list-C 44*4882a593Smuzhiyunxargs < $T/list-C -r egrep -l '^ \* Result: (Never|Sometimes|Always|DEADLOCK)' > $T/list-C-result 45*4882a593Smuzhiyunxargs < $T/list-C-result -r grep -L "^P${LKMM_PROCS}" > $T/list-C-result-short 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun# Form list of tests without corresponding .litmus.out files 48*4882a593Smuzhiyunsort $T/list-C-already $T/list-C-result-short | uniq -u > $T/list-C-needed 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun# Run any needed tests. 51*4882a593Smuzhiyunif scripts/runlitmushist.sh < $T/list-C-needed > $T/run.stdout 2> $T/run.stderr 52*4882a593Smuzhiyunthen 53*4882a593Smuzhiyun errs= 54*4882a593Smuzhiyunelse 55*4882a593Smuzhiyun errs=1 56*4882a593Smuzhiyunfi 57*4882a593Smuzhiyun 58*4882a593Smuzhiyunsed < $T/list-C-result-short -e 's,^,scripts/judgelitmus.sh ,' | 59*4882a593Smuzhiyun sh > $T/judge.stdout 2> $T/judge.stderr 60*4882a593Smuzhiyun 61*4882a593Smuzhiyunif test -n "$errs" 62*4882a593Smuzhiyunthen 63*4882a593Smuzhiyun cat $T/run.stderr 1>&2 64*4882a593Smuzhiyunfi 65*4882a593Smuzhiyungrep '!!!' $T/judge.stdout 66