On Thu, Jun 10, 2021 at 06:10:14PM -0700, 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 > > v3 -> v4: > > V3 was dropped because it was breaking x86 selftests builds (reported by > the kernel test robot). > - rename vm_handle_exception to vm_install_sync_handler instead of > vm_install_vector_handlers. [Sean] > - use a single level of routing for exception handling. [Sean] > - fix issue in x86_64/sync_regs_test when switching to ucalls for unhandled > exceptions reporting. > > v2 -> v3: > > Addressed comments from Andrew and Marc (thanks again). Also, many thanks for > the reviews and tests from Eric and Zenghui. > - 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 (6): > KVM: selftests: Rename vm_handle_exception > KVM: selftests: Complete x86_64/sync_regs_test ucall > 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 | 126 +++++++++ > .../selftests/kvm/lib/aarch64/processor.c | 97 +++++++ > .../selftests/kvm/lib/x86_64/processor.c | 23 +- > .../testing/selftests/kvm/x86_64/evmcs_test.c | 4 +- > .../selftests/kvm/x86_64/kvm_pv_test.c | 2 +- > .../selftests/kvm/x86_64/sync_regs_test.c | 7 +- > .../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 +- > 15 files changed, 592 insertions(+), 50 deletions(-) > create mode 100644 tools/testing/selftests/kvm/aarch64/debug-exceptions.c > create mode 100644 tools/testing/selftests/kvm/lib/aarch64/handlers.S > > -- > 2.32.0.272.g935e593368-goog > For the series Reviewed-by: Andrew Jones <drjones@xxxxxxxxxx> Thanks, drew