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