1*2010776fSPaul E. McKenney#!/bin/sh 2*2010776fSPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+ 3*2010776fSPaul E. McKenney# 4*2010776fSPaul E. McKenney# Extract any RCU CPU stall warnings present in specified file. 5*2010776fSPaul E. McKenney# Filter out clocksource lines. Note that preceding-lines excludes the 6*2010776fSPaul E. McKenney# initial line of the stall warning but trailing-lines includes it. 7*2010776fSPaul E. McKenney# 8*2010776fSPaul E. McKenney# Usage: extract-stall.sh dmesg-file [ preceding-lines [ trailing-lines ] ] 9*2010776fSPaul E. McKenney 10*2010776fSPaul E. McKenneyecho $1 11*2010776fSPaul E. McKenneypreceding_lines="${2-3}" 12*2010776fSPaul E. McKenneytrailing_lines="${3-10}" 13*2010776fSPaul E. McKenney 14*2010776fSPaul E. McKenneyawk -v preceding_lines="$preceding_lines" -v trailing_lines="$trailing_lines" ' 15*2010776fSPaul E. McKenneysuffix <= 0 { 16*2010776fSPaul E. McKenney for (i = preceding_lines; i > 0; i--) 17*2010776fSPaul E. McKenney last[i] = last[i - 1]; 18*2010776fSPaul E. McKenney last[0] = $0; 19*2010776fSPaul E. McKenney} 20*2010776fSPaul E. McKenney 21*2010776fSPaul E. McKenneysuffix > 0 { 22*2010776fSPaul E. McKenney print $0; 23*2010776fSPaul E. McKenney suffix--; 24*2010776fSPaul E. McKenney if (suffix <= 0) 25*2010776fSPaul E. McKenney print ""; 26*2010776fSPaul E. McKenney} 27*2010776fSPaul E. McKenney 28*2010776fSPaul E. McKenneysuffix <= 0 && /detected stall/ { 29*2010776fSPaul E. McKenney for (i = preceding_lines; i >= 0; i--) 30*2010776fSPaul E. McKenney if (last[i] != "") 31*2010776fSPaul E. McKenney print last[i]; 32*2010776fSPaul E. McKenney suffix = trailing_lines; 33*2010776fSPaul E. McKenney}' < "$1" | tr -d '\015' | grep -v clocksource 34*2010776fSPaul E. McKenney 35