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 36d600e06bSPaul E. McKenney# Check for proper termination, except that rcuperf runs don't indicate this. 37d600e06bSPaul E. McKenneyif test "$TORTURE_SUITE" != rcuperf 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 | 68d600e06bSPaul E. McKenney egrep --binary-files=text -v '\(null\)|rtc: 000000000* ' | 69d600e06bSPaul E. McKenney sed -e 's/^(initramfs)[^]]*] //' -e 's/^\[[^]]*] //' | 70d600e06bSPaul E. McKenney awk ' 71d600e06bSPaul E. McKenney BEGIN { 72d600e06bSPaul E. McKenney ver = 0; 73d600e06bSPaul E. McKenney badseq = 0; 74d600e06bSPaul E. McKenney } 75d600e06bSPaul E. McKenney 76d600e06bSPaul E. McKenney { 77d600e06bSPaul E. McKenney if (!badseq && ($5 + 0 != $5 || $5 <= ver)) { 78d600e06bSPaul E. McKenney badseqno1 = ver; 79d600e06bSPaul E. McKenney badseqno2 = $5; 80d600e06bSPaul E. McKenney badseqnr = NR; 81d600e06bSPaul E. McKenney badseq = 1; 82d600e06bSPaul E. McKenney } 83d600e06bSPaul E. McKenney ver = $5 84d600e06bSPaul E. McKenney } 85d600e06bSPaul E. McKenney 86d600e06bSPaul E. McKenney END { 87d600e06bSPaul E. McKenney if (badseq) { 88d600e06bSPaul E. McKenney if (badseqno1 == badseqno2 && badseqno2 == ver) 89d600e06bSPaul E. McKenney print "GP HANG at " ver " torture stat " badseqnr; 90d600e06bSPaul E. McKenney else 91d600e06bSPaul E. McKenney print "BAD SEQ " badseqno1 ":" badseqno2 " last:" ver " version " badseqnr; 92d600e06bSPaul E. McKenney } 93d600e06bSPaul E. McKenney }' > $T.seq 94d600e06bSPaul E. McKenney 95d600e06bSPaul E. McKenney if grep -q SUCCESS $file 96d600e06bSPaul E. McKenney then 97d600e06bSPaul E. McKenney if test -s $T.seq 98d600e06bSPaul E. McKenney then 99d600e06bSPaul E. McKenney print_warning $title `cat $T.seq` 100d600e06bSPaul E. McKenney echo " " $file 101d600e06bSPaul E. McKenney exit 2 102d600e06bSPaul E. McKenney fi 103d600e06bSPaul E. McKenney else 104d600e06bSPaul E. McKenney if grep -q "_HOTPLUG:" $file 105d600e06bSPaul E. McKenney then 106d600e06bSPaul E. McKenney print_warning HOTPLUG FAILURES $title `cat $T.seq` 107d600e06bSPaul E. McKenney echo " " $file 108d600e06bSPaul E. McKenney exit 3 109d600e06bSPaul E. McKenney fi 110d600e06bSPaul E. McKenney echo $title no success message, `grep --binary-files=text 'ver:' $file | wc -l` successful version messages 111d600e06bSPaul E. McKenney if test -s $T.seq 112d600e06bSPaul E. McKenney then 113d600e06bSPaul E. McKenney print_warning $title `cat $T.seq` 114d600e06bSPaul E. McKenney fi 115d600e06bSPaul E. McKenney exit 2 116d600e06bSPaul E. McKenney fi 117d600e06bSPaul E. McKenneyfi | tee -a $file.diags 118d600e06bSPaul E. McKenney 119d600e06bSPaul E. McKenneyegrep 'Badness|WARNING:|Warn|BUG|===========|Call Trace:|Oops:|detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state|rcu_.*kthread starved for' < $file | 120d600e06bSPaul E. McKenneygrep -v 'ODEBUG: ' | 1218997e631SPaul E. McKenneygrep -v 'This means that this is a DEBUG kernel and it is' | 122d600e06bSPaul E. McKenneygrep -v 'Warning: unable to open an initial console' > $T.diags 123d600e06bSPaul E. McKenneyif test -s $T.diags 124d600e06bSPaul E. McKenneythen 125d600e06bSPaul E. McKenney print_warning "Assertion failure in $file $title" 126d600e06bSPaul E. McKenney # cat $T.diags 1275708c647SPaul E. McKenney summary="" 128d600e06bSPaul E. McKenney n_badness=`grep -c Badness $file` 1295708c647SPaul E. McKenney if test "$n_badness" -ne 0 1305708c647SPaul E. McKenney then 1315708c647SPaul E. McKenney summary="$summary Badness: $n_badness" 1325708c647SPaul E. McKenney fi 133d600e06bSPaul E. McKenney n_warn=`grep -v 'Warning: unable to open an initial console' $file | egrep -c 'WARNING:|Warn'` 1345708c647SPaul E. McKenney if test "$n_warn" -ne 0 1355708c647SPaul E. McKenney then 1365708c647SPaul E. McKenney summary="$summary Warnings: $n_warn" 1375708c647SPaul E. McKenney fi 138d600e06bSPaul E. McKenney n_bugs=`egrep -c 'BUG|Oops:' $file` 1395708c647SPaul E. McKenney if test "$n_bugs" -ne 0 1405708c647SPaul E. McKenney then 1415708c647SPaul E. McKenney summary="$summary Bugs: $n_bugs" 1425708c647SPaul E. McKenney fi 143d600e06bSPaul E. McKenney n_calltrace=`grep -c 'Call Trace:' $file` 1445708c647SPaul E. McKenney if test "$n_calltrace" -ne 0 1455708c647SPaul E. McKenney then 1465708c647SPaul E. McKenney summary="$summary Call Traces: $n_calltrace" 1475708c647SPaul E. McKenney fi 148d600e06bSPaul E. McKenney n_lockdep=`grep -c =========== $file` 1495708c647SPaul E. McKenney if test "$n_badness" -ne 0 1505708c647SPaul E. McKenney then 1515708c647SPaul E. McKenney summary="$summary lockdep: $n_badness" 1525708c647SPaul E. McKenney fi 153d600e06bSPaul E. McKenney n_stalls=`egrep -c 'detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state' $file` 1545708c647SPaul E. McKenney if test "$n_stalls" -ne 0 1555708c647SPaul E. McKenney then 1565708c647SPaul E. McKenney summary="$summary Stalls: $n_stalls" 1575708c647SPaul E. McKenney fi 158d600e06bSPaul E. McKenney n_starves=`grep -c 'rcu_.*kthread starved for' $file` 159682ed706SPaul E. McKenney if test "$n_starves" -ne 0 160682ed706SPaul E. McKenney then 161682ed706SPaul E. McKenney summary="$summary Starves: $n_starves" 162682ed706SPaul E. McKenney fi 1635708c647SPaul E. McKenney print_warning Summary: $summary 164d600e06bSPaul E. McKenney cat $T.diags >> $file.diags 165d600e06bSPaul E. McKenneyfi 166b4c1906fSPaul E. McKenneyfor i in $file.*.diags 167b4c1906fSPaul E. McKenneydo 168b4c1906fSPaul E. McKenney if test -f "$i" 169b4c1906fSPaul E. McKenney then 170b4c1906fSPaul E. McKenney cat $i >> $file.diags 171b4c1906fSPaul E. McKenney fi 172b4c1906fSPaul E. McKenneydone 173d600e06bSPaul E. McKenneyif ! test -s $file.diags 174d600e06bSPaul E. McKenneythen 175d600e06bSPaul E. McKenney rm -f $file.diags 176c87b9c60SPaul E. McKenneyfi 177