| #!/bin/bash -e |
| # CoreSight concurrent threads (exclusive) |
| |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| # If CoreSight is not available, skip the test |
| perf list pmu | grep -q cs_etm || exit 2 |
| |
| tmpdir=$(mktemp -d /tmp/__perf_test.coresight_concurrent_threads.XXXXX) |
| |
| cleanup() { |
| rm -rf "${tmpdir}" |
| trap - EXIT TERM INT |
| } |
| |
| trap_cleanup() { |
| cleanup |
| exit 1 |
| } |
| trap trap_cleanup EXIT TERM INT |
| |
| cf="$tmpdir/ctl" |
| af="$tmpdir/ack" |
| mkfifo "$cf" "$af" |
| |
| nthreads=10 |
| |
| # Timestamps off to reduce trace size, start disabled and use the control FIFO |
| # to only record the workload and not startup. |
| perf record -o "$tmpdir/data" -e cs_etm/timestamp=0/u -D -1 --control fifo:"$cf","$af" \ |
| -- perf test --record-ctl fifo:"$cf","$af" -w named_threads $nthreads 1 > /dev/null 2>&1 |
| |
| perf script -i "$tmpdir/data" > "$tmpdir/script" 2>/dev/null |
| |
| # Check all threads were traced and they have the correct thread name and symbol |
| for i in $(seq 1 $nthreads); do |
| if ! grep -q "thread${i} .* named_threads_thread${i}" "$tmpdir/script"; then |
| echo "Error: thread${i} missing" >&2 |
| cleanup |
| exit 1 |
| fi |
| done |
| |
| cleanup |
| exit 0 |