Hi Wei Lin, On Wed, Mar 25, 2026 at 12:36:17AM +0000, Wei-Lin Chang wrote: > Hi, > > This series adds basic support for running nested guests (L2) in > kselftest. The first patch adds library functions. While designing the > APIs for userspace, I referenced Joey's approach for kvm-unit-tests [1]. > In summary, four preparatory functions are provided for userspace to > set up state to run an L2 in EL1: > > - prepare_l2_stack() <- sets up stack for L2 > - prepare_hyp_state() <- sets up vEL2 registers > - prepare_eret_destination() <- userspace passes a function pointer > for L2 to run > - prepare_nested_sync_handler() <- sets up hvc handler in order to > regain control after L2's hvc > > After calling those functions, userspace can vcpu_run(), and when > run_l2() is called within the guest, the supplied function will be run > in L2, with the control flow managed by the library code in nested.c and > nested_asm.S. After running the L2 function, run_l2() will automatically > return. Note that the L2 function supplied by the user does not have to > call hvc. > > Patch 2 demonstrates usage of the APIs introduced above, with a simple > L1 -> L2 -> L1 sequence, with an empty L2 function. > > Patch 3 enhances the library functions by setting up L2 -> L1 stage-2 > translation. Currently the translation is simple, with start level 0, 4 > levels, 4KB granules, normal cachable, 48-bit IA, 40-bit OA. > > [1]: > https://lore.kernel.org/kvmarm/[email protected]/
Look like this selftest assumes nested guest's MMU is disabled (L2 IPA to L1 IPA to PA), but I couldn's find the explicit SCTLR.M bit operation in this series, how do you make sure it is always off? Thanks, Itaru. > > Wei-Lin Chang (3): > KVM: arm64: selftests: Add library functions for NV > KVM: arm64: sefltests: Add basic NV selftest > KVM: arm64: selftests: Enable stage-2 in NV preparation functions > > tools/testing/selftests/kvm/Makefile.kvm | 3 + > .../selftests/kvm/arm64/hello_nested.c | 65 ++++++++ > .../selftests/kvm/include/arm64/nested.h | 25 +++ > .../selftests/kvm/include/arm64/processor.h | 9 + > .../testing/selftests/kvm/lib/arm64/nested.c | 154 ++++++++++++++++++ > .../selftests/kvm/lib/arm64/nested_asm.S | 35 ++++ > 6 files changed, 291 insertions(+) > create mode 100644 tools/testing/selftests/kvm/arm64/hello_nested.c > create mode 100644 tools/testing/selftests/kvm/include/arm64/nested.h > create mode 100644 tools/testing/selftests/kvm/lib/arm64/nested.c > create mode 100644 tools/testing/selftests/kvm/lib/arm64/nested_asm.S > > -- > 2.43.0 >

