Merge tag 'pipe-nonblock-2023-05-06' of git://git.kernel.dk/linux
[linux-block.git] / tools / rcu / extract-stall.sh
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0+
3
4 usage() {
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
16 if test -f "$1" && test -r "$1"
17 then
18         :
19 else
20         usage "Console log file \"$1\" missing or unreadable."
21         exit 1
22 fi
23
24 echo $1
25 preceding_lines="${2-3}"
26 trailing_lines="${3-10}"
27
28 awk -v preceding_lines="$preceding_lines" -v trailing_lines="$trailing_lines" '
29 suffix <= 0 {
30         for (i = preceding_lines; i > 0; i--)
31                 last[i] = last[i - 1];
32         last[0] = $0;
33 }
34
35 suffix > 0 {
36         print $0;
37         suffix--;
38         if (suffix <= 0)
39                 print "";
40 }
41
42 suffix <= 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