mbox series

[RFC,v5,00/29] TDX KVM selftests

Message ID 20231212204647.2170650-1-sagis@google.com (mailing list archive)
Headers show
Series TDX KVM selftests | expand

Message

Sagi Shahar Dec. 12, 2023, 8:46 p.m. UTC
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

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 apply
  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/T/#u
+ 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/T/#u
+ 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

Comments

Verma, Vishal L June 5, 2024, 6:38 p.m. UTC | #1
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 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.com/

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 apply
>   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/T/#u
> + 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/T/#u
> + 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
>
Sagi Shahar June 5, 2024, 8:10 p.m. UTC | #2
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

> 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.com/

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?
>
> 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 apply
> >   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/T/#u
> > + 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/T/#u
> > + 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
> >
>
Verma, Vishal L June 5, 2024, 8:15 p.m. UTC | #3
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.com/
> 
> 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 apply
> > >   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/T/#u
> > > + 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/T/#u
> > > + 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
> > > 
> >
Verma, Vishal L June 5, 2024, 8:18 p.m. UTC | #4
On Wed, 2024-06-05 at 20:15 +0000, Verma, Vishal L wrote:
> 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.com/
> > 
> > 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?

Actually I see the branch below does contain everything, not just the
MMU prep patches. Sagi, is this fine for a baseline?

> 
> > > 
> > > This is also available in a tree at:
> > > https://github.com/intel/tdx/tree/tdx_kvm_dev-2024-05-30
> > > 
> > > >
Sagi Shahar June 5, 2024, 8:42 p.m. UTC | #5
On Wed, Jun 5, 2024 at 3:18 PM Verma, Vishal L <vishal.l.verma@intel.com> wrote:
>
> On Wed, 2024-06-05 at 20:15 +0000, Verma, Vishal L wrote:
> > 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.com/
> > >
> > > 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?
>
> Actually I see the branch below does contain everything, not just the
> MMU prep patches. Sagi, is this fine for a baseline?
>
Maybe for internal development but I don't think I can post an
upstream patchset based on an internal Intel development branch.
Do you know if there's a plan to post a patch series based on that branch soon?
> >
> > > >
> > > > This is also available in a tree at:
> > > > https://github.com/intel/tdx/tree/tdx_kvm_dev-2024-05-30
> > > >
> > > > >
Edgecombe, Rick P June 5, 2024, 8:56 p.m. UTC | #6
On Wed, 2024-06-05 at 15:42 -0500, Sagi Shahar wrote:
> > > 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?
> > 
> > Actually I see the branch below does contain everything, not just the
> > MMU prep patches. Sagi, is this fine for a baseline?
> > 
> Maybe for internal development but I don't think I can post an
> upstream patchset based on an internal Intel development branch.
> Do you know if there's a plan to post a patch series based on that branch
> soon?

We don't currently have plans to post a whole ~130 patch series. Instead we plan
to post subsections out of the series as they slowly move into a maintainer
branch.

We are trying to use the selftests as part of the development of the base TDX
base series. So we need to be able to run them on development branches to catch
regressions and such. For this purpose, we wouldn't need updates to be posted to
the mailing list. It probably needs either some sort of co-development, or
otherwise we will need to maintain an internal fork of the selftests.

We also need to add some specific tests that can cover gaps in our current
testing. Probably we could contribute those back to the series.

What do you think?
Sagi Shahar June 5, 2024, 9:34 p.m. UTC | #7
On Wed, Jun 5, 2024 at 3:56 PM Edgecombe, Rick P
<rick.p.edgecombe@intel.com> wrote:
>
> On Wed, 2024-06-05 at 15:42 -0500, Sagi Shahar wrote:
> > > > 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?
> > >
> > > Actually I see the branch below does contain everything, not just the
> > > MMU prep patches. Sagi, is this fine for a baseline?
> > >
> > Maybe for internal development but I don't think I can post an
> > upstream patchset based on an internal Intel development branch.
> > Do you know if there's a plan to post a patch series based on that branch
> > soon?
>
> We don't currently have plans to post a whole ~130 patch series. Instead we plan
> to post subsections out of the series as they slowly move into a maintainer
> branch.

