49 lines · bash
1#!/bin/sh2# 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 the7 echo initial line of the stall warning but trailing-lines includes it.8 echo9 echo Usage: $(basename $0) dmesg-file [ preceding-lines [ trailing-lines ] ]10 echo11 echo Error: $112}13 14# Terminate the script, if the argument is missing15 16if test -f "$1" && test -r "$1"17then18 :19else20 usage "Console log file \"$1\" missing or unreadable."21 exit 122fi23 24echo $125preceding_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 clocksource48 49