~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/rcutorture/bin/parse-console.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
 14 T="`mktemp -d ${TMPDIR-/tmp}/parse-console.sh.XXXXXX`"
 15 file="$1"
 16 title="$2"
 17 
 18 trap 'rm -f $T.seq $T.diags' 0
 19 
 20 . functions.sh
 21 
 22 # Check for presence and readability of console output file
 23 if test -f "$file" -a -r "$file"
 24 then
 25         :
 26 else
 27         echo $title unreadable console output file: $file
 28         exit 1
 29 fi
 30 if grep -Pq '\x00' < $file
 31 then
 32         print_warning Console output contains nul bytes, old qemu still running?
 33 fi
 34 cat /dev/null > $file.diags
 35 
 36 # Check for proper termination, except for rcuscale and refscale.
 37 if test "$TORTURE_SUITE" != rcuscale && test "$TORTURE_SUITE" != refscale
 38 then
 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         grep -E --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
118 fi | tee -a $file.diags
119 
120 console-badness.sh < $file > $T.diags
121 if test -s $T.diags
122 then
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' | grep -E -c 'WARNING:|Warn'`
132         if test "$n_warn" -ne 0
133         then
134                 summary="$summary  Warnings: $n_warn"
135         fi
136         n_bugs=`grep -E -c '\bBUG|Oops:' $file`
137         if test "$n_bugs" -ne 0
138         then
139                 summary="$summary  Bugs: $n_bugs"
140         fi
141         n_kcsan=`grep -E -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=`grep -E -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
173 fi
174 for i in $file.*.diags
175 do
176         if test -f "$i"
177         then
178                 cat $i >> $file.diags
179         fi
180 done
181 if ! test -s $file.diags
182 then
183         rm -f $file.diags
184 fi
185 
186 # Call extract_ftrace_from_console function, if the output is empty,
187 # don't create $file.ftrace. Otherwise output the results to $file.ftrace
188 extract_ftrace_from_console $file > $file.ftrace
189 if [ ! -s $file.ftrace ]; then
190         rm -f $file.ftrace
191 fi

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php