xref: /linux/tools/testing/selftests/ftrace/test.d/remotes/hotplug.tc (revision 7a5f1cd22d47f8ca4b760b6334378ae42c1bd24b)
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3# description: Test trace remote read with an offline CPU
4# requires: remotes/test
5
6. $TEST_DIR/remotes/functions
7
8hotunplug_one_cpu()
9{
10	[ "$(get_cpu_ids | wc -l)" -ge 2 ] || return 1
11
12	for cpu in $(get_cpu_ids); do
13		echo 0 > /sys/devices/system/cpu/cpu$cpu/online || return 1
14		break
15	done
16
17	echo $cpu
18}
19
20# Check non-consuming and consuming read
21check_read()
22{
23    for i in $(seq 1 8); do
24        echo $i > write_event
25    done
26
27    check_trace 1 8 trace
28
29    output=$(dump_trace_pipe)
30    check_trace 1 8 $output
31    rm $output
32}
33
34test_hotplug()
35{
36    echo 0 > trace
37    assert_loaded
38
39    #
40    # Test a trace buffer containing an offline CPU
41    #
42
43    cpu=$(hotunplug_one_cpu) || exit_unsupported
44    trap "echo 1 > /sys/devices/system/cpu/cpu$cpu/online" EXIT
45
46    check_read
47
48    #
49    # Test a trace buffer with a missing CPU
50    #
51
52    reload_remote
53
54    check_read
55
56    #
57    # Test a trace buffer with a CPU added later
58    #
59
60    echo 1 > /sys/devices/system/cpu/cpu$cpu/online
61    trap "" EXIT
62    assert_loaded
63
64    check_read
65
66    # Test if the ring-buffer for the newly added CPU is both writable and
67    # readable
68    for i in $(seq 1 8); do
69        taskset -c $cpu echo $i > write_event
70    done
71
72    cd per_cpu/cpu$cpu/
73
74    check_trace 1 8 trace
75
76    output=$(dump_trace_pipe)
77    check_trace 1 8 $output
78    rm $output
79
80    cd -
81}
82
83if [ -z "$SOURCE_REMOTE_TEST" ]; then
84    set -e
85
86    setup_remote_test
87    test_hotplug
88fi
89