18c2ecf20Sopenharmony_ci#!/bin/sh
28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+
38c2ecf20Sopenharmony_ci#
48c2ecf20Sopenharmony_ci# the corresponding .litmus.out file, and does not judge the result.
58c2ecf20Sopenharmony_ci#
68c2ecf20Sopenharmony_ci# . scripts/parseargs.sh
78c2ecf20Sopenharmony_ci#
88c2ecf20Sopenharmony_ci# Include into other Linux kernel tools/memory-model scripts.
98c2ecf20Sopenharmony_ci#
108c2ecf20Sopenharmony_ci# Copyright IBM Corporation, 2018
118c2ecf20Sopenharmony_ci#
128c2ecf20Sopenharmony_ci# Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ciT=/tmp/parseargs.sh.$$
158c2ecf20Sopenharmony_cimkdir $T
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci# Initialize one parameter: initparam name default
188c2ecf20Sopenharmony_ciinitparam () {
198c2ecf20Sopenharmony_ci	echo if test -z '"$'$1'"' > $T/s
208c2ecf20Sopenharmony_ci	echo then >> $T/s
218c2ecf20Sopenharmony_ci	echo	$1='"'$2'"' >> $T/s
228c2ecf20Sopenharmony_ci	echo	export $1 >> $T/s
238c2ecf20Sopenharmony_ci	echo fi >> $T/s
248c2ecf20Sopenharmony_ci	echo $1_DEF='$'$1  >> $T/s
258c2ecf20Sopenharmony_ci	. $T/s
268c2ecf20Sopenharmony_ci}
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ciinitparam LKMM_DESTDIR "."
298c2ecf20Sopenharmony_ciinitparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg"
308c2ecf20Sopenharmony_ciinitparam LKMM_JOBS `getconf _NPROCESSORS_ONLN`
318c2ecf20Sopenharmony_ciinitparam LKMM_PROCS "3"
328c2ecf20Sopenharmony_ciinitparam LKMM_TIMEOUT "1m"
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciscriptname=$0
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ciusagehelp () {
378c2ecf20Sopenharmony_ci	echo "Usage $scriptname [ arguments ]"
388c2ecf20Sopenharmony_ci	echo "      --destdir path (place for .litmus.out, default by .litmus)"
398c2ecf20Sopenharmony_ci	echo "      --herdopts -conf linux-kernel.cfg ..."
408c2ecf20Sopenharmony_ci	echo "      --jobs N (number of jobs, default one per CPU)"
418c2ecf20Sopenharmony_ci	echo "      --procs N (litmus tests with at most this many processes)"
428c2ecf20Sopenharmony_ci	echo "      --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')"
438c2ecf20Sopenharmony_ci	echo "Defaults: --destdir '$LKMM_DESTDIR_DEF' --herdopts '$LKMM_HERD_OPTIONS_DEF' --jobs '$LKMM_JOBS_DEF' --procs '$LKMM_PROCS_DEF' --timeout '$LKMM_TIMEOUT_DEF'"
448c2ecf20Sopenharmony_ci	exit 1
458c2ecf20Sopenharmony_ci}
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ciusage () {
488c2ecf20Sopenharmony_ci	usagehelp 1>&2
498c2ecf20Sopenharmony_ci}
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci# checkarg --argname argtype $# arg mustmatch cannotmatch
528c2ecf20Sopenharmony_cicheckarg () {
538c2ecf20Sopenharmony_ci	if test $3 -le 1
548c2ecf20Sopenharmony_ci	then
558c2ecf20Sopenharmony_ci		echo $1 needs argument $2 matching \"$5\"
568c2ecf20Sopenharmony_ci		usage
578c2ecf20Sopenharmony_ci	fi
588c2ecf20Sopenharmony_ci	if echo "$4" | grep -q -e "$5"
598c2ecf20Sopenharmony_ci	then
608c2ecf20Sopenharmony_ci		:
618c2ecf20Sopenharmony_ci	else
628c2ecf20Sopenharmony_ci		echo $1 $2 \"$4\" must match \"$5\"
638c2ecf20Sopenharmony_ci		usage
648c2ecf20Sopenharmony_ci	fi
658c2ecf20Sopenharmony_ci	if echo "$4" | grep -q -e "$6"
668c2ecf20Sopenharmony_ci	then
678c2ecf20Sopenharmony_ci		echo $1 $2 \"$4\" must not match \"$6\"
688c2ecf20Sopenharmony_ci		usage
698c2ecf20Sopenharmony_ci	fi
708c2ecf20Sopenharmony_ci}
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ciwhile test $# -gt 0
738c2ecf20Sopenharmony_cido
748c2ecf20Sopenharmony_ci	case "$1" in
758c2ecf20Sopenharmony_ci	--destdir)
768c2ecf20Sopenharmony_ci		checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--'
778c2ecf20Sopenharmony_ci		LKMM_DESTDIR="$2"
788c2ecf20Sopenharmony_ci		mkdir $LKMM_DESTDIR > /dev/null 2>&1
798c2ecf20Sopenharmony_ci		if ! test -e "$LKMM_DESTDIR"
808c2ecf20Sopenharmony_ci		then
818c2ecf20Sopenharmony_ci			echo "Cannot create directory --destdir '$LKMM_DESTDIR'"
828c2ecf20Sopenharmony_ci			usage
838c2ecf20Sopenharmony_ci		fi
848c2ecf20Sopenharmony_ci		if test -d "$LKMM_DESTDIR" -a -w "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR"
858c2ecf20Sopenharmony_ci		then
868c2ecf20Sopenharmony_ci			:
878c2ecf20Sopenharmony_ci		else
888c2ecf20Sopenharmony_ci			echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files"
898c2ecf20Sopenharmony_ci			usage
908c2ecf20Sopenharmony_ci		fi
918c2ecf20Sopenharmony_ci		shift
928c2ecf20Sopenharmony_ci		;;
938c2ecf20Sopenharmony_ci	--herdopts|--herdopt)
948c2ecf20Sopenharmony_ci		checkarg --destdir "(herd7 options)" "$#" "$2" '.*' '^--'
958c2ecf20Sopenharmony_ci		LKMM_HERD_OPTIONS="$2"
968c2ecf20Sopenharmony_ci		shift
978c2ecf20Sopenharmony_ci		;;
988c2ecf20Sopenharmony_ci	-j[1-9]*)
998c2ecf20Sopenharmony_ci		njobs="`echo $1 | sed -e 's/^-j//'`"
1008c2ecf20Sopenharmony_ci		trailchars="`echo $njobs | sed -e 's/[0-9]\+\(.*\)$/\1/'`"
1018c2ecf20Sopenharmony_ci		if test -n "$trailchars"
1028c2ecf20Sopenharmony_ci		then
1038c2ecf20Sopenharmony_ci			echo $1 trailing characters "'$trailchars'"
1048c2ecf20Sopenharmony_ci			usagehelp
1058c2ecf20Sopenharmony_ci		fi
1068c2ecf20Sopenharmony_ci		LKMM_JOBS="`echo $njobs | sed -e 's/^\([0-9]\+\).*$/\1/'`"
1078c2ecf20Sopenharmony_ci		;;
1088c2ecf20Sopenharmony_ci	--jobs|--job|-j)
1098c2ecf20Sopenharmony_ci		checkarg --jobs "(number)" "$#" "$2" '^[1-9][0-9]\+$' '^--'
1108c2ecf20Sopenharmony_ci		LKMM_JOBS="$2"
1118c2ecf20Sopenharmony_ci		shift
1128c2ecf20Sopenharmony_ci		;;
1138c2ecf20Sopenharmony_ci	--procs|--proc)
1148c2ecf20Sopenharmony_ci		checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--'
1158c2ecf20Sopenharmony_ci		LKMM_PROCS="$2"
1168c2ecf20Sopenharmony_ci		shift
1178c2ecf20Sopenharmony_ci		;;
1188c2ecf20Sopenharmony_ci	--timeout)
1198c2ecf20Sopenharmony_ci		checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--'
1208c2ecf20Sopenharmony_ci		LKMM_TIMEOUT="$2"
1218c2ecf20Sopenharmony_ci		shift
1228c2ecf20Sopenharmony_ci		;;
1238c2ecf20Sopenharmony_ci	*)
1248c2ecf20Sopenharmony_ci		echo Unknown argument $1
1258c2ecf20Sopenharmony_ci		usage
1268c2ecf20Sopenharmony_ci		;;
1278c2ecf20Sopenharmony_ci	esac
1288c2ecf20Sopenharmony_ci	shift
1298c2ecf20Sopenharmony_cidone
1308c2ecf20Sopenharmony_ciif test -z "$LKMM_TIMEOUT"
1318c2ecf20Sopenharmony_cithen
1328c2ecf20Sopenharmony_ci	LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD
1338c2ecf20Sopenharmony_cielse
1348c2ecf20Sopenharmony_ci	LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD
1358c2ecf20Sopenharmony_cifi
1368c2ecf20Sopenharmony_cirm -rf $T
137