11a5e31fbSPranith Kumar#!/bin/bash 2fef141f6SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+ 3c87b9c60SPaul E. McKenney# 4c87b9c60SPaul E. McKenney# Check the console output from an rcutorture run for oopses. 5c87b9c60SPaul E. McKenney# The "file" is a pathname on the local system, and "title" is 6c87b9c60SPaul E. McKenney# a text string for error-message purposes. 7c87b9c60SPaul E. McKenney# 83327d924SPranith Kumar# Usage: parse-console.sh file title 9c87b9c60SPaul E. McKenney# 10c87b9c60SPaul E. McKenney# Copyright (C) IBM Corporation, 2011 11c87b9c60SPaul E. McKenney# 12fef141f6SPaul E. McKenney# Authors: Paul E. McKenney <paulmck@linux.ibm.com> 13c87b9c60SPaul E. McKenney 14d600e06bSPaul E. McKenneyT=${TMPDIR-/tmp}/parse-console.sh.$$ 15c87b9c60SPaul E. McKenneyfile="$1" 16c87b9c60SPaul E. McKenneytitle="$2" 17c87b9c60SPaul E. McKenney 18d600e06bSPaul E. McKenneytrap 'rm -f $T.seq $T.diags' 0 19d600e06bSPaul E. McKenney 206d40cc0cSPaul E. McKenney. functions.sh 216d40cc0cSPaul E. McKenney 22d600e06bSPaul E. McKenney# Check for presence and readability of console output file 23d600e06bSPaul E. McKenneyif test -f "$file" -a -r "$file" 24d600e06bSPaul E. McKenneythen 25d600e06bSPaul E. McKenney : 26d600e06bSPaul E. McKenneyelse 27d600e06bSPaul E. McKenney echo $title unreadable console output file: $file 28d600e06bSPaul E. McKenney exit 1 29d600e06bSPaul E. McKenneyfi 30bc51896dSPaul E. McKenneyif grep -Pq '\x00' < $file 31bc51896dSPaul E. McKenneythen 32bc51896dSPaul E. McKenney print_warning Console output contains nul bytes, old qemu still running? 33bc51896dSPaul E. McKenneyfi 34d600e06bSPaul E. McKenneycat /dev/null > $file.diags 35d600e06bSPaul E. McKenney 364e88ec4aSPaul E. McKenney# Check for proper termination, except for rcuscale and refscale. 374e88ec4aSPaul E. McKenneyif test "$TORTURE_SUITE" != rcuscale && test "$TORTURE_SUITE" != refscale 38c87b9c60SPaul E. McKenneythen 39d600e06bSPaul E. McKenney # check for abject failure 40d600e06bSPaul E. McKenney 41d600e06bSPaul E. McKenney if grep -q FAILURE $file || grep -q -e '-torture.*!!!' $file 42d600e06bSPaul E. McKenney then 43d600e06bSPaul E. McKenney nerrs=`grep --binary-files=text '!!!' $file | 44d600e06bSPaul E. McKenney tail -1 | 45d600e06bSPaul E. McKenney awk ' 46d600e06bSPaul E. McKenney { 4759359e4fSPaul E. McKenney normalexit = 1; 4859359e4fSPaul E. McKenney for (i=NF-8;i<=NF;i++) { 4959359e4fSPaul E. McKenney if (i <= 0 || i !~ /^[0-9]*$/) { 5059359e4fSPaul E. McKenney bangstring = $0; 5159359e4fSPaul E. McKenney gsub(/^\[[^]]*] /, "", bangstring); 5259359e4fSPaul E. McKenney print bangstring; 5359359e4fSPaul E. McKenney normalexit = 0; 5459359e4fSPaul E. McKenney exit 0; 5559359e4fSPaul E. McKenney } 56d600e06bSPaul E. McKenney sum+=$i; 57d600e06bSPaul E. McKenney } 5859359e4fSPaul E. McKenney } 5959359e4fSPaul E. McKenney END { 6059359e4fSPaul E. McKenney if (normalexit) 6159359e4fSPaul E. McKenney print sum " instances" 6259359e4fSPaul E. McKenney }'` 6359359e4fSPaul E. McKenney print_bug $title FAILURE, $nerrs 64d600e06bSPaul E. McKenney exit 65d600e06bSPaul E. McKenney fi 66d600e06bSPaul E. McKenney 67d600e06bSPaul E. McKenney grep --binary-files=text 'torture:.*ver:' $file | 68*eeb4dd9eSTiezhu Yang grep -E --binary-files=text -v '\(null\)|rtc: 000000000* ' | 69d600e06bSPaul E. McKenney sed -e 's/^(initramfs)[^]]*] //' -e 's/^\[[^]]*] //' | 70687d4775SPaul E. McKenney sed -e 's/^.*ver: //' | 71d600e06bSPaul E. McKenney awk ' 72d600e06bSPaul E. McKenney BEGIN { 73d600e06bSPaul E. McKenney ver = 0; 74d600e06bSPaul E. McKenney badseq = 0; 75d600e06bSPaul E. McKenney } 76d600e06bSPaul E. McKenney 77d600e06bSPaul E. McKenney { 78687d4775SPaul E. McKenney if (!badseq && ($1 + 0 != $1 || $1 <= ver)) { 79d600e06bSPaul E. McKenney badseqno1 = ver; 80687d4775SPaul E. McKenney badseqno2 = $1; 81d600e06bSPaul E. McKenney badseqnr = NR; 82d600e06bSPaul E. McKenney badseq = 1; 83d600e06bSPaul E. McKenney } 84687d4775SPaul E. McKenney ver = $1 85d600e06bSPaul E. McKenney } 86d600e06bSPaul E. McKenney 87d600e06bSPaul E. McKenney END { 88d600e06bSPaul E. McKenney if (badseq) { 89d600e06bSPaul E. McKenney if (badseqno1 == badseqno2 && badseqno2 == ver) 90d600e06bSPaul E. McKenney print "GP HANG at " ver " torture stat " badseqnr; 91d600e06bSPaul E. McKenney else 92d600e06bSPaul E. McKenney print "BAD SEQ " badseqno1 ":" badseqno2 " last:" ver " version " badseqnr; 93d600e06bSPaul E. McKenney } 94d600e06bSPaul E. McKenney }' > $T.seq 95d600e06bSPaul E. McKenney 96d600e06bSPaul E. McKenney if grep -q SUCCESS $file 97d600e06bSPaul E. McKenney then 98d600e06bSPaul E. McKenney if test -s $T.seq 99d600e06bSPaul E. McKenney then 100d600e06bSPaul E. McKenney print_warning $title `cat $T.seq` 101d600e06bSPaul E. McKenney echo " " $file 102d600e06bSPaul E. McKenney exit 2 103d600e06bSPaul E. McKenney fi 104d600e06bSPaul E. McKenney else 105d600e06bSPaul E. McKenney if grep -q "_HOTPLUG:" $file 106d600e06bSPaul E. McKenney then 107d600e06bSPaul E. McKenney print_warning HOTPLUG FAILURES $title `cat $T.seq` 108d600e06bSPaul E. McKenney echo " " $file 109d600e06bSPaul E. McKenney exit 3 110d600e06bSPaul E. McKenney fi 111d600e06bSPaul E. McKenney echo $title no success message, `grep --binary-files=text 'ver:' $file | wc -l` successful version messages 112d600e06bSPaul E. McKenney if test -s $T.seq 113d600e06bSPaul E. McKenney then 114d600e06bSPaul E. McKenney print_warning $title `cat $T.seq` 115d600e06bSPaul E. McKenney fi 116d600e06bSPaul E. McKenney exit 2 117d600e06bSPaul E. McKenney fi 118d600e06bSPaul E. McKenneyfi | tee -a $file.diags 119d600e06bSPaul E. McKenney 120bc77a72cSPaul E. McKenneyconsole-badness.sh < $file > $T.diags 121d600e06bSPaul E. McKenneyif test -s $T.diags 122d600e06bSPaul E. McKenneythen 123d600e06bSPaul E. McKenney print_warning "Assertion failure in $file $title" 124d600e06bSPaul E. McKenney # cat $T.diags 1255708c647SPaul E. McKenney summary="" 126d600e06bSPaul E. McKenney n_badness=`grep -c Badness $file` 1275708c647SPaul E. McKenney if test "$n_badness" -ne 0 1285708c647SPaul E. McKenney then 1295708c647SPaul E. McKenney summary="$summary Badness: $n_badness" 1305708c647SPaul E. McKenney fi 131*eeb4dd9eSTiezhu Yang n_warn=`grep -v 'Warning: unable to open an initial console' $file | grep -v 'Warning: Failed to add ttynull console. No stdin, stdout, and stderr for the init process' | grep -E -c 'WARNING:|Warn'` 1325708c647SPaul E. McKenney if test "$n_warn" -ne 0 1335708c647SPaul E. McKenney then 1345708c647SPaul E. McKenney summary="$summary Warnings: $n_warn" 1355708c647SPaul E. McKenney fi 136*eeb4dd9eSTiezhu Yang n_bugs=`grep -E -c '\bBUG|Oops:' $file` 1375708c647SPaul E. McKenney if test "$n_bugs" -ne 0 1385708c647SPaul E. McKenney then 1395708c647SPaul E. McKenney summary="$summary Bugs: $n_bugs" 1405708c647SPaul E. McKenney fi 141*eeb4dd9eSTiezhu Yang n_kcsan=`grep -E -c 'BUG: KCSAN: ' $file` 142a711aaccSPaul E. McKenney if test "$n_kcsan" -ne 0 143a711aaccSPaul E. McKenney then 144a711aaccSPaul E. McKenney if test "$n_bugs" = "$n_kcsan" 145a711aaccSPaul E. McKenney then 146a711aaccSPaul E. McKenney summary="$summary (all bugs kcsan)" 147a711aaccSPaul E. McKenney else 148a711aaccSPaul E. McKenney summary="$summary KCSAN: $n_kcsan" 149a711aaccSPaul E. McKenney fi 150a711aaccSPaul E. McKenney fi 151d600e06bSPaul E. McKenney n_calltrace=`grep -c 'Call Trace:' $file` 1525708c647SPaul E. McKenney if test "$n_calltrace" -ne 0 1535708c647SPaul E. McKenney then 1545708c647SPaul E. McKenney summary="$summary Call Traces: $n_calltrace" 1555708c647SPaul E. McKenney fi 156d600e06bSPaul E. McKenney n_lockdep=`grep -c =========== $file` 1575708c647SPaul E. McKenney if test "$n_badness" -ne 0 1585708c647SPaul E. McKenney then 1595708c647SPaul E. McKenney summary="$summary lockdep: $n_badness" 1605708c647SPaul E. McKenney fi 161*eeb4dd9eSTiezhu Yang n_stalls=`grep -E -c 'detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state' $file` 1625708c647SPaul E. McKenney if test "$n_stalls" -ne 0 1635708c647SPaul E. McKenney then 1645708c647SPaul E. McKenney summary="$summary Stalls: $n_stalls" 1655708c647SPaul E. McKenney fi 166d600e06bSPaul E. McKenney n_starves=`grep -c 'rcu_.*kthread starved for' $file` 167682ed706SPaul E. McKenney if test "$n_starves" -ne 0 168682ed706SPaul E. McKenney then 169682ed706SPaul E. McKenney summary="$summary Starves: $n_starves" 170682ed706SPaul E. McKenney fi 1715708c647SPaul E. McKenney print_warning Summary: $summary 172d600e06bSPaul E. McKenney cat $T.diags >> $file.diags 173d600e06bSPaul E. McKenneyfi 174b4c1906fSPaul E. McKenneyfor i in $file.*.diags 175b4c1906fSPaul E. McKenneydo 176b4c1906fSPaul E. McKenney if test -f "$i" 177b4c1906fSPaul E. McKenney then 178b4c1906fSPaul E. McKenney cat $i >> $file.diags 179b4c1906fSPaul E. McKenney fi 180b4c1906fSPaul E. McKenneydone 181d600e06bSPaul E. McKenneyif ! test -s $file.diags 182d600e06bSPaul E. McKenneythen 183d600e06bSPaul E. McKenney rm -f $file.diags 184c87b9c60SPaul E. McKenneyfi 185