On Thu, May 13, 2021 at 08:37:33AM +0200, Auger Eric wrote: > Hi Ricardo, > > On 5/13/21 2:27 AM, Ricardo Koller wrote: > > Hi, > > > > These patches add a debug exception test in aarch64 KVM selftests while > > also adding basic exception handling support. > > > > The structure of the exception handling is based on its x86 counterpart. > > Tests use the same calls to initialize exception handling and both > > architectures allow tests to override the handler for a particular > > vector, or (vector, ec) for synchronous exceptions in the arm64 case. > > > > The debug test is similar to x86_64/debug_regs, except that the x86 one > > controls the debugging from outside the VM. This proposed arm64 test > > controls and handles debug exceptions from the inside. > > > > Thanks, > > Ricardo > > > > v2 -> v3: > > > > Addressed comments from Andrew and Marc (thanks again). Also, many thanks for > > the reviews and tests from Eric and Zenghui. > You are welcome. This version does not fail anymore on Cavium Sabre so > this looks to fix the previously reported issue. > > Thanks Great, thanks Eric. The issue was that writing to mdscr needed ISBs afterward (discovered by Zenghui). > > Eric > > - add missing ISBs after writing into debug registers. > > - not store/restore of sp_el0 on exceptions. > > - add default handlers for Error and FIQ. > > - change multiple TEST_ASSERT(false, ...) to TEST_FAIL. > > - use Andrew's suggestion regarding __GUEST_ASSERT modifications > > in order to easier implement GUEST_ASSERT_EQ (Thanks Andrew). > > > > v1 -> v2: > > > > Addressed comments from Andrew and Marc (thank you very much): > > - rename vm_handle_exception in all tests. > > - introduce UCALL_UNHANDLED in x86 first. > > - move GUEST_ASSERT_EQ to common utils header. > > - handle sync and other exceptions separately: use two tables (like > > kvm-unit-tests). > > - add two separate functions for installing sync versus other exceptions > > - changes in handlers.S: use the same layout as user_pt_regs, treat the > > EL1t vectors as invalid, refactor the vector table creation to not use > > manual numbering, add comments, remove LR from the stored registers. > > - changes in debug-exceptions.c: remove unused headers, use the common > > GUEST_ASSERT_EQ, use vcpu_run instead of _vcpu_run. > > - changes in processor.h: write_sysreg with support for xzr, replace EL1 > > with current in macro names, define ESR_EC_MASK as ESR_EC_NUM-1. > > > > Ricardo Koller (5): > > KVM: selftests: Rename vm_handle_exception > > KVM: selftests: Introduce UCALL_UNHANDLED for unhandled vector > > reporting > > KVM: selftests: Move GUEST_ASSERT_EQ to utils header > > KVM: selftests: Add exception handling support for aarch64 > > KVM: selftests: Add aarch64/debug-exceptions test > > > > tools/testing/selftests/kvm/.gitignore | 1 + > > tools/testing/selftests/kvm/Makefile | 3 +- > > .../selftests/kvm/aarch64/debug-exceptions.c | 250 ++++++++++++++++++ > > .../selftests/kvm/include/aarch64/processor.h | 83 +++++- > > .../testing/selftests/kvm/include/kvm_util.h | 23 +- > > .../selftests/kvm/include/x86_64/processor.h | 4 +- > > .../selftests/kvm/lib/aarch64/handlers.S | 124 +++++++++ > > .../selftests/kvm/lib/aarch64/processor.c | 131 +++++++++ > > .../selftests/kvm/lib/x86_64/processor.c | 22 +- > > .../selftests/kvm/x86_64/kvm_pv_test.c | 2 +- > > .../selftests/kvm/x86_64/tsc_msrs_test.c | 9 - > > .../kvm/x86_64/userspace_msr_exit_test.c | 8 +- > > .../selftests/kvm/x86_64/xapic_ipi_test.c | 2 +- > > 13 files changed, 615 insertions(+), 47 deletions(-) > > create mode 100644 tools/testing/selftests/kvm/aarch64/debug-exceptions.c > > create mode 100644 tools/testing/selftests/kvm/lib/aarch64/handlers.S > > > _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm