Hi,
This is v2 of adding basic support for running nested guests (L2) in
kselftest. After getting feedback from v1 [1], I mostly started over
from scratch. Therefore you won't lose any context if you start here.
Nonetheless, I still compiled the broad changes.
Patch 1 adds GPR save/restore code for guest, and vEL2 exception
vectors.
Patch 2 adds other hypervisor helpers.
Patch 3 adds the hello_nested selftest to jump from vEL2 -> EL1 -> vEL2.
Patch 4 enhances the hello_nested selftest so that vEL1 handles a
hypercall from EL1.
* Changes from v1 [1]:
- Set HCR_EL2.E2H for the guest.
- Pivoted from "userspace setting up everything" to "make L1 more like
a proper hypervisor". Guest EL2 exception vectors, and GPR
save/restore are added. There is also some infrastructure to
save/restore system registers, right now only SP_EL1 is
saved/restored to give L2 a stack. More system registers can be
added in the future.
- Removed the stage-2 page table generator. The stage-2 page table
generator was bad, and the changes needed for the previous point
alone is already making the series larger, so I decided to not add
any guest stage-2 code in this iteration.
Thanks!
[1]:
https://lore.kernel.org/kvmarm/[email protected]/
Wei-Lin Chang (4):
KVM: arm64: selftests: Add GPR save/restore functions for NV
KVM: arm64: sefltests: Add helpers for guest hypervisors
KVM: arm64: sefltests: Add basic NV selftest
KVM: arm64: selftests: Enhance hello_nested test
tools/testing/selftests/kvm/Makefile.kvm | 4 +
.../selftests/kvm/arm64/hello_nested.c | 132 +++++++++++++++++
.../selftests/kvm/include/arm64/nested.h | 62 ++++++++
tools/testing/selftests/kvm/lib/arm64/entry.S | 137 ++++++++++++++++++
.../selftests/kvm/lib/arm64/hyp-entry.S | 77 ++++++++++
.../testing/selftests/kvm/lib/arm64/nested.c | 58 ++++++++
6 files changed, 470 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/entry.S
create mode 100644 tools/testing/selftests/kvm/lib/arm64/hyp-entry.S
create mode 100644 tools/testing/selftests/kvm/lib/arm64/nested.c
--
2.43.0