1b02eb5b0SPaul E. McKenney#!/bin/sh 2b02eb5b0SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+ 3b02eb5b0SPaul E. McKenney# 4*a4deb29aSPaul E. McKenney# Parse arguments common to the various scripts. 5b02eb5b0SPaul E. McKenney# 6b02eb5b0SPaul E. McKenney# . scripts/parseargs.sh 7b02eb5b0SPaul E. McKenney# 8b02eb5b0SPaul E. McKenney# Include into other Linux kernel tools/memory-model scripts. 9b02eb5b0SPaul E. McKenney# 10b02eb5b0SPaul E. McKenney# Copyright IBM Corporation, 2018 11b02eb5b0SPaul E. McKenney# 1261f615ccSPaul E. McKenney# Author: Paul E. McKenney <[email protected]> 13b02eb5b0SPaul E. McKenney 14b02eb5b0SPaul E. McKenneyT=/tmp/parseargs.sh.$$ 15b02eb5b0SPaul E. McKenneymkdir $T 16b02eb5b0SPaul E. McKenney 17b02eb5b0SPaul E. McKenney# Initialize one parameter: initparam name default 18b02eb5b0SPaul E. McKenneyinitparam () { 19b02eb5b0SPaul E. McKenney echo if test -z '"$'$1'"' > $T/s 20b02eb5b0SPaul E. McKenney echo then >> $T/s 21b02eb5b0SPaul E. McKenney echo $1='"'$2'"' >> $T/s 22b02eb5b0SPaul E. McKenney echo export $1 >> $T/s 23b02eb5b0SPaul E. McKenney echo fi >> $T/s 24b02eb5b0SPaul E. McKenney echo $1_DEF='$'$1 >> $T/s 25b02eb5b0SPaul E. McKenney . $T/s 26b02eb5b0SPaul E. McKenney} 27b02eb5b0SPaul E. McKenney 28b02eb5b0SPaul E. McKenneyinitparam LKMM_DESTDIR "." 29b02eb5b0SPaul E. McKenneyinitparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg" 30b1710979SPaul E. McKenneyinitparam LKMM_HW_MAP_FILE "" 31b02eb5b0SPaul E. McKenneyinitparam LKMM_JOBS `getconf _NPROCESSORS_ONLN` 32b02eb5b0SPaul E. McKenneyinitparam LKMM_PROCS "3" 33b02eb5b0SPaul E. McKenneyinitparam LKMM_TIMEOUT "1m" 34b02eb5b0SPaul E. McKenney 35b02eb5b0SPaul E. McKenneyscriptname=$0 36b02eb5b0SPaul E. McKenney 37b02eb5b0SPaul E. McKenneyusagehelp () { 38b02eb5b0SPaul E. McKenney echo "Usage $scriptname [ arguments ]" 39b02eb5b0SPaul E. McKenney echo " --destdir path (place for .litmus.out, default by .litmus)" 40b02eb5b0SPaul E. McKenney echo " --herdopts -conf linux-kernel.cfg ..." 41b1710979SPaul E. McKenney echo " --hw AArch64" 42b02eb5b0SPaul E. McKenney echo " --jobs N (number of jobs, default one per CPU)" 43b02eb5b0SPaul E. McKenney echo " --procs N (litmus tests with at most this many processes)" 44b02eb5b0SPaul E. McKenney echo " --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')" 45b1710979SPaul E. McKenney echo "Defaults: --destdir '$LKMM_DESTDIR_DEF' --herdopts '$LKMM_HERD_OPTIONS_DEF' --hw '$LKMM_HW_MAP_FILE' --jobs '$LKMM_JOBS_DEF' --procs '$LKMM_PROCS_DEF' --timeout '$LKMM_TIMEOUT_DEF'" 46b02eb5b0SPaul E. McKenney exit 1 47b02eb5b0SPaul E. McKenney} 48b02eb5b0SPaul E. McKenney 49b02eb5b0SPaul E. McKenneyusage () { 50b02eb5b0SPaul E. McKenney usagehelp 1>&2 51b02eb5b0SPaul E. McKenney} 52b02eb5b0SPaul E. McKenney 53b02eb5b0SPaul E. McKenney# checkarg --argname argtype $# arg mustmatch cannotmatch 54b02eb5b0SPaul E. McKenneycheckarg () { 55b02eb5b0SPaul E. McKenney if test $3 -le 1 56b02eb5b0SPaul E. McKenney then 57b02eb5b0SPaul E. McKenney echo $1 needs argument $2 matching \"$5\" 58b02eb5b0SPaul E. McKenney usage 59b02eb5b0SPaul E. McKenney fi 60b02eb5b0SPaul E. McKenney if echo "$4" | grep -q -e "$5" 61b02eb5b0SPaul E. McKenney then 62b02eb5b0SPaul E. McKenney : 63b02eb5b0SPaul E. McKenney else 64b02eb5b0SPaul E. McKenney echo $1 $2 \"$4\" must match \"$5\" 65b02eb5b0SPaul E. McKenney usage 66b02eb5b0SPaul E. McKenney fi 67b02eb5b0SPaul E. McKenney if echo "$4" | grep -q -e "$6" 68b02eb5b0SPaul E. McKenney then 69b02eb5b0SPaul E. McKenney echo $1 $2 \"$4\" must not match \"$6\" 70b02eb5b0SPaul E. McKenney usage 71b02eb5b0SPaul E. McKenney fi 72b02eb5b0SPaul E. McKenney} 73b02eb5b0SPaul E. McKenney 74b02eb5b0SPaul E. McKenneywhile test $# -gt 0 75b02eb5b0SPaul E. McKenneydo 76b02eb5b0SPaul E. McKenney case "$1" in 77b02eb5b0SPaul E. McKenney --destdir) 78b02eb5b0SPaul E. McKenney checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--' 79b02eb5b0SPaul E. McKenney LKMM_DESTDIR="$2" 80b02eb5b0SPaul E. McKenney mkdir $LKMM_DESTDIR > /dev/null 2>&1 81b02eb5b0SPaul E. McKenney if ! test -e "$LKMM_DESTDIR" 82b02eb5b0SPaul E. McKenney then 83b02eb5b0SPaul E. McKenney echo "Cannot create directory --destdir '$LKMM_DESTDIR'" 84b02eb5b0SPaul E. McKenney usage 85b02eb5b0SPaul E. McKenney fi 868b99521fSPaul E. McKenney if test -d "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR" 87b02eb5b0SPaul E. McKenney then 88b02eb5b0SPaul E. McKenney : 89b02eb5b0SPaul E. McKenney else 90b02eb5b0SPaul E. McKenney echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files" 91b02eb5b0SPaul E. McKenney usage 92b02eb5b0SPaul E. McKenney fi 93b02eb5b0SPaul E. McKenney shift 94b02eb5b0SPaul E. McKenney ;; 95b02eb5b0SPaul E. McKenney --herdopts|--herdopt) 9637c600a3SAndrea Parri checkarg --destdir "(herd7 options)" "$#" "$2" '.*' '^--' 97b02eb5b0SPaul E. McKenney LKMM_HERD_OPTIONS="$2" 98b02eb5b0SPaul E. McKenney shift 99b02eb5b0SPaul E. McKenney ;; 100b1710979SPaul E. McKenney --hw) 101b1710979SPaul E. McKenney checkarg --hw "(.map file architecture name)" "$#" "$2" '^[A-Za-z0-9_-]\+' '^--' 102b1710979SPaul E. McKenney LKMM_HW_MAP_FILE="$2" 103b1710979SPaul E. McKenney shift 104b1710979SPaul E. McKenney ;; 105910cc959SPaul E. McKenney -j[1-9]*) 106910cc959SPaul E. McKenney njobs="`echo $1 | sed -e 's/^-j//'`" 107910cc959SPaul E. McKenney trailchars="`echo $njobs | sed -e 's/[0-9]\+\(.*\)$/\1/'`" 108910cc959SPaul E. McKenney if test -n "$trailchars" 109910cc959SPaul E. McKenney then 110910cc959SPaul E. McKenney echo $1 trailing characters "'$trailchars'" 111910cc959SPaul E. McKenney usagehelp 112910cc959SPaul E. McKenney fi 113910cc959SPaul E. McKenney LKMM_JOBS="`echo $njobs | sed -e 's/^\([0-9]\+\).*$/\1/'`" 114910cc959SPaul E. McKenney ;; 115910cc959SPaul E. McKenney --jobs|--job|-j) 1166e6586b0SPaul E. McKenney checkarg --jobs "(number)" "$#" "$2" '^[1-9][0-9]*$' '^--' 117b02eb5b0SPaul E. McKenney LKMM_JOBS="$2" 118b02eb5b0SPaul E. McKenney shift 119b02eb5b0SPaul E. McKenney ;; 120b02eb5b0SPaul E. McKenney --procs|--proc) 121b02eb5b0SPaul E. McKenney checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--' 122b02eb5b0SPaul E. McKenney LKMM_PROCS="$2" 123b02eb5b0SPaul E. McKenney shift 124b02eb5b0SPaul E. McKenney ;; 125b02eb5b0SPaul E. McKenney --timeout) 126b02eb5b0SPaul E. McKenney checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--' 127b02eb5b0SPaul E. McKenney LKMM_TIMEOUT="$2" 128b02eb5b0SPaul E. McKenney shift 129b02eb5b0SPaul E. McKenney ;; 1308b99521fSPaul E. McKenney --) 1318b99521fSPaul E. McKenney shift 1328b99521fSPaul E. McKenney break 1338b99521fSPaul E. McKenney ;; 134b02eb5b0SPaul E. McKenney *) 135b02eb5b0SPaul E. McKenney echo Unknown argument $1 136b02eb5b0SPaul E. McKenney usage 137b02eb5b0SPaul E. McKenney ;; 138b02eb5b0SPaul E. McKenney esac 139b02eb5b0SPaul E. McKenney shift 140b02eb5b0SPaul E. McKenneydone 141b02eb5b0SPaul E. McKenneyif test -z "$LKMM_TIMEOUT" 142b02eb5b0SPaul E. McKenneythen 143b02eb5b0SPaul E. McKenney LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD 144b02eb5b0SPaul E. McKenneyelse 145b02eb5b0SPaul E. McKenney LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD 146b02eb5b0SPaul E. McKenneyfi 147b02eb5b0SPaul E. McKenneyrm -rf $T 148