1#!/bin/bash 2# 3# Check the console output from an rcutorture run for oopses. 4# The "file" is a pathname on the local system, and "title" is 5# a text string for error-message purposes. 6# 7# Usage: parse-console.sh file title 8# 9# This program is free software; you can redistribute it and/or modify 10# it under the terms of the GNU General Public License as published by 11# the Free Software Foundation; either version 2 of the License, or 12# (at your option) any later version. 13# 14# This program is distributed in the hope that it will be useful, 15# but WITHOUT ANY WARRANTY; without even the implied warranty of 16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17# GNU General Public License for more details. 18# 19# You should have received a copy of the GNU General Public License 20# along with this program; if not, you can access it online at 21# http://www.gnu.org/licenses/gpl-2.0.html. 22# 23# Copyright (C) IBM Corporation, 2011 24# 25# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com> 26 27file="$1" 28title="$2" 29 30. functions.sh 31 32if grep -Pq '\x00' < $file 33then 34 print_warning Console output contains nul bytes, old qemu still running? 35fi 36egrep '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 | grep -v 'ODEBUG: ' | grep -v 'Warning: unable to open an initial console' > $1.diags 37if test -s $1.diags 38then 39 print_warning Assertion failure in $file $title 40 # cat $1.diags 41 summary="" 42 n_badness=`grep -c Badness $1` 43 if test "$n_badness" -ne 0 44 then 45 summary="$summary Badness: $n_badness" 46 fi 47 n_warn=`grep -v 'Warning: unable to open an initial console' $1 | egrep -c 'WARNING:|Warn'` 48 if test "$n_warn" -ne 0 49 then 50 summary="$summary Warnings: $n_warn" 51 fi 52 n_bugs=`egrep -c 'BUG|Oops:' $1` 53 if test "$n_bugs" -ne 0 54 then 55 summary="$summary Bugs: $n_bugs" 56 fi 57 n_calltrace=`grep -c 'Call Trace:' $1` 58 if test "$n_calltrace" -ne 0 59 then 60 summary="$summary Call Traces: $n_calltrace" 61 fi 62 n_lockdep=`grep -c =========== $1` 63 if test "$n_badness" -ne 0 64 then 65 summary="$summary lockdep: $n_badness" 66 fi 67 n_stalls=`egrep -c 'detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state' $1` 68 if test "$n_stalls" -ne 0 69 then 70 summary="$summary Stalls: $n_stalls" 71 fi 72 n_starves=`grep -c 'rcu_.*kthread starved for' $1` 73 if test "$n_starves" -ne 0 74 then 75 summary="$summary Starves: $n_starves" 76 fi 77 print_warning Summary: $summary 78else 79 rm $1.diags 80fi 81