So this means that we won't be able to post an updated version of the
selftests for a while unless we lock it to the V19 patchset which is
based on v6.8-rc5
Do you have an estimate on when the TDX patches get to the point where
they could support the basic lifecycle selftest?
>
> We are trying to use the selftests as part of the development of the base TDX
> base series. So we need to be able to run them on development branches to catch
> regressions and such. For this purpose, we wouldn't need updates to be posted to
> the mailing list. It probably needs either some sort of co-development, or
> otherwise we will need to maintain an internal fork of the selftests.
>
> We also need to add some specific tests that can cover gaps in our current
> testing. Probably we could contribute those back to the series.
>
> What do you think?

I will take a look at rebasing the selftests on top of the Intel
development branch and I can post it on our github branch. We can talk
about co-development offline. We already have some code that was
suggested by Isaku as part of our tests.
Edgecombe, Rick P June 5, 2024, 9:44 p.m. UTC | #8
On Wed, 2024-06-05 at 16:34 -0500, Sagi Shahar wrote:
> > We don't currently have plans to post a whole ~130 patch series. Instead we
> > plan
> > to post subsections out of the series as they slowly move into a maintainer
> > branch.
> 
> So this means that we won't be able to post an updated version of the
> selftests for a while unless we lock it to the V19 patchset which is
> based on v6.8-rc5
> Do you have an estimate on when the TDX patches get to the point where
> they could support the basic lifecycle selftest?

I don't understand. The MMU prep series postings come with a full branch in
github that can boot a TD. What is different if we post the other commits as
patches vs just linking to them in github? The selftests won't be upstreamed
ahead of the base TDX support anyway, right?

> > 
> > We are trying to use the selftests as part of the development of the base
> > TDX
> > base series. So we need to be able to run them on development branches to
> > catch
> > regressions and such. For this purpose, we wouldn't need updates to be
> > posted to
> > the mailing list. It probably needs either some sort of co-development, or
> > otherwise we will need to maintain an internal fork of the selftests.
> > 
> > We also need to add some specific tests that can cover gaps in our current
> > testing. Probably we could contribute those back to the series.
> > 
> > What do you think?
> 
> I will take a look at rebasing the selftests on top of the Intel
> development branch and I can post it on our github branch. We can talk
> about co-development offline. We already have some code that was
> suggested by Isaku as part of our tests.

That would be great, thanks.
Edgecombe, Rick P June 21, 2024, 2:51 a.m. UTC | #9
+Yan

On Wed, 2024-06-05 at 14:44 -0700, Rick Edgecombe wrote:
> > I will take a look at rebasing the selftests on top of the Intel
> > development branch and I can post it on our github branch. We can talk
> > about co-development offline. We already have some code that was
> > suggested by Isaku as part of our tests.
> 
> That would be great, thanks.

Hi,

Any update on this rebase?

Thanks,

Rick
Sagi Shahar June 21, 2024, 8:52 p.m. UTC | #10
On Thu, Jun 20, 2024 at 9:51 PM Edgecombe, Rick P
<rick.p.edgecombe@intel.com> wrote:
>
> +Yan
>
> On Wed, 2024-06-05 at 14:44 -0700, Rick Edgecombe wrote:
> > > I will take a look at rebasing the selftests on top of the Intel
> > > development branch and I can post it on our github branch. We can talk
> > > about co-development offline. We already have some code that was
> > > suggested by Isaku as part of our tests.
> >
> > That would be great, thanks.
>
> Hi,
>
> Any update on this rebase?

I finished rebasing the basic life cycle test and found a bug in
tdx_gmem_post_populate which took me some time to debug and fix.
I'm going to start a separate thread to share and discuss the selftests.

>
> Thanks,
>
> Rick