1*b02eb5b0SPaul E. McKenney#!/bin/sh 2*b02eb5b0SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+ 3*b02eb5b0SPaul E. McKenney# 4*b02eb5b0SPaul E. McKenney# the corresponding .litmus.out file, and does not judge the result. 5*b02eb5b0SPaul E. McKenney# 6*b02eb5b0SPaul E. McKenney# . scripts/parseargs.sh 7*b02eb5b0SPaul E. McKenney# 8*b02eb5b0SPaul E. McKenney# Include into other Linux kernel tools/memory-model scripts. 9*b02eb5b0SPaul E. McKenney# 10*b02eb5b0SPaul E. McKenney# Copyright IBM Corporation, 2018 11*b02eb5b0SPaul E. McKenney# 12*b02eb5b0SPaul E. McKenney# Author: Paul E. McKenney <[email protected]> 13*b02eb5b0SPaul E. McKenney 14*b02eb5b0SPaul E. McKenneyT=/tmp/parseargs.sh.$$ 15*b02eb5b0SPaul E. McKenneymkdir $T 16*b02eb5b0SPaul E. McKenney 17*b02eb5b0SPaul E. McKenney# Initialize one parameter: initparam name default 18*b02eb5b0SPaul E. McKenneyinitparam () { 19*b02eb5b0SPaul E. McKenney echo if test -z '"$'$1'"' > $T/s 20*b02eb5b0SPaul E. McKenney echo then >> $T/s 21*b02eb5b0SPaul E. McKenney echo $1='"'$2'"' >> $T/s 22*b02eb5b0SPaul E. McKenney echo export $1 >> $T/s 23*b02eb5b0SPaul E. McKenney echo fi >> $T/s 24*b02eb5b0SPaul E. McKenney echo $1_DEF='$'$1 >> $T/s 25*b02eb5b0SPaul E. McKenney . $T/s 26*b02eb5b0SPaul E. McKenney} 27*b02eb5b0SPaul E. McKenney 28*b02eb5b0SPaul E. McKenneyinitparam LKMM_DESTDIR "." 29*b02eb5b0SPaul E. McKenneyinitparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg" 30*b02eb5b0SPaul E. McKenneyinitparam LKMM_JOBS `getconf _NPROCESSORS_ONLN` 31*b02eb5b0SPaul E. McKenneyinitparam LKMM_PROCS "3" 32*b02eb5b0SPaul E. McKenneyinitparam LKMM_TIMEOUT "1m" 33*b02eb5b0SPaul E. McKenney 34*b02eb5b0SPaul E. McKenneyscriptname=$0 35*b02eb5b0SPaul E. McKenney 36*b02eb5b0SPaul E. McKenneyusagehelp () { 37*b02eb5b0SPaul E. McKenney echo "Usage $scriptname [ arguments ]" 38*b02eb5b0SPaul E. McKenney echo " --destdir path (place for .litmus.out, default by .litmus)" 39*b02eb5b0SPaul E. McKenney echo " --herdopts -conf linux-kernel.cfg ..." 40*b02eb5b0SPaul E. McKenney echo " --jobs N (number of jobs, default one per CPU)" 41*b02eb5b0SPaul E. McKenney echo " --procs N (litmus tests with at most this many processes)" 42*b02eb5b0SPaul E. McKenney echo " --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')" 43*b02eb5b0SPaul E. McKenney echo "Defaults: --destdir '$LKMM_DESTDIR_DEF' --herdopts '$LKMM_HERD_OPTIONS_DEF' --jobs '$LKMM_JOBS_DEF' --procs '$LKMM_PROCS_DEF' --timeout '$LKMM_TIMEOUT_DEF'" 44*b02eb5b0SPaul E. McKenney exit 1 45*b02eb5b0SPaul E. McKenney} 46*b02eb5b0SPaul E. McKenney 47*b02eb5b0SPaul E. McKenneyusage () { 48*b02eb5b0SPaul E. McKenney usagehelp 1>&2 49*b02eb5b0SPaul E. McKenney} 50*b02eb5b0SPaul E. McKenney 51*b02eb5b0SPaul E. McKenney# checkarg --argname argtype $# arg mustmatch cannotmatch 52*b02eb5b0SPaul E. McKenneycheckarg () { 53*b02eb5b0SPaul E. McKenney if test $3 -le 1 54*b02eb5b0SPaul E. McKenney then 55*b02eb5b0SPaul E. McKenney echo $1 needs argument $2 matching \"$5\" 56*b02eb5b0SPaul E. McKenney usage 57*b02eb5b0SPaul E. McKenney fi 58*b02eb5b0SPaul E. McKenney if echo "$4" | grep -q -e "$5" 59*b02eb5b0SPaul E. McKenney then 60*b02eb5b0SPaul E. McKenney : 61*b02eb5b0SPaul E. McKenney else 62*b02eb5b0SPaul E. McKenney echo $1 $2 \"$4\" must match \"$5\" 63*b02eb5b0SPaul E. McKenney usage 64*b02eb5b0SPaul E. McKenney fi 65*b02eb5b0SPaul E. McKenney if echo "$4" | grep -q -e "$6" 66*b02eb5b0SPaul E. McKenney then 67*b02eb5b0SPaul E. McKenney echo $1 $2 \"$4\" must not match \"$6\" 68*b02eb5b0SPaul E. McKenney usage 69*b02eb5b0SPaul E. McKenney fi 70*b02eb5b0SPaul E. McKenney} 71*b02eb5b0SPaul E. McKenney 72*b02eb5b0SPaul E. McKenneywhile test $# -gt 0 73*b02eb5b0SPaul E. McKenneydo 74*b02eb5b0SPaul E. McKenney case "$1" in 75*b02eb5b0SPaul E. McKenney --destdir) 76*b02eb5b0SPaul E. McKenney checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--' 77*b02eb5b0SPaul E. McKenney LKMM_DESTDIR="$2" 78*b02eb5b0SPaul E. McKenney mkdir $LKMM_DESTDIR > /dev/null 2>&1 79*b02eb5b0SPaul E. McKenney if ! test -e "$LKMM_DESTDIR" 80*b02eb5b0SPaul E. McKenney then 81*b02eb5b0SPaul E. McKenney echo "Cannot create directory --destdir '$LKMM_DESTDIR'" 82*b02eb5b0SPaul E. McKenney usage 83*b02eb5b0SPaul E. McKenney fi 84*b02eb5b0SPaul E. McKenney if test -d "$LKMM_DESTDIR" -a -w "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR" 85*b02eb5b0SPaul E. McKenney then 86*b02eb5b0SPaul E. McKenney : 87*b02eb5b0SPaul E. McKenney else 88*b02eb5b0SPaul E. McKenney echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files" 89*b02eb5b0SPaul E. McKenney usage 90*b02eb5b0SPaul E. McKenney fi 91*b02eb5b0SPaul E. McKenney shift 92*b02eb5b0SPaul E. McKenney ;; 93*b02eb5b0SPaul E. McKenney --herdopts|--herdopt) 94*b02eb5b0SPaul E. McKenney checkarg --destdir "(herd options)" "$#" "$2" '.*' '^--' 95*b02eb5b0SPaul E. McKenney LKMM_HERD_OPTIONS="$2" 96*b02eb5b0SPaul E. McKenney shift 97*b02eb5b0SPaul E. McKenney ;; 98*b02eb5b0SPaul E. McKenney --jobs|--job) 99*b02eb5b0SPaul E. McKenney checkarg --jobs "(number)" "$#" "$2" '^[0-9]\+$' '^--' 100*b02eb5b0SPaul E. McKenney LKMM_JOBS="$2" 101*b02eb5b0SPaul E. McKenney shift 102*b02eb5b0SPaul E. McKenney ;; 103*b02eb5b0SPaul E. McKenney --procs|--proc) 104*b02eb5b0SPaul E. McKenney checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--' 105*b02eb5b0SPaul E. McKenney LKMM_PROCS="$2" 106*b02eb5b0SPaul E. McKenney shift 107*b02eb5b0SPaul E. McKenney ;; 108*b02eb5b0SPaul E. McKenney --timeout) 109*b02eb5b0SPaul E. McKenney checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--' 110*b02eb5b0SPaul E. McKenney LKMM_TIMEOUT="$2" 111*b02eb5b0SPaul E. McKenney shift 112*b02eb5b0SPaul E. McKenney ;; 113*b02eb5b0SPaul E. McKenney *) 114*b02eb5b0SPaul E. McKenney echo Unknown argument $1 115*b02eb5b0SPaul E. McKenney usage 116*b02eb5b0SPaul E. McKenney ;; 117*b02eb5b0SPaul E. McKenney esac 118*b02eb5b0SPaul E. McKenney shift 119*b02eb5b0SPaul E. McKenneydone 120*b02eb5b0SPaul E. McKenneyif test -z "$LKMM_TIMEOUT" 121*b02eb5b0SPaul E. McKenneythen 122*b02eb5b0SPaul E. McKenney LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD 123*b02eb5b0SPaul E. McKenneyelse 124*b02eb5b0SPaul E. McKenney LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD 125*b02eb5b0SPaul E. McKenneyfi 126*b02eb5b0SPaul E. McKenneyrm -rf $T 127