1*0a1b0325SVincent Donnefort#!/bin/sh 2*0a1b0325SVincent Donnefort# SPDX-License-Identifier: GPL-2.0 3*0a1b0325SVincent Donnefort# description: Test trace remote consuming read 4*0a1b0325SVincent Donnefort# requires: remotes/test 5*0a1b0325SVincent Donnefort 6*0a1b0325SVincent Donnefort. $TEST_DIR/remotes/functions 7*0a1b0325SVincent Donnefort 8*0a1b0325SVincent Donneforttest_trace_pipe() 9*0a1b0325SVincent Donnefort{ 10*0a1b0325SVincent Donnefort echo 0 > tracing_on 11*0a1b0325SVincent Donnefort assert_unloaded 12*0a1b0325SVincent Donnefort 13*0a1b0325SVincent Donnefort # Emit events from the same CPU 14*0a1b0325SVincent Donnefort for cpu in $(get_cpu_ids); do 15*0a1b0325SVincent Donnefort break 16*0a1b0325SVincent Donnefort done 17*0a1b0325SVincent Donnefort 18*0a1b0325SVincent Donnefort # 19*0a1b0325SVincent Donnefort # Simple test: Emit enough events to fill few pages 20*0a1b0325SVincent Donnefort # 21*0a1b0325SVincent Donnefort 22*0a1b0325SVincent Donnefort echo 1024 > buffer_size_kb 23*0a1b0325SVincent Donnefort echo 1 > tracing_on 24*0a1b0325SVincent Donnefort assert_loaded 25*0a1b0325SVincent Donnefort 26*0a1b0325SVincent Donnefort events_per_page=$(($(get_page_size) / $(get_selftest_event_size))) 27*0a1b0325SVincent Donnefort nr_events=$(($events_per_page * 4)) 28*0a1b0325SVincent Donnefort 29*0a1b0325SVincent Donnefort output=$(mktemp $TMPDIR/remote_test.XXXXXX) 30*0a1b0325SVincent Donnefort 31*0a1b0325SVincent Donnefort cat trace_pipe > $output & 32*0a1b0325SVincent Donnefort pid=$! 33*0a1b0325SVincent Donnefort 34*0a1b0325SVincent Donnefort for i in $(seq 1 $nr_events); do 35*0a1b0325SVincent Donnefort taskset -c $cpu echo $i > write_event 36*0a1b0325SVincent Donnefort done 37*0a1b0325SVincent Donnefort 38*0a1b0325SVincent Donnefort echo 0 > tracing_on 39*0a1b0325SVincent Donnefort sleep 1 40*0a1b0325SVincent Donnefort kill $pid 41*0a1b0325SVincent Donnefort 42*0a1b0325SVincent Donnefort check_trace 1 $nr_events $output 43*0a1b0325SVincent Donnefort 44*0a1b0325SVincent Donnefort rm $output 45*0a1b0325SVincent Donnefort 46*0a1b0325SVincent Donnefort # 47*0a1b0325SVincent Donnefort # Test interaction with lost events 48*0a1b0325SVincent Donnefort # 49*0a1b0325SVincent Donnefort 50*0a1b0325SVincent Donnefort assert_unloaded 51*0a1b0325SVincent Donnefort echo 7 > buffer_size_kb 52*0a1b0325SVincent Donnefort echo 1 > tracing_on 53*0a1b0325SVincent Donnefort assert_loaded 54*0a1b0325SVincent Donnefort 55*0a1b0325SVincent Donnefort nr_events=$((events_per_page * 2)) 56*0a1b0325SVincent Donnefort for i in $(seq 1 $nr_events); do 57*0a1b0325SVincent Donnefort taskset -c $cpu echo $i > write_event 58*0a1b0325SVincent Donnefort done 59*0a1b0325SVincent Donnefort 60*0a1b0325SVincent Donnefort output=$(dump_trace_pipe) 61*0a1b0325SVincent Donnefort 62*0a1b0325SVincent Donnefort lost_events=$(sed -n -e '1s/CPU:.*\[LOST \([0-9]*\) EVENTS\]/\1/p' $output) 63*0a1b0325SVincent Donnefort test -n "$lost_events" 64*0a1b0325SVincent Donnefort 65*0a1b0325SVincent Donnefort id=$(sed -n -e '2s/\[[0-9]*\]\s*[0-9]*.[0-9]*: [a-z]* id=\([0-9]*\)/\1/p' $output) 66*0a1b0325SVincent Donnefort test "$id" -eq $(($lost_events + 1)) 67*0a1b0325SVincent Donnefort 68*0a1b0325SVincent Donnefort # Drop [LOST EVENTS] line 69*0a1b0325SVincent Donnefort sed -i '1d' $output 70*0a1b0325SVincent Donnefort 71*0a1b0325SVincent Donnefort check_trace $id $nr_events $output 72*0a1b0325SVincent Donnefort 73*0a1b0325SVincent Donnefort rm $output 74*0a1b0325SVincent Donnefort 75*0a1b0325SVincent Donnefort # 76*0a1b0325SVincent Donnefort # Test per-CPU interface 77*0a1b0325SVincent Donnefort # 78*0a1b0325SVincent Donnefort 79*0a1b0325SVincent Donnefort echo 0 > trace 80*0a1b0325SVincent Donnefort echo 1 > tracing_on 81*0a1b0325SVincent Donnefort 82*0a1b0325SVincent Donnefort for cpu in $(get_cpu_ids); do 83*0a1b0325SVincent Donnefort taskset -c $cpu echo $cpu > write_event 84*0a1b0325SVincent Donnefort done 85*0a1b0325SVincent Donnefort 86*0a1b0325SVincent Donnefort for cpu in $(get_cpu_ids); do 87*0a1b0325SVincent Donnefort cd per_cpu/cpu$cpu/ 88*0a1b0325SVincent Donnefort output=$(dump_trace_pipe) 89*0a1b0325SVincent Donnefort 90*0a1b0325SVincent Donnefort check_trace $cpu $cpu $output 91*0a1b0325SVincent Donnefort 92*0a1b0325SVincent Donnefort rm $output 93*0a1b0325SVincent Donnefort cd - > /dev/null 94*0a1b0325SVincent Donnefort done 95*0a1b0325SVincent Donnefort} 96*0a1b0325SVincent Donnefort 97*0a1b0325SVincent Donnefortif [ -z "$SOURCE_REMOTE_TEST" ]; then 98*0a1b0325SVincent Donnefort set -e 99*0a1b0325SVincent Donnefort 100*0a1b0325SVincent Donnefort setup_remote_test 101*0a1b0325SVincent Donnefort test_trace_pipe 102*0a1b0325SVincent Donnefortfi 103