#!/bin/sh # SPDX-License-Identifier: GPL-2.0 # description: Test trace remote non-consuming read # requires: remotes/test . $TEST_DIR/remotes/functions test_trace() { echo 0 > tracing_on assert_unloaded echo 7 > buffer_size_kb echo 1 > tracing_on assert_loaded # Simple test: Emit few events and try to read them for i in $(seq 1 8); do echo $i > write_event done check_trace 1 8 trace # # Test interaction with consuming read # cat trace_pipe > /dev/null & pid=$! sleep 1 kill $pid test $(wc -l < trace) -eq 0 for i in $(seq 16 32); do echo $i > write_event done check_trace 16 32 trace # # Test interaction with reset # echo 0 > trace test $(wc -l < trace) -eq 0 for i in $(seq 1 8); do echo $i > write_event done check_trace 1 8 trace # # Test interaction with lost events # # Ensure the writer is not on the reader page by reloading the buffer reload_remote # Ensure ring-buffer overflow by emitting events from the same CPU for cpu in $(get_cpu_ids); do break done events_per_page=$(($(get_page_size) / $(get_selftest_event_size))) # Approx: does not take TS into account nr_events=$(($events_per_page * 2)) for i in $(seq 1 $nr_events); do taskset -c $cpu echo $i > write_event done id=$(sed -n -e '1s/\[[0-9]*\]\s*[0-9]*.[0-9]*: [a-z]* id=\([0-9]*\)/\1/p' trace) test $id -ne 1 check_trace $id $nr_events trace # # Test per-CPU interface # echo 0 > trace for cpu in $(get_cpu_ids) ; do taskset -c $cpu echo $cpu > write_event done for cpu in $(get_cpu_ids); do cd per_cpu/cpu$cpu/ check_trace $cpu $cpu trace cd - > /dev/null done } if [ -z "$SOURCE_REMOTE_TEST" ]; then set -e setup_remote_test test_trace fi