On Wed, 2024-06-05 at 15:10 -0500, Sagi Shahar wrote:
On Wed, Jun 5, 2024 at 1:38 PM Verma, Vishal L vishal.l.verma@intel.com wrote:
On Tue, 2023-12-12 at 12:46 -0800, Sagi Shahar wrote:
Hello,
This is v4 of the patch series for TDX selftests.
It has been updated for Intel’s v17 of the TDX host patches which was proposed here: https://lore.kernel.org/all/cover.1699368322.git.isaku.yamahata@intel.com/
The tree can be found at: https://github.com/googleprodkernel/linux-cc/tree/tdx-selftests-rfc-v5
Hello,
I wanted to check if there were any plans from Google to refresh this series for the current TDX patches and the kvm-coco-queue baseline?
I'm going to work on it soon and was planning on using Isaku's V19 of the TDX host patches
That's great, thank you!
I'm setting up a CI system that the team is using to test updates to the different TDX patch series, and it currently runs the KVM Unit tests, and kvm selftests, and we'd like to be able to add these three new TDX tests to that as well.
I tried to take a quick shot at rebasing it, but ran into several conflicts since kvm-coco-queue has in the meantime made changes e.g. in tools/testing/selftests/kvm/lib/x86_64/processor.c vcpu_setup().
If you can help rebase this, Rick's MMU prep series might be a good baseline to use: https://lore.kernel.org/all/20240530210714.364118-1-rick.p.edgecombe@intel.c...
This patch series only includes the basic TDX MMU changes and is missing a lot of the TDX support. Not sure how this can be used as a baseline without the rest of the TDX patches. Are there other patch series that were posted based on this series which provides the rest of the TDX support?
Hm you're right, I was looking more narrowly because of the kvm-coco- queue conflicts, for some of which even v19 might be too old. The MMU prep series uses a much more recent kvm-coco-queue baseline.
Rick, can we post a branch with /everything/ on this MMU prep baseline for this selftest refresh?
This is also available in a tree at: https://github.com/intel/tdx/tree/tdx_kvm_dev-2024-05-30
Thank you, Vishal
Changes from RFC v4:
Added patch to propagate KVM_EXIT_MEMORY_FAULT to userspace.
Minor tweaks to align the tests to the new TDX 1.5 spec such as changes in the expected values in TDG.VP.INFO.
In RFCv5, TDX selftest code is organized into:
- headers in tools/testing/selftests/kvm/include/x86_64/tdx/
- common code in tools/testing/selftests/kvm/lib/x86_64/tdx/
- selftests in tools/testing/selftests/kvm/x86_64/tdx_*
Dependencies
- Peter’s patches, which provide functions for the host to allocate
and track protected memory in the guest. https://lore.kernel.org/all/20230110175057.715453-1-pgonda@google.com/
Further work for this patch series/TODOs
- Sean’s comments for the non-confidential UPM selftests patch series
at https://lore.kernel.org/lkml/Y8dC8WDwEmYixJqt@google.com/T/#u%C2%A0apply here as well
- Add ucall support for TDX selftests
I would also like to acknowledge the following people, who helped review or test patches in previous versions:
- Sean Christopherson seanjc@google.com
- Zhenzhong Duan zhenzhong.duan@intel.com
- Peter Gonda pgonda@google.com
- Andrew Jones drjones@redhat.com
- Maxim Levitsky mlevitsk@redhat.com
- Xiaoyao Li xiaoyao.li@intel.com
- David Matlack dmatlack@google.com
- Marc Orr marcorr@google.com
- Isaku Yamahata isaku.yamahata@gmail.com
- Maciej S. Szmigiero maciej.szmigiero@oracle.com
Links to earlier patch series
- RFC v1: https://lore.kernel.org/lkml/20210726183816.1343022-1-erdemaktas@google.com/...
- RFC v2: https://lore.kernel.org/lkml/20220830222000.709028-1-sagis@google.com/T/#u
- RFC v3: https://lore.kernel.org/lkml/20230121001542.2472357-1-ackerleytng@google.com...
- RFC v4: https://lore.kernel.org/lkml/20230725220132.2310657-1-afranji@google.com/
*** BLURB HERE ***
Ackerley Tng (12): KVM: selftests: Add function to allow one-to-one GVA to GPA mappings KVM: selftests: Expose function that sets up sregs based on VM's mode KVM: selftests: Store initial stack address in struct kvm_vcpu KVM: selftests: Refactor steps in vCPU descriptor table initialization KVM: selftests: TDX: Use KVM_TDX_CAPABILITIES to validate TDs' attribute configuration KVM: selftests: TDX: Update load_td_memory_region for VM memory backed by guest memfd KVM: selftests: Add functions to allow mapping as shared KVM: selftests: Expose _vm_vaddr_alloc KVM: selftests: TDX: Add support for TDG.MEM.PAGE.ACCEPT KVM: selftests: TDX: Add support for TDG.VP.VEINFO.GET KVM: selftests: TDX: Add TDX UPM selftest KVM: selftests: TDX: Add TDX UPM selftests for implicit conversion
Erdem Aktas (3): KVM: selftests: Add helper functions to create TDX VMs KVM: selftests: TDX: Add TDX lifecycle test KVM: selftests: TDX: Adding test case for TDX port IO
Roger Wang (1): KVM: selftests: TDX: Add TDG.VP.INFO test
Ryan Afranji (2): KVM: selftests: TDX: Verify the behavior when host consumes a TD private memory KVM: selftests: TDX: Add shared memory test
Sagi Shahar (11): KVM: selftests: TDX: Add report_fatal_error test KVM: selftests: TDX: Add basic TDX CPUID test KVM: selftests: TDX: Add basic get_td_vmcall_info test KVM: selftests: TDX: Add TDX IO writes test KVM: selftests: TDX: Add TDX IO reads test KVM: selftests: TDX: Add TDX MSR read/write tests KVM: selftests: TDX: Add TDX HLT exit test KVM: selftests: TDX: Add TDX MMIO reads test KVM: selftests: TDX: Add TDX MMIO writes test KVM: selftests: TDX: Add TDX CPUID TDVMCALL test KVM: selftests: Propagate KVM_EXIT_MEMORY_FAULT to userspace
tools/testing/selftests/kvm/Makefile | 8 + .../selftests/kvm/include/kvm_util_base.h | 30 + .../selftests/kvm/include/x86_64/processor.h | 4 + .../kvm/include/x86_64/tdx/td_boot.h | 82 + .../kvm/include/x86_64/tdx/td_boot_asm.h | 16 + .../selftests/kvm/include/x86_64/tdx/tdcall.h | 59 + .../selftests/kvm/include/x86_64/tdx/tdx.h | 65 + .../kvm/include/x86_64/tdx/tdx_util.h | 19 + .../kvm/include/x86_64/tdx/test_util.h | 164 ++ tools/testing/selftests/kvm/lib/kvm_util.c | 101 +- .../selftests/kvm/lib/x86_64/processor.c | 77 +- .../selftests/kvm/lib/x86_64/tdx/td_boot.S | 101 ++ .../selftests/kvm/lib/x86_64/tdx/tdcall.S | 158 ++ .../selftests/kvm/lib/x86_64/tdx/tdx.c | 262 ++++ .../selftests/kvm/lib/x86_64/tdx/tdx_util.c | 558 +++++++ .../selftests/kvm/lib/x86_64/tdx/test_util.c | 101 ++ .../kvm/x86_64/tdx_shared_mem_test.c | 135 ++ .../selftests/kvm/x86_64/tdx_upm_test.c | 469 ++++++ .../selftests/kvm/x86_64/tdx_vm_tests.c | 1319 +++++++++++++++++ 19 files changed, 3693 insertions(+), 35 deletions(-) create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/td_boot.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/td_boot_asm.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/tdcall.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/tdx_util.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/test_util.h create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/td_boot.S create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/tdcall.S create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/tdx_util.c create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/test_util.c create mode 100644 tools/testing/selftests/kvm/x86_64/tdx_shared_mem_test.c create mode 100644 tools/testing/selftests/kvm/x86_64/tdx_upm_test.c create mode 100644 tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c