xref: /linux/tools/testing/selftests/rcutorture/bin/kvm-series.sh (revision 98e7dcbb82fa57de8dfad357f9b851c3625797fa)
1*515a48feSPaul E. McKenney#!/bin/bash
2*515a48feSPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+
3*515a48feSPaul E. McKenney#
4*515a48feSPaul E. McKenney# Usage: kvm-series.sh config-list commit-id-list [ kvm.sh parameters ]
5*515a48feSPaul E. McKenney#
6*515a48feSPaul E. McKenney# Tests the specified list of unadorned configs ("TREE01 SRCU-P" but not
7*515a48feSPaul E. McKenney# "CFLIST" or "3*TRACE01") and an indication of a set of commits to test,
8*515a48feSPaul E. McKenney# then runs each commit through the specified list of commits using kvm.sh.
9*515a48feSPaul E. McKenney# The runs are grouped into a -series/config/commit directory tree.
10*515a48feSPaul E. McKenney# Each run defaults to a duration of one minute.
11*515a48feSPaul E. McKenney#
12*515a48feSPaul E. McKenney# Run in top-level Linux source directory.  Please note that this is in
13*515a48feSPaul E. McKenney# no way a replacement for "git bisect"!!!
14*515a48feSPaul E. McKenney#
15*515a48feSPaul E. McKenney# This script is intended to replace kvm-check-branches.sh by providing
16*515a48feSPaul E. McKenney# ease of use and faster execution.
17*515a48feSPaul E. McKenney
18*515a48feSPaul E. McKenneyT="`mktemp -d ${TMPDIR-/tmp}/kvm-series.sh.XXXXXX`"
19*515a48feSPaul E. McKenneytrap 'rm -rf $T' 0
20*515a48feSPaul E. McKenney
21*515a48feSPaul E. McKenneyscriptname=$0
22*515a48feSPaul E. McKenneyargs="$*"
23*515a48feSPaul E. McKenney
24*515a48feSPaul E. McKenneyconfig_list="${1}"
25*515a48feSPaul E. McKenneyif test -z "${config_list}"
26*515a48feSPaul E. McKenneythen
27*515a48feSPaul E. McKenney	echo "$0: Need a quoted list of --config arguments for first argument."
28*515a48feSPaul E. McKenney	exit 1
29*515a48feSPaul E. McKenneyfi
30*515a48feSPaul E. McKenneyif test -z "${config_list}" || echo "${config_list}" | grep -q '\*'
31*515a48feSPaul E. McKenneythen
32*515a48feSPaul E. McKenney	echo "$0: Repetition ('*') not allowed in config list."
33*515a48feSPaul E. McKenney	exit 1
34*515a48feSPaul E. McKenneyfi
35*515a48feSPaul E. McKenney
36*515a48feSPaul E. McKenneycommit_list="${2}"
37*515a48feSPaul E. McKenneyif test -z "${commit_list}"
38*515a48feSPaul E. McKenneythen
39*515a48feSPaul E. McKenney	echo "$0: Need a list of commits (e.g., HEAD^^^..) for second argument."
40*515a48feSPaul E. McKenney	exit 2
41*515a48feSPaul E. McKenneyfi
42*515a48feSPaul E. McKenneygit log --pretty=format:"%h" "${commit_list}" > $T/commits
43*515a48feSPaul E. McKenneyret=$?
44*515a48feSPaul E. McKenneyif test "${ret}" -ne 0
45*515a48feSPaul E. McKenneythen
46*515a48feSPaul E. McKenney	echo "$0: Invalid commit list ('${commit_list}')."
47*515a48feSPaul E. McKenney	exit 2
48*515a48feSPaul E. McKenneyfi
49*515a48feSPaul E. McKenneysha1_list=`cat $T/commits`
50*515a48feSPaul E. McKenney
51*515a48feSPaul E. McKenneyshift
52*515a48feSPaul E. McKenneyshift
53*515a48feSPaul E. McKenney
54*515a48feSPaul E. McKenneyRCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
55*515a48feSPaul E. McKenneyPATH=${RCUTORTURE}/bin:$PATH; export PATH
56*515a48feSPaul E. McKenney. functions.sh
57*515a48feSPaul E. McKenney
58*515a48feSPaul E. McKenneyret=0
59*515a48feSPaul E. McKenneynfail=0
60*515a48feSPaul E. McKenneynsuccess=0
61*515a48feSPaul E. McKenneyfaillist=
62*515a48feSPaul E. McKenneysuccesslist=
63*515a48feSPaul E. McKenneycursha1="`git rev-parse --abbrev-ref HEAD`"
64*515a48feSPaul E. McKenneyds="`date +%Y.%m.%d-%H.%M.%S`-series"
65*515a48feSPaul E. McKenneystartdate="`date`"
66*515a48feSPaul E. McKenneystarttime="`get_starttime`"
67*515a48feSPaul E. McKenney
68*515a48feSPaul E. McKenneyecho " --- " $scriptname $args | tee -a $T/log
69*515a48feSPaul E. McKenneyecho " --- Results directory: " $ds | tee -a $T/log
70*515a48feSPaul E. McKenney
71*515a48feSPaul E. McKenneyfor config in ${config_list}
72*515a48feSPaul E. McKenneydo
73*515a48feSPaul E. McKenney	sha_n=0
74*515a48feSPaul E. McKenney	for sha in ${sha1_list}
75*515a48feSPaul E. McKenney	do
76*515a48feSPaul E. McKenney		sha1=${sha_n}.${sha} # Enable "sort -k1nr" to list commits in order.
77*515a48feSPaul E. McKenney		echo Starting ${config}/${sha1} at `date` | tee -a $T/log
78*515a48feSPaul E. McKenney		git checkout "${sha}"
79*515a48feSPaul E. McKenney		time tools/testing/selftests/rcutorture/bin/kvm.sh --configs "$config" --datestamp "$ds/${config}/${sha1}" --duration 1 "$@"
80*515a48feSPaul E. McKenney		curret=$?
81*515a48feSPaul E. McKenney		if test "${curret}" -ne 0
82*515a48feSPaul E. McKenney		then
83*515a48feSPaul E. McKenney			nfail=$((nfail+1))
84*515a48feSPaul E. McKenney			faillist="$faillist ${config}/${sha1}(${curret})"
85*515a48feSPaul E. McKenney		else
86*515a48feSPaul E. McKenney			nsuccess=$((nsuccess+1))
87*515a48feSPaul E. McKenney			successlist="$successlist ${config}/${sha1}"
88*515a48feSPaul E. McKenney			# Successful run, so remove large files.
89*515a48feSPaul E. McKenney			rm -f ${RCUTORTURE}/$ds/${config}/${sha1}/{vmlinux,bzImage,System.map,Module.symvers}
90*515a48feSPaul E. McKenney		fi
91*515a48feSPaul E. McKenney		if test "${ret}" -eq 0
92*515a48feSPaul E. McKenney		then
93*515a48feSPaul E. McKenney			ret=${curret}
94*515a48feSPaul E. McKenney		fi
95*515a48feSPaul E. McKenney		sha_n=$((sha_n+1))
96*515a48feSPaul E. McKenney	done
97*515a48feSPaul E. McKenneydone
98*515a48feSPaul E. McKenneygit checkout "${cursha1}"
99*515a48feSPaul E. McKenney
100*515a48feSPaul E. McKenneyecho ${nsuccess} SUCCESSES: | tee -a $T/log
101*515a48feSPaul E. McKenneyecho ${successlist} | fmt | tee -a $T/log
102*515a48feSPaul E. McKenneyecho | tee -a $T/log
103*515a48feSPaul E. McKenneyecho ${nfail} FAILURES: | tee -a $T/log
104*515a48feSPaul E. McKenneyecho ${faillist} | fmt | tee -a $T/log
105*515a48feSPaul E. McKenneyif test -n "${faillist}"
106*515a48feSPaul E. McKenneythen
107*515a48feSPaul E. McKenney	echo | tee -a $T/log
108*515a48feSPaul E. McKenney	echo Failures across commits: | tee -a $T/log
109*515a48feSPaul E. McKenney	echo ${faillist} | tr ' ' '\012' | sed -e 's,^[^/]*/,,' -e 's/([0-9]*)//' |
110*515a48feSPaul E. McKenney		sort | uniq -c | sort -k2n | tee -a $T/log
111*515a48feSPaul E. McKenneyfi
112*515a48feSPaul E. McKenneyecho Started at $startdate, ended at `date`, duration `get_starttime_duration $starttime`. | tee -a $T/log
113*515a48feSPaul E. McKenneyecho Summary: Successes: ${nsuccess} Failures: ${nfail} | tee -a $T/log
114*515a48feSPaul E. McKenneycp $T/log tools/testing/selftests/rcutorture/res/${ds}
115*515a48feSPaul E. McKenney
116*515a48feSPaul E. McKenneyexit "${ret}"
117