Commit ec07906b authored by Vincent Donnefort's avatar Vincent Donnefort Committed by Marc Zyngier
Browse files

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: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: default avatarVincent Donnefort <vdonnefort@google.com>
Link: https://patch.msgid.link/20260401045100.3394299-3-vdonnefort@google.com


Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent ce47b798
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -24,12 +24,21 @@ setup_remote_test()

assert_loaded()
{
	grep -q "(loaded)" buffer_size_kb
	grep -q "(loaded)" buffer_size_kb || return 1
}

assert_unloaded()
{
	grep -q "(unloaded)" buffer_size_kb
	grep -q "(unloaded)" buffer_size_kb || return 1
}

reload_remote()
{
	echo 0 > tracing_on
	clear_trace
	assert_unloaded
	echo 1 > tracing_on
	assert_loaded
}

dump_trace_pipe()
@@ -79,10 +88,12 @@ get_cpu_ids()
    sed -n 's/^processor\s*:\s*\([0-9]\+\).*/\1/p' /proc/cpuinfo
}

get_page_size() {
get_page_size()
{
    sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page
}

get_selftest_event_size() {
get_selftest_event_size()
{
    sed -ne 's/^.*field:.*;.*size:\([0-9][0-9]*\);.*/\1/p' events/*/selftest/format | awk '{s+=$1} END {print s}'
}
+88 −0
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# description: Test trace remote read with an offline CPU
# requires: remotes/test

. $TEST_DIR/remotes/functions

hotunplug_one_cpu()
{
	[ "$(get_cpu_ids | wc -l)" -ge 2 ] || return 1

	for cpu in $(get_cpu_ids); do
		echo 0 > /sys/devices/system/cpu/cpu$cpu/online || return 1
		break
	done

	echo $cpu
}

# Check non-consuming and consuming read
check_read()
{
    for i in $(seq 1 8); do
        echo $i > write_event
    done

    check_trace 1 8 trace

    output=$(dump_trace_pipe)
    check_trace 1 8 $output
    rm $output
}

test_hotplug()
{
    echo 0 > trace
    assert_loaded

    #
    # Test a trace buffer containing an offline CPU
    #

    cpu=$(hotunplug_one_cpu) || exit_unsupported
    trap "echo 1 > /sys/devices/system/cpu/cpu$cpu/online" EXIT

    check_read

    #
    # Test a trace buffer with a missing CPU
    #

    reload_remote

    check_read

    #
    # Test a trace buffer with a CPU added later
    #

    echo 1 > /sys/devices/system/cpu/cpu$cpu/online
    trap "" EXIT
    assert_loaded

    check_read

    # Test if the ring-buffer for the newly added CPU is both writable and
    # readable
    for i in $(seq 1 8); do
        taskset -c $cpu echo $i > write_event
    done

    cd per_cpu/cpu$cpu/

    check_trace 1 8 trace

    output=$(dump_trace_pipe)
    check_trace 1 8 $output
    rm $output

    cd -
}

if [ -z "$SOURCE_REMOTE_TEST" ]; then
    set -e

    setup_remote_test
    test_hotplug
fi
+11 −0
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# description: Test hypervisor trace read with an offline CPU
# requires: remotes/hypervisor/write_event

SOURCE_REMOTE_TEST=1
. $TEST_DIR/remotes/hotplug.tc

set -e
setup_remote "hypervisor"
test_hotplug
+1 −26
Original line number Diff line number Diff line
@@ -58,11 +58,7 @@ test_trace()
    #

    # 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
    reload_remote

    # Ensure ring-buffer overflow by emitting events from the same CPU
    for cpu in $(get_cpu_ids); do
@@ -96,27 +92,6 @@ test_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 || return 0
        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
+0 −25
Original line number Diff line number Diff line
@@ -92,31 +92,6 @@ test_trace_pipe()
        rm $output
        cd - > /dev/null
    done

    #
    # Test interaction 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 || return 0
        break
    done

    for i in $(seq 1 8); do
        echo $i > write_event
    done

    output=$(dump_trace_pipe)

    check_trace 1 8 $output

    rm $output

    echo 1 > /sys/devices/system/cpu/cpu$cpu/online
}

if [ -z "$SOURCE_REMOTE_TEST" ]; then