xref: /linux/tools/perf/tests/shell/trace_exit_race.sh (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
1f72bcb92SBenjamin Peterson#!/bin/sh
2f72bcb92SBenjamin Peterson# perf trace exit race
3f72bcb92SBenjamin Peterson# SPDX-License-Identifier: GPL-2.0
4f72bcb92SBenjamin Peterson
5f72bcb92SBenjamin Peterson# Check that the last events of a perf trace'd subprocess are not
6f72bcb92SBenjamin Peterson# lost. Specifically, trace the exiting syscall of "true" 10 times and ensure
7f72bcb92SBenjamin Peterson# the output contains 10 correct lines.
8f72bcb92SBenjamin Peterson
9f72bcb92SBenjamin Peterson# shellcheck source=lib/probe.sh
10f72bcb92SBenjamin Peterson. "$(dirname $0)"/lib/probe.sh
11f72bcb92SBenjamin Peterson
12f72bcb92SBenjamin Petersonskip_if_no_perf_trace || exit 2
13f72bcb92SBenjamin Peterson
147ca41faaSArnaldo Carvalho de Meloif [ "$1" = "-v" ]; then
157ca41faaSArnaldo Carvalho de Melo	verbose="1"
167ca41faaSArnaldo Carvalho de Melofi
177ca41faaSArnaldo Carvalho de Melo
187ca41faaSArnaldo Carvalho de Meloiter=10
19*0b687912SArnaldo Carvalho de Meloregexp=" +[0-9]+\.[0-9]+ [0-9]+ syscalls:sys_enter_exit_group\(\)$"
207ca41faaSArnaldo Carvalho de Melo
21f72bcb92SBenjamin Petersontrace_shutdown_race() {
227ca41faaSArnaldo Carvalho de Melo	for _ in $(seq $iter); do
23*0b687912SArnaldo Carvalho de Melo		perf trace --no-comm -e syscalls:sys_enter_exit_group true 2>>$file
24f72bcb92SBenjamin Peterson	done
257ca41faaSArnaldo Carvalho de Melo	result="$(grep -c -E "$regexp" $file)"
267ca41faaSArnaldo Carvalho de Melo	[ $result = $iter ]
27f72bcb92SBenjamin Peterson}
28f72bcb92SBenjamin Peterson
29f72bcb92SBenjamin Peterson
30f72bcb92SBenjamin Petersonfile=$(mktemp /tmp/temporary_file.XXXXX)
31f72bcb92SBenjamin Peterson
32f72bcb92SBenjamin Peterson# Do not use whatever ~/.perfconfig file, it may change the output
33f72bcb92SBenjamin Peterson# via trace.{show_timestamp,show_prefix,etc}
34f72bcb92SBenjamin Petersonexport PERF_CONFIG=/dev/null
35f72bcb92SBenjamin Peterson
36f72bcb92SBenjamin Petersontrace_shutdown_race
37f72bcb92SBenjamin Petersonerr=$?
387ca41faaSArnaldo Carvalho de Melo
397ca41faaSArnaldo Carvalho de Meloif [ $err != 0 ] && [ "${verbose}" = "1" ]; then
407ca41faaSArnaldo Carvalho de Melo	lines_not_matching=$(mktemp /tmp/temporary_file.XXXXX)
417ca41faaSArnaldo Carvalho de Melo	if grep -v -E "$regexp" $file > $lines_not_matching ; then
427ca41faaSArnaldo Carvalho de Melo		echo "Lines not matching the expected regexp: '$regexp':"
437ca41faaSArnaldo Carvalho de Melo		cat $lines_not_matching
447ca41faaSArnaldo Carvalho de Melo	else
457ca41faaSArnaldo Carvalho de Melo		echo "Missing output, expected $iter but only got $result"
467ca41faaSArnaldo Carvalho de Melo	fi
477ca41faaSArnaldo Carvalho de Melo	rm -f $lines_not_matching
487ca41faaSArnaldo Carvalho de Melofi
497ca41faaSArnaldo Carvalho de Melo
50f72bcb92SBenjamin Petersonrm -f ${file}
51f72bcb92SBenjamin Petersonexit $err
52