| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0+ |
| |
| usage() { |
| echo Extract any RCU CPU stall warnings present in specified file. |
| echo Filter out clocksource lines. Note that preceding-lines excludes the |
| echo initial line of the stall warning but trailing-lines includes it. |
| echo |
| echo Usage: $(basename $0) dmesg-file [ preceding-lines [ trailing-lines ] ] |
| echo |
| echo Error: $1 |
| } |
| |
| # Terminate the script, if the argument is missing |
| |
| if test -f "$1" && test -r "$1" |
| then |
| : |
| else |
| usage "Console log file \"$1\" missing or unreadable." |
| exit 1 |
| fi |
| |
| echo $1 |
| preceding_lines="${2-3}" |
| trailing_lines="${3-10}" |
| |
| awk -v preceding_lines="$preceding_lines" -v trailing_lines="$trailing_lines" ' |
| suffix <= 0 { |
| for (i = preceding_lines; i > 0; i--) |
| last[i] = last[i - 1]; |
| last[0] = $0; |
| } |
| |
| suffix > 0 { |
| print $0; |
| suffix--; |
| if (suffix <= 0) |
| print ""; |
| } |
| |
| suffix <= 0 && /detected stall/ { |
| for (i = preceding_lines; i >= 0; i--) |
| if (last[i] != "") |
| print last[i]; |
| suffix = trailing_lines; |
| }' < "$1" | tr -d '\015' | grep -v clocksource |
| |