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