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 { 47d600e06bSPaul E. McKenney for (i=NF-8;i<=NF;i++) 48d600e06bSPaul E. McKenney sum+=$i; 49d600e06bSPaul E. McKenney } 50d600e06bSPaul E. McKenney END { print sum }'` 51d600e06bSPaul E. McKenney print_bug $title FAILURE, $nerrs instances 52d600e06bSPaul E. McKenney exit 53d600e06bSPaul E. McKenney fi 54d600e06bSPaul E. McKenney 55d600e06bSPaul E. McKenney grep --binary-files=text 'torture:.*ver:' $file | 56d600e06bSPaul E. McKenney egrep --binary-files=text -v '\(null\)|rtc: 000000000* ' | 57d600e06bSPaul E. McKenney sed -e 's/^(initramfs)[^]]*] //' -e 's/^\[[^]]*] //' | 58d600e06bSPaul E. McKenney awk ' 59d600e06bSPaul E. McKenney BEGIN { 60d600e06bSPaul E. McKenney ver = 0; 61d600e06bSPaul E. McKenney badseq = 0; 62d600e06bSPaul E. McKenney } 63d600e06bSPaul E. McKenney 64d600e06bSPaul E. McKenney { 65d600e06bSPaul E. McKenney if (!badseq && ($5 + 0 != $5 || $5 <= ver)) { 66d600e06bSPaul E. McKenney badseqno1 = ver; 67d600e06bSPaul E. McKenney badseqno2 = $5; 68d600e06bSPaul E. McKenney badseqnr = NR; 69d600e06bSPaul E. McKenney badseq = 1; 70d600e06bSPaul E. McKenney } 71d600e06bSPaul E. McKenney ver = $5 72d600e06bSPaul E. McKenney } 73d600e06bSPaul E. McKenney 74d600e06bSPaul E. McKenney END { 75d600e06bSPaul E. McKenney if (badseq) { 76d600e06bSPaul E. McKenney if (badseqno1 == badseqno2 && badseqno2 == ver) 77d600e06bSPaul E. McKenney print "GP HANG at " ver " torture stat " badseqnr; 78d600e06bSPaul E. McKenney else 79d600e06bSPaul E. McKenney print "BAD SEQ " badseqno1 ":" badseqno2 " last:" ver " version " badseqnr; 80d600e06bSPaul E. McKenney } 81d600e06bSPaul E. McKenney }' > $T.seq 82d600e06bSPaul E. McKenney 83d600e06bSPaul E. McKenney if grep -q SUCCESS $file 84d600e06bSPaul E. McKenney then 85d600e06bSPaul E. McKenney if test -s $T.seq 86d600e06bSPaul E. McKenney then 87d600e06bSPaul E. McKenney print_warning $title `cat $T.seq` 88d600e06bSPaul E. McKenney echo " " $file 89d600e06bSPaul E. McKenney exit 2 90d600e06bSPaul E. McKenney fi 91d600e06bSPaul E. McKenney else 92d600e06bSPaul E. McKenney if grep -q "_HOTPLUG:" $file 93d600e06bSPaul E. McKenney then 94d600e06bSPaul E. McKenney print_warning HOTPLUG FAILURES $title `cat $T.seq` 95d600e06bSPaul E. McKenney echo " " $file 96d600e06bSPaul E. McKenney exit 3 97d600e06bSPaul E. McKenney fi 98d600e06bSPaul E. McKenney echo $title no success message, `grep --binary-files=text 'ver:' $file | wc -l` successful version messages 99d600e06bSPaul E. McKenney if test -s $T.seq 100d600e06bSPaul E. McKenney then 101d600e06bSPaul E. McKenney print_warning $title `cat $T.seq` 102d600e06bSPaul E. McKenney fi 103d600e06bSPaul E. McKenney exit 2 104d600e06bSPaul E. McKenney fi 105d600e06bSPaul E. McKenneyfi | tee -a $file.diags 106d600e06bSPaul E. McKenney 107d600e06bSPaul 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 | 108d600e06bSPaul E. McKenneygrep -v 'ODEBUG: ' | 1098997e631SPaul E. McKenneygrep -v 'This means that this is a DEBUG kernel and it is' | 110d600e06bSPaul E. McKenneygrep -v 'Warning: unable to open an initial console' > $T.diags 111d600e06bSPaul E. McKenneyif test -s $T.diags 112d600e06bSPaul E. McKenneythen 113d600e06bSPaul E. McKenney print_warning "Assertion failure in $file $title" 114d600e06bSPaul E. McKenney # cat $T.diags 1155708c647SPaul E. McKenney summary="" 116d600e06bSPaul E. McKenney n_badness=`grep -c Badness $file` 1175708c647SPaul E. McKenney if test "$n_badness" -ne 0 1185708c647SPaul E. McKenney then 1195708c647SPaul E. McKenney summary="$summary Badness: $n_badness" 1205708c647SPaul E. McKenney fi 121d600e06bSPaul E. McKenney n_warn=`grep -v 'Warning: unable to open an initial console' $file | egrep -c 'WARNING:|Warn'` 1225708c647SPaul E. McKenney if test "$n_warn" -ne 0 1235708c647SPaul E. McKenney then 1245708c647SPaul E. McKenney summary="$summary Warnings: $n_warn" 1255708c647SPaul E. McKenney fi 126d600e06bSPaul E. McKenney n_bugs=`egrep -c 'BUG|Oops:' $file` 1275708c647SPaul E. McKenney if test "$n_bugs" -ne 0 1285708c647SPaul E. McKenney then 1295708c647SPaul E. McKenney summary="$summary Bugs: $n_bugs" 1305708c647SPaul E. McKenney fi 131d600e06bSPaul E. McKenney n_calltrace=`grep -c 'Call Trace:' $file` 1325708c647SPaul E. McKenney if test "$n_calltrace" -ne 0 1335708c647SPaul E. McKenney then 1345708c647SPaul E. McKenney summary="$summary Call Traces: $n_calltrace" 1355708c647SPaul E. McKenney fi 136d600e06bSPaul E. McKenney n_lockdep=`grep -c =========== $file` 1375708c647SPaul E. McKenney if test "$n_badness" -ne 0 1385708c647SPaul E. McKenney then 1395708c647SPaul E. McKenney summary="$summary lockdep: $n_badness" 1405708c647SPaul E. McKenney fi 141d600e06bSPaul 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` 1425708c647SPaul E. McKenney if test "$n_stalls" -ne 0 1435708c647SPaul E. McKenney then 1445708c647SPaul E. McKenney summary="$summary Stalls: $n_stalls" 1455708c647SPaul E. McKenney fi 146d600e06bSPaul E. McKenney n_starves=`grep -c 'rcu_.*kthread starved for' $file` 147682ed706SPaul E. McKenney if test "$n_starves" -ne 0 148682ed706SPaul E. McKenney then 149682ed706SPaul E. McKenney summary="$summary Starves: $n_starves" 150682ed706SPaul E. McKenney fi 1515708c647SPaul E. McKenney print_warning Summary: $summary 152d600e06bSPaul E. McKenney cat $T.diags >> $file.diags 153d600e06bSPaul E. McKenneyfi 154b4c1906fSPaul E. McKenneyfor i in $file.*.diags 155b4c1906fSPaul E. McKenneydo 156b4c1906fSPaul E. McKenney if test -f "$i" 157b4c1906fSPaul E. McKenney then 158b4c1906fSPaul E. McKenney cat $i >> $file.diags 159b4c1906fSPaul E. McKenney fi 160b4c1906fSPaul E. McKenneydone 161d600e06bSPaul E. McKenneyif ! test -s $file.diags 162d600e06bSPaul E. McKenneythen 163d600e06bSPaul E. McKenney rm -f $file.diags 164c87b9c60SPaul E. McKenneyfi 165