Hi Drew, On Tue, Sep 18, 2018 at 07:54:23PM +0200, Andrew Jones wrote: > This series provides KVM selftests that test dirty log tracking on > AArch64 for both 4K and 64K guest page sizes. Additionally the > framework provides an easy way to test dirty log tracking with the > recently posted dynamic IPA and 52bit IPA series[1]. I was trying to parse the commit text of patch 2, and I realized that I don't understand the 'hypercall to userspace' thing at all, which probably means I have no idea how the selftests work overall. I then spent a while reading various bits of documentation in the kernel tree, LWN, etc., only to realize that I don't understand how this test framework actually works. Are the selftests modules, userspace programs, or code that is compiled with the kernel, and (somehow?) run from userspace. I thought the latter, partially based on your explanation at ELC, but then I don't understand how the "compile and run" make target works. Can you help me paint the overall picture, or point me to the piece of documentation/presentation that explains the high-level picture, which I must have obviously missed somehow? Thanks! Christoffer > > The series breaks down into parts as follows: > > 01-02: generalize guest code to host userspace exit support by > introducing "ucalls" - hypercalls to userspace > 03-05: prepare common code for a new architecture > 06-07: add virtual memory setup support for AArch64 > 08: add vcpu setup support for AArch64 > 09: port the dirty log test to AArch64 > 10-11: add 64K guest page size support for the dirty log test > 12-13: prepare the dirty log test to also test > 40-bit guest > physical address setups by allowing the test memory > region to be placed at the top of physical memory > > [1] https://www.spinics.net/lists/arm-kernel/msg676819.html > > Thanks, > drew > > > Andrew Jones (13): > kvm: selftests: vcpu_setup: set cr4.osfxsr > kvm: selftests: introduce ucall > kvm: selftests: move arch-specific files to arch-specific locations > kvm: selftests: add cscope make target > kvm: selftests: tidy up kvm_util > kvm: selftests: add vm_phy_pages_alloc > kvm: selftests: add virt mem support for aarch64 > kvm: selftests: add vcpu support for aarch64 > kvm: selftests: port dirty_log_test to aarch64 > kvm: selftests: introduce new VM mode for 64K pages > kvm: selftests: dirty_log_test: also test 64K pages on aarch64 > kvm: selftests: stop lying to aarch64 tests about PA-bits > kvm: selftests: support high GPAs in dirty_log_test > > tools/testing/selftests/kvm/.gitignore | 11 +- > tools/testing/selftests/kvm/Makefile | 36 +- > tools/testing/selftests/kvm/dirty_log_test.c | 374 +++++++++---- > .../selftests/kvm/include/aarch64/processor.h | 55 ++ > .../testing/selftests/kvm/include/kvm_util.h | 166 +++--- > .../testing/selftests/kvm/include/sparsebit.h | 6 +- > .../testing/selftests/kvm/include/test_util.h | 6 +- > .../kvm/include/{x86.h => x86_64/processor.h} | 24 +- > .../selftests/kvm/include/{ => x86_64}/vmx.h | 6 +- > .../selftests/kvm/lib/aarch64/processor.c | 311 +++++++++++ > tools/testing/selftests/kvm/lib/assert.c | 2 +- > tools/testing/selftests/kvm/lib/kvm_util.c | 499 +++++++----------- > .../selftests/kvm/lib/kvm_util_internal.h | 33 +- > tools/testing/selftests/kvm/lib/ucall.c | 144 +++++ > .../kvm/lib/{x86.c => x86_64/processor.c} | 197 ++++++- > .../selftests/kvm/lib/{ => x86_64}/vmx.c | 4 +- > .../kvm/{ => x86_64}/cr4_cpuid_sync_test.c | 14 +- > .../kvm/{ => x86_64}/set_sregs_test.c | 2 +- > .../selftests/kvm/{ => x86_64}/state_test.c | 25 +- > .../kvm/{ => x86_64}/sync_regs_test.c | 2 +- > .../kvm/{ => x86_64}/vmx_tsc_adjust_test.c | 23 +- > 21 files changed, 1329 insertions(+), 611 deletions(-) > create mode 100644 tools/testing/selftests/kvm/include/aarch64/processor.h > rename tools/testing/selftests/kvm/include/{x86.h => x86_64/processor.h} (98%) > rename tools/testing/selftests/kvm/include/{ => x86_64}/vmx.h (99%) > create mode 100644 tools/testing/selftests/kvm/lib/aarch64/processor.c > create mode 100644 tools/testing/selftests/kvm/lib/ucall.c > rename tools/testing/selftests/kvm/lib/{x86.c => x86_64/processor.c} (85%) > rename tools/testing/selftests/kvm/lib/{ => x86_64}/vmx.c (99%) > rename tools/testing/selftests/kvm/{ => x86_64}/cr4_cpuid_sync_test.c (91%) > rename tools/testing/selftests/kvm/{ => x86_64}/set_sregs_test.c (98%) > rename tools/testing/selftests/kvm/{ => x86_64}/state_test.c (90%) > rename tools/testing/selftests/kvm/{ => x86_64}/sync_regs_test.c (99%) > rename tools/testing/selftests/kvm/{ => x86_64}/vmx_tsc_adjust_test.c (91%) > > -- > 2.17.1 >