195ce5f29SPaul E. McKenney#!/bin/sh
2fef141f6SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+
395ce5f29SPaul E. McKenney#
495ce5f29SPaul E. McKenney# Invoke a text editor on all console.log files for all runs with diagnostics,
595ce5f29SPaul E. McKenney# that is, on all such files having a console.log.diags counterpart.
695ce5f29SPaul E. McKenney# Note that both console.log.diags and console.log are passed to the
795ce5f29SPaul E. McKenney# editor (currently defaulting to "vi"), allowing the user to get an
895ce5f29SPaul E. McKenney# idea of what to search for in the console.log file.
995ce5f29SPaul E. McKenney#
1095ce5f29SPaul E. McKenney# Usage: kvm-find-errors.sh directory
1195ce5f29SPaul E. McKenney#
1295ce5f29SPaul E. McKenney# The "directory" above should end with the date/time directory, for example,
1395ce5f29SPaul E. McKenney# "tools/testing/selftests/rcutorture/res/2018.02.25-14:27:27".
1463b29eaeSPaul E. McKenney# Returns error status reflecting the success (or not) of the specified run.
15fef141f6SPaul E. McKenney#
16fef141f6SPaul E. McKenney# Copyright (C) IBM Corporation, 2018
17fef141f6SPaul E. McKenney#
18fef141f6SPaul E. McKenney# Author: Paul E. McKenney <paulmck@linux.ibm.com>
1995ce5f29SPaul E. McKenney
2095ce5f29SPaul E. McKenneyrundir="${1}"
2195ce5f29SPaul E. McKenneyif test -z "$rundir" -o ! -d "$rundir"
2295ce5f29SPaul E. McKenneythen
23beabc806SPaul E. McKenney	echo Directory "$rundir" not found.
2495ce5f29SPaul E. McKenney	echo Usage: $0 directory
25beabc806SPaul E. McKenney	exit 1
2695ce5f29SPaul E. McKenneyfi
2795ce5f29SPaul E. McKenneyeditor=${EDITOR-vi}
2895ce5f29SPaul E. McKenney
2995ce5f29SPaul E. McKenney# Find builds with errors
3095ce5f29SPaul E. McKenneyfiles=
3195ce5f29SPaul E. McKenneyfor i in ${rundir}/*/Make.out
3295ce5f29SPaul E. McKenneydo
33e31ccc1dSPaul E. McKenney	scenariodir="`dirname $i`"
34e31ccc1dSPaul E. McKenney	scenariobasedir="`echo ${scenariodir} | sed -e 's/\.[0-9]*$//'`"
35*eeb4dd9eSTiezhu Yang	if grep -E -q "error:|warning:|^ld: .*undefined reference to" < $i
3695ce5f29SPaul E. McKenney	then
37*eeb4dd9eSTiezhu Yang		grep -E "error:|warning:|^ld: .*undefined reference to" < $i > $i.diags
38da1a1e19SPaul E. McKenney		files="$files $i.diags $i"
393e4c07b9SPaul E. McKenney	elif ! test -f ${scenariobasedir}/vmlinux && ! test -f ${scenariobasedir}/vmlinux.xz && ! test -f "${rundir}/re-run"
40e31ccc1dSPaul E. McKenney	then
41e31ccc1dSPaul E. McKenney		echo No ${scenariobasedir}/vmlinux file > $i.diags
42e31ccc1dSPaul E. McKenney		files="$files $i.diags $i"
4395ce5f29SPaul E. McKenney	fi
4495ce5f29SPaul E. McKenneydone
4595ce5f29SPaul E. McKenneyif test -n "$files"
4695ce5f29SPaul E. McKenneythen
4795ce5f29SPaul E. McKenney	$editor $files
4823239fc0SPaul E. McKenney	editorret=1
4995ce5f29SPaul E. McKenneyelse
5095ce5f29SPaul E. McKenney	echo No build errors.
5195ce5f29SPaul E. McKenneyfi
52226dd39dSPaul E. McKenneyif grep -q -e "--build-\?only" < ${rundir}/log && ! test -f "${rundir}/remote-log"
5395ce5f29SPaul E. McKenneythen
5495ce5f29SPaul E. McKenney	echo Build-only run, no console logs to check.
55365dc5cbSPaul E. McKenney	exit $editorret
5695ce5f29SPaul E. McKenneyfi
5795ce5f29SPaul E. McKenney
5895ce5f29SPaul E. McKenney# Find console logs with errors
5995ce5f29SPaul E. McKenneyfiles=
6095ce5f29SPaul E. McKenneyfor i in ${rundir}/*/console.log
6195ce5f29SPaul E. McKenneydo
6295ce5f29SPaul E. McKenney	if test -r $i.diags
6395ce5f29SPaul E. McKenney	then
6495ce5f29SPaul E. McKenney		files="$files $i.diags $i"
6595ce5f29SPaul E. McKenney	fi
6695ce5f29SPaul E. McKenneydone
6795ce5f29SPaul E. McKenneyif test -n "$files"
6895ce5f29SPaul E. McKenneythen
6995ce5f29SPaul E. McKenney	$editor $files
7063b29eaeSPaul E. McKenney	exit 1
7195ce5f29SPaul E. McKenneyelse
7295ce5f29SPaul E. McKenney	echo No errors in console logs.
7323239fc0SPaul E. McKenney	if test -n "$editorret"
7423239fc0SPaul E. McKenney	then
7523239fc0SPaul E. McKenney		exit $editorret
7623239fc0SPaul E. McKenney	else
7763b29eaeSPaul E. McKenney		exit 0
7895ce5f29SPaul E. McKenney	fi
7923239fc0SPaul E. McKenneyfi
80