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