From b6857b1e6c7b055d1082ee4e7d7e08f5b9a3ebc3 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 17 Jun 2013 04:58:56 +0000 Subject: sim: bfin: tweak run-tests for parallel usage --- sim/testsuite/sim/bfin/ChangeLog | 4 ++++ sim/testsuite/sim/bfin/run-tests.sh | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/sim/testsuite/sim/bfin/ChangeLog b/sim/testsuite/sim/bfin/ChangeLog index a634494..b3cf8fe 100644 --- a/sim/testsuite/sim/bfin/ChangeLog +++ b/sim/testsuite/sim/bfin/ChangeLog @@ -1,5 +1,9 @@ 2013-06-17 Mike Frysinger + * run-tests.sh: Add support for running in parallel. + +2013-06-17 Mike Frysinger + * se_allopcodes.h: Add debugging related comments. 2013-06-17 Mike Frysinger diff --git a/sim/testsuite/sim/bfin/run-tests.sh b/sim/testsuite/sim/bfin/run-tests.sh index 2b6181b..34a490c 100644 --- a/sim/testsuite/sim/bfin/run-tests.sh +++ b/sim/testsuite/sim/bfin/run-tests.sh @@ -10,6 +10,7 @@ usage() { -rs Run on simulator -rj Run on board via JTAG -rh Run on board ip + -j Num jobs to run EOF exit ${0:-1} } @@ -20,11 +21,14 @@ boardjtag= run_sim=false run_jtag=false run_host=false +jobs=`getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1` +: $(( jobs += 1 )) while [ -n "$1" ] ; do case $1 in -rs) run_sim=true;; -rj) boardjtag=$2; shift; run_jtag=true;; -rh) boardip=$2; shift; run_host=true;; + -j) jobs=$2; shift;; -*) usage;; *) break;; esac @@ -36,6 +40,8 @@ if ${run_host} && [ -z "${boardip}" ] ; then usage fi +cd "${0%/*}" || exit 1 + dorsh() { # rsh sucks and does not pass up its exit status, so we have to: # on board: @@ -85,7 +91,6 @@ dojtag() { } testit() { - local name=$1 x=$2 y=`echo $2 | sed 's:\.[xX]$::'` out rsh_out addr shift; shift local fail=`grep xfail ${y}` @@ -145,8 +150,7 @@ pf() { [ $# -eq 0 ] && set -- *.[Ss] bins_hw=$( (${run_sim} || ${run_jtag}) && printf '%s.x ' "$@") if ${run_host} ; then - for files in $@ - do + for files in "$@" ; do tmp=`grep -e CYCLES -e TESTSET -e CLI -e STI -e RTX -e RTI -e SEQSTAT $files -l` if [ -z "${tmp}" ] ; then bins_host=`echo "${bins_host} ${files}.X"` @@ -194,20 +198,41 @@ if ${run_host} ; then rsh -l root $boardip '/bin/dmesg -c' > /dev/null fi +SIM="../../../bfin/run" +if [ ! -x ${SIM} ] ; then + SIM="bfin-elf-run" +fi +echo "Using sim: ${SIM}" + ret=0 unexpected_fail=0 unexpected_pass=0 expected_pass=0 +pids=() for s in "$@" ; do - ${run_sim} && testit SIM ${s}.x bfin-elf-run `sed -n '/^# sim:/s|^[^:]*:||p' ${s}` + ( + out=$( + ${run_sim} && testit SIM ${s}.x ${SIM} `sed -n '/^# sim:/s|^[^:]*:||p' ${s}` ${run_jtag} && testit JTAG ${s}.x dojtag ${run_host} && testit HOST ${s}.X dorsh + ) + case $out in + *PASS*) ;; + *) echo "$out" ;; + esac + ) & + pids+=( $! ) + if [[ ${#pids[@]} -gt ${jobs} ]] ; then + wait ${pids[0]} + pids=( ${pids[@]:1} ) + fi done +wait killall -q bfin-gdbproxy if [ ${ret} -eq 0 ] ; then rm -f gdbproxy.log - ${MAKE} -s clean & +# ${MAKE} -s clean & exit 0 else echo number of failures ${ret} @@ -222,4 +247,3 @@ else fi exit 1 fi - -- cgit v1.1