linux/tools/testing/selftests/ftrace/test.d/remotes/trace.tc
Vincent Donnefort ec07906bdc tracing: selftests: Extend hotplug testing for trace remotes
The hotplug testing only tries reading a trace remote buffer, loaded
before a CPU is offline. Extend this testing to cover:

  * A trace remote buffer loaded after a CPU is offline.
  * A trace remote buffer loaded before a CPU is online.

Because of these added test cases, move the hotplug testing into a
separate hotplug.tc file.

Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
Link: https://patch.msgid.link/20260401045100.3394299-3-vdonnefort@google.com
Signed-off-by: Marc Zyngier <maz@kernel.org>
2026-04-02 14:16:09 +01:00

103 lines
1.9 KiB
Bash

#!/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