From 7395cf84551f229e0118ad5e0fc52072087bd436 Mon Sep 17 00:00:00 2001 From: Vincent Donnefort Date: Tue, 11 Feb 2025 11:29:43 +0000 Subject: [PATCH] ANDROID: KVM: arm64: Fix reset for hyp tracefs While resetting the hypervisor tracing, the head page pointer wasn't updated as well at the stamp and lost events. This might leave the buffer in a corrupted state. While at it, strengthen the reset test to check for timestamp and lost events. Bug: 357781595 Fixes: a368d579d160 ("FROMLIST: KVM: arm64: Add trace interface for hyp tracefs") Change-Id: Ia5dac9634bcb3a2afea9db72ac6b2eda1d9a9730 Signed-off-by: Vincent Donnefort --- arch/arm64/kvm/hyp/nvhe/trace.c | 8 ++++++++ tools/testing/selftests/hyp-trace/hyp-trace-test | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/trace.c b/arch/arm64/kvm/hyp/nvhe/trace.c index e643929958c2..e77bda5fa6e0 100644 --- a/arch/arm64/kvm/hyp/nvhe/trace.c +++ b/arch/arm64/kvm/hyp/nvhe/trace.c @@ -339,6 +339,11 @@ static int rb_cpu_reset(struct hyp_rb_per_cpu *cpu_buffer) prev_status = rb_cpu_disable_writing(cpu_buffer); + if (!rb_set_head_page(cpu_buffer)) + return -ENODEV; + + cpu_buffer->tail_page = cpu_buffer->head_page; + bpage = cpu_buffer->head_page; do { rb_page_reset(bpage); @@ -347,6 +352,9 @@ static int rb_cpu_reset(struct hyp_rb_per_cpu *cpu_buffer) rb_page_reset(cpu_buffer->reader_page); + cpu_buffer->last_overrun = 0; + cpu_buffer->write_stamp = 0; + cpu_buffer->meta->reader.read = 0; cpu_buffer->meta->reader.lost_events = 0; cpu_buffer->meta->entries = 0; diff --git a/tools/testing/selftests/hyp-trace/hyp-trace-test b/tools/testing/selftests/hyp-trace/hyp-trace-test index 868eb81bfb77..4e57dd5a4164 100755 --- a/tools/testing/selftests/hyp-trace/hyp-trace-test +++ b/tools/testing/selftests/hyp-trace/hyp-trace-test @@ -208,8 +208,9 @@ test_reset() echo "Test Reset..." setup_hyp_trace - write_events 5 + write_events 1000 echo 0 > trace + clock_before=$(host_clock) write_events 5 pid=$(consuming_read $tmp) @@ -217,7 +218,7 @@ test_reset() stop_hyp_trace kill $pid - validate_test $tmp 5 0 $(host_clock) + validate_test $tmp 5 $clock_before $(host_clock) rm $tmp