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