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