xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/rcutorture/bin/kvm-recheck.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0+
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# Given the results directories for previous KVM-based torture runs,
5*4882a593Smuzhiyun# check the build and console output for errors.  Given a directory
6*4882a593Smuzhiyun# containing results directories, this recursively checks them all.
7*4882a593Smuzhiyun#
8*4882a593Smuzhiyun# Usage: kvm-recheck.sh resdir ...
9*4882a593Smuzhiyun#
10*4882a593Smuzhiyun# Returns status reflecting the success or not of the last run specified.
11*4882a593Smuzhiyun#
12*4882a593Smuzhiyun# Copyright (C) IBM Corporation, 2011
13*4882a593Smuzhiyun#
14*4882a593Smuzhiyun# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
15*4882a593Smuzhiyun
16*4882a593SmuzhiyunT=/tmp/kvm-recheck.sh.$$
17*4882a593Smuzhiyuntrap 'rm -f $T' 0 2
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunPATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
20*4882a593Smuzhiyun. functions.sh
21*4882a593Smuzhiyunfor rd in "$@"
22*4882a593Smuzhiyundo
23*4882a593Smuzhiyun	firsttime=1
24*4882a593Smuzhiyun	dirs=`find $rd -name Make.defconfig.out -print | sort | sed -e 's,/[^/]*$,,' | sort -u`
25*4882a593Smuzhiyun	for i in $dirs
26*4882a593Smuzhiyun	do
27*4882a593Smuzhiyun		if test -n "$firsttime"
28*4882a593Smuzhiyun		then
29*4882a593Smuzhiyun			firsttime=""
30*4882a593Smuzhiyun			resdir=`echo $i | sed -e 's,/$,,' -e 's,/[^/]*$,,'`
31*4882a593Smuzhiyun			head -1 $resdir/log
32*4882a593Smuzhiyun		fi
33*4882a593Smuzhiyun		TORTURE_SUITE="`cat $i/../TORTURE_SUITE`"
34*4882a593Smuzhiyun		configfile=`echo $i | sed -e 's,^.*/,,'`
35*4882a593Smuzhiyun		rm -f $i/console.log.*.diags
36*4882a593Smuzhiyun		kvm-recheck-${TORTURE_SUITE}.sh $i
37*4882a593Smuzhiyun		if test -f "$i/qemu-retval" && test "`cat $i/qemu-retval`" -ne 0 && test "`cat $i/qemu-retval`" -ne 137
38*4882a593Smuzhiyun		then
39*4882a593Smuzhiyun			echo QEMU error, output:
40*4882a593Smuzhiyun			cat $i/qemu-output
41*4882a593Smuzhiyun		elif test -f "$i/console.log"
42*4882a593Smuzhiyun		then
43*4882a593Smuzhiyun			if test -f "$i/qemu-retval" && test "`cat $i/qemu-retval`" -eq 137
44*4882a593Smuzhiyun			then
45*4882a593Smuzhiyun				echo QEMU killed
46*4882a593Smuzhiyun			fi
47*4882a593Smuzhiyun			configcheck.sh $i/.config $i/ConfigFragment > $T 2>&1
48*4882a593Smuzhiyun			cat $T
49*4882a593Smuzhiyun			if test -r $i/Make.oldconfig.err
50*4882a593Smuzhiyun			then
51*4882a593Smuzhiyun				cat $i/Make.oldconfig.err
52*4882a593Smuzhiyun			fi
53*4882a593Smuzhiyun			parse-build.sh $i/Make.out $configfile
54*4882a593Smuzhiyun			parse-console.sh $i/console.log $configfile
55*4882a593Smuzhiyun			if test -r $i/Warnings
56*4882a593Smuzhiyun			then
57*4882a593Smuzhiyun				cat $i/Warnings
58*4882a593Smuzhiyun			fi
59*4882a593Smuzhiyun		else
60*4882a593Smuzhiyun			if test -f "$i/buildonly"
61*4882a593Smuzhiyun			then
62*4882a593Smuzhiyun				echo Build-only run, no boot/test
63*4882a593Smuzhiyun				configcheck.sh $i/.config $i/ConfigFragment
64*4882a593Smuzhiyun				parse-build.sh $i/Make.out $configfile
65*4882a593Smuzhiyun			elif test -f "$i/qemu-cmd"
66*4882a593Smuzhiyun			then
67*4882a593Smuzhiyun				print_bug qemu failed
68*4882a593Smuzhiyun				echo "   $i"
69*4882a593Smuzhiyun			else
70*4882a593Smuzhiyun				print_bug Build failed
71*4882a593Smuzhiyun				echo "   $i"
72*4882a593Smuzhiyun			fi
73*4882a593Smuzhiyun		fi
74*4882a593Smuzhiyun	done
75*4882a593Smuzhiyun	if test -f "$rd/kcsan.sum"
76*4882a593Smuzhiyun	then
77*4882a593Smuzhiyun		if grep -q CONFIG_KCSAN=y $T
78*4882a593Smuzhiyun		then
79*4882a593Smuzhiyun			echo "Compiler or architecture does not support KCSAN!"
80*4882a593Smuzhiyun			echo Did you forget to switch your compiler with '--kmake-arg CC=<cc-that-supports-kcsan>'?
81*4882a593Smuzhiyun		elif test -s "$rd/kcsan.sum"
82*4882a593Smuzhiyun		then
83*4882a593Smuzhiyun			echo KCSAN summary in $rd/kcsan.sum
84*4882a593Smuzhiyun		else
85*4882a593Smuzhiyun			echo Clean KCSAN run in $rd
86*4882a593Smuzhiyun		fi
87*4882a593Smuzhiyun	fi
88*4882a593Smuzhiyundone
89*4882a593SmuzhiyunEDITOR=echo kvm-find-errors.sh "${@: -1}" > $T 2>&1
90*4882a593Smuzhiyunret=$?
91*4882a593Smuzhiyunbuilderrors="`tr ' ' '\012' < $T | grep -c '/Make.out.diags'`"
92*4882a593Smuzhiyunif test "$builderrors" -gt 0
93*4882a593Smuzhiyunthen
94*4882a593Smuzhiyun	echo $builderrors runs with build errors.
95*4882a593Smuzhiyunfi
96*4882a593Smuzhiyunrunerrors="`tr ' ' '\012' < $T | grep -c '/console.log.diags'`"
97*4882a593Smuzhiyunif test "$runerrors" -gt 0
98*4882a593Smuzhiyunthen
99*4882a593Smuzhiyun	echo $runerrors runs with runtime errors.
100*4882a593Smuzhiyunfi
101*4882a593Smuzhiyunexit $ret
102