cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

parse-console.sh (4175B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0+
      3#
      4# Check the console output from an rcutorture run for oopses.
      5# The "file" is a pathname on the local system, and "title" is
      6# a text string for error-message purposes.
      7#
      8# Usage: parse-console.sh file title
      9#
     10# Copyright (C) IBM Corporation, 2011
     11#
     12# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
     13
     14T=${TMPDIR-/tmp}/parse-console.sh.$$
     15file="$1"
     16title="$2"
     17
     18trap 'rm -f $T.seq $T.diags' 0
     19
     20. functions.sh
     21
     22# Check for presence and readability of console output file
     23if test -f "$file" -a -r "$file"
     24then
     25	:
     26else
     27	echo $title unreadable console output file: $file
     28	exit 1
     29fi
     30if grep -Pq '\x00' < $file
     31then
     32	print_warning Console output contains nul bytes, old qemu still running?
     33fi
     34cat /dev/null > $file.diags
     35
     36# Check for proper termination, except for rcuscale and refscale.
     37if test "$TORTURE_SUITE" != rcuscale && test "$TORTURE_SUITE" != refscale
     38then
     39	# check for abject failure
     40
     41	if grep -q FAILURE $file || grep -q -e '-torture.*!!!' $file
     42	then
     43		nerrs=`grep --binary-files=text '!!!' $file |
     44		tail -1 |
     45		awk '
     46		{
     47			normalexit = 1;
     48			for (i=NF-8;i<=NF;i++) {
     49				if (i <= 0 || i !~ /^[0-9]*$/) {
     50					bangstring = $0;
     51					gsub(/^\[[^]]*] /, "", bangstring);
     52					print bangstring;
     53					normalexit = 0;
     54					exit 0;
     55				}
     56				sum+=$i;
     57			}
     58		}
     59		END {
     60			if (normalexit)
     61				print sum " instances"
     62		}'`
     63		print_bug $title FAILURE, $nerrs
     64		exit
     65	fi
     66
     67	grep --binary-files=text 'torture:.*ver:' $file |
     68	egrep --binary-files=text -v '\(null\)|rtc: 000000000* ' |
     69	sed -e 's/^(initramfs)[^]]*] //' -e 's/^\[[^]]*] //' |
     70	sed -e 's/^.*ver: //' |
     71	awk '
     72	BEGIN	{
     73		ver = 0;
     74		badseq = 0;
     75		}
     76
     77		{
     78		if (!badseq && ($1 + 0 != $1 || $1 <= ver)) {
     79			badseqno1 = ver;
     80			badseqno2 = $1;
     81			badseqnr = NR;
     82			badseq = 1;
     83		}
     84		ver = $1
     85		}
     86
     87	END	{
     88		if (badseq) {
     89			if (badseqno1 == badseqno2 && badseqno2 == ver)
     90				print "GP HANG at " ver " torture stat " badseqnr;
     91			else
     92				print "BAD SEQ " badseqno1 ":" badseqno2 " last:" ver " version " badseqnr;
     93		}
     94		}' > $T.seq
     95
     96	if grep -q SUCCESS $file
     97	then
     98		if test -s $T.seq
     99		then
    100			print_warning $title `cat $T.seq`
    101			echo "   " $file
    102			exit 2
    103		fi
    104	else
    105		if grep -q "_HOTPLUG:" $file
    106		then
    107			print_warning HOTPLUG FAILURES $title `cat $T.seq`
    108			echo "   " $file
    109			exit 3
    110		fi
    111		echo $title no success message, `grep --binary-files=text 'ver:' $file | wc -l` successful version messages
    112		if test -s $T.seq
    113		then
    114			print_warning $title `cat $T.seq`
    115		fi
    116		exit 2
    117	fi
    118fi | tee -a $file.diags
    119
    120console-badness.sh < $file > $T.diags
    121if test -s $T.diags
    122then
    123	print_warning "Assertion failure in $file $title"
    124	# cat $T.diags
    125	summary=""
    126	n_badness=`grep -c Badness $file`
    127	if test "$n_badness" -ne 0
    128	then
    129		summary="$summary  Badness: $n_badness"
    130	fi
    131	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' | egrep -c 'WARNING:|Warn'`
    132	if test "$n_warn" -ne 0
    133	then
    134		summary="$summary  Warnings: $n_warn"
    135	fi
    136	n_bugs=`egrep -c '\bBUG|Oops:' $file`
    137	if test "$n_bugs" -ne 0
    138	then
    139		summary="$summary  Bugs: $n_bugs"
    140	fi
    141	n_kcsan=`egrep -c 'BUG: KCSAN: ' $file`
    142	if test "$n_kcsan" -ne 0
    143	then
    144		if test "$n_bugs" = "$n_kcsan"
    145		then
    146			summary="$summary (all bugs kcsan)"
    147		else
    148			summary="$summary  KCSAN: $n_kcsan"
    149		fi
    150	fi
    151	n_calltrace=`grep -c 'Call Trace:' $file`
    152	if test "$n_calltrace" -ne 0
    153	then
    154		summary="$summary  Call Traces: $n_calltrace"
    155	fi
    156	n_lockdep=`grep -c =========== $file`
    157	if test "$n_badness" -ne 0
    158	then
    159		summary="$summary  lockdep: $n_badness"
    160	fi
    161	n_stalls=`egrep -c 'detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state' $file`
    162	if test "$n_stalls" -ne 0
    163	then
    164		summary="$summary  Stalls: $n_stalls"
    165	fi
    166	n_starves=`grep -c 'rcu_.*kthread starved for' $file`
    167	if test "$n_starves" -ne 0
    168	then
    169		summary="$summary  Starves: $n_starves"
    170	fi
    171	print_warning Summary: $summary
    172	cat $T.diags >> $file.diags
    173fi
    174for i in $file.*.diags
    175do
    176	if test -f "$i"
    177	then
    178		cat $i >> $file.diags
    179	fi
    180done
    181if ! test -s $file.diags
    182then
    183	rm -f $file.diags
    184fi