mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 07:51:31 -04:00
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>
This commit is contained in:
committed by
Marc Zyngier
parent
ce47b798ed
commit
ec07906bdc
@@ -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
tools/testing/selftests/ftrace/test.d/remotes/hotplug.tc
Normal file
88
tools/testing/selftests/ftrace/test.d/remotes/hotplug.tc
Normal file
@@ -0,0 +1,88 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user