| #!/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 | |