On Mon, 26 Jan 2026 10:44:04 +0000
Vincent Donnefort <[email protected]> wrote:

> --- /dev/null
> +++ b/tools/testing/selftests/ftrace/test.d/remotes/trace.tc
> @@ -0,0 +1,127 @@
> +#!/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
> +    echo 0 > tracing_on
> +    echo 0 > trace
> +    assert_unloaded
> +    echo 1 > tracing_on
> +    assert_loaded
> +
> +    # 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
> +
> +    #
> +    # Test with hotplug
> +    #
> +
> +    [ "$(get_cpu_ids | wc -l)" -ge 2 ] || return 0
> +
> +    echo 0 > trace
> +
> +    for cpu in $(get_cpu_ids); do
> +        echo 0 > /sys/devices/system/cpu/cpu$cpu/online

Note, my test VM doesn't have cpu0/online, so this needs to test for the
existence of these files:

 ./ftracetest: 105: 
/work/git/linux.git/tools/testing/selftests/ftrace/test.d/remotes/trace_pipe.tc:
 cannot create /sys/devices/system/cpu/cpu0/online: Permission denied

-- Steve


> +        break
> +    done
> +
> +    for i in $(seq 1 8); do
> +        echo $i > write_event
> +    done
> +
> +    check_trace 1 8 trace
> +
> +    echo 1 > /sys/devices/system/cpu/cpu$cpu/online
> +}
> +
> +if [ -z "$SOURCE_REMOTE_TEST" ]; then
> +    set -e
> +
> +    setup_remote_test
> +    test_trace
> +fi

Reply via email to