From 56df78dee9dec368a454fffdf2266cf7f5908512 Mon Sep 17 00:00:00 2001 From: Vincent Donnefort Date: Tue, 1 Oct 2024 17:21:24 +0100 Subject: [PATCH] ANDROID: KVM: arm64: Add ftrace to kselftest for hyp tracefs Add a couple of test to the kselftest for the pKVM hypervisor tracing infrastructure. Bug: 357781595 Change-Id: I7e96a312fbaba3314bd1599d072a6042cc577ff2 Signed-off-by: Vincent Donnefort --- .../selftests/hyp-trace/hyp-trace-test | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/tools/testing/selftests/hyp-trace/hyp-trace-test b/tools/testing/selftests/hyp-trace/hyp-trace-test index 4e57dd5a4164..c017d035c6d9 100755 --- a/tools/testing/selftests/hyp-trace/hyp-trace-test +++ b/tools/testing/selftests/hyp-trace/hyp-trace-test @@ -244,6 +244,80 @@ test_big_bpacking() echo "done." } +validate_event() +{ + local line="$1" + local expect_event="$2" + local expect_arg="$3" + local event="$(echo "$line" | awk '{print $3}')" + local arg="$(echo "$line" | awk '{print $4}')" + + [ $event == $expect_event ] || log_and_die "Expected event '$expect_event', got: '$event'" + [ $arg == $expect_arg ] || log_and_die "Expected arg '$expect_arg', got: '$arg'" +} + +setup_hyp_ftrace() +{ + reset_hyp_trace + echo 1 > events/hypervisor/func/enable + echo 1 > events/hypervisor/func_ret/enable +} + +run_test_ftrace() +{ + local output="$2" + + setup_hyp_ftrace + + echo 1 > tracing_on + write_events 1 + echo 0 > tracing_on + + pid=$(consuming_read $tmp) + sleep 1 + kill $pid + +} + +test_ftrace_nofilter() +{ + local func="__kvm_nvhe_handle___pkvm_selftest_event" + local tmp="$(mktemp)" + + echo "Test ftrace..." + + echo "*" > set_ftrace_filter + + run_test_ftrace $tmp + + grep -qE "func *$func" $tmp || \ + log_and_die "Couldn't find 'func' event with arg '$func'" + grep -q "func_ret $func" $tmp || \ + log_and_die "Couldn't find 'func_ret' event with arg '$func'" + + rm $tmp +} + +test_ftrace_filter() +{ + local func="__kvm_nvhe_handle___pkvm_selftest_event" + local tmp="$(mktemp)" + + echo "Test ftrace filtering..." + + echo "$func" > set_ftrace_filter + + [ "$(cat set_ftrace_filter)" == "$func" ] || \ + log_and_die "Failed to set set_ftrace_filter" + + run_test_ftrace $tmp + + validate_event "$(awk 'NR==1 {print}' $tmp)" "func" "$func" + validate_event "$(awk 'NR==2 {print}' $tmp)" "func_ret" "$func" + + rm $tmp +} + goto_hyp_trace test_reset @@ -251,5 +325,7 @@ test_unloading test_big_bpacking test_ts test_extended_ts +test_ftrace_nofilter +test_ftrace_filter exit 0