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