1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0+ 3 4usage() { 5 echo Extract any RCU CPU stall warnings present in specified file. 6 echo Filter out clocksource lines. Note that preceding-lines excludes the 7 echo initial line of the stall warning but trailing-lines includes it. 8 echo 9 echo Usage: $(basename $0) dmesg-file [ preceding-lines [ trailing-lines ] ] 10 echo 11 echo Error: $1 12} 13 14# Terminate the script, if the argument is missing 15 16if test -f "$1" && test -r "$1" 17then 18 : 19else 20 usage "Console log file \"$1\" missing or unreadable." 21 exit 1 22fi 23 24echo $1 25preceding_lines="${2-3}" 26trailing_lines="${3-10}" 27 28awk -v preceding_lines="$preceding_lines" -v trailing_lines="$trailing_lines" ' 29suffix <= 0 { 30 for (i = preceding_lines; i > 0; i--) 31 last[i] = last[i - 1]; 32 last[0] = $0; 33} 34 35suffix > 0 { 36 print $0; 37 suffix--; 38 if (suffix <= 0) 39 print ""; 40} 41 42suffix <= 0 && /detected stall/ { 43 for (i = preceding_lines; i >= 0; i--) 44 if (last[i] != "") 45 print last[i]; 46 suffix = trailing_lines; 47}' < "$1" | tr -d '\015' | grep -v clocksource 48 49