[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <d554355c-f678-4f90-a56b-675877be01e9@linux.intel.com>
Date: Fri, 15 Aug 2025 15:18:42 +0800
From: Binbin Wu <binbin.wu@...ux.intel.com>
To: Sagi Shahar <sagis@...gle.com>
Cc: linux-kselftest@...r.kernel.org, Paolo Bonzini <pbonzini@...hat.com>,
Shuah Khan <shuah@...nel.org>, Sean Christopherson <seanjc@...gle.com>,
Ackerley Tng <ackerleytng@...gle.com>, Ryan Afranji <afranji@...gle.com>,
Andrew Jones <ajones@...tanamicro.com>,
Isaku Yamahata <isaku.yamahata@...el.com>,
Erdem Aktas <erdemaktas@...gle.com>,
Rick Edgecombe <rick.p.edgecombe@...el.com>,
Roger Wang <runanwang@...gle.com>, Oliver Upton <oliver.upton@...ux.dev>,
"Pratik R. Sampat" <pratikrajesh.sampat@....com>,
Reinette Chatre <reinette.chatre@...el.com>, Ira Weiny
<ira.weiny@...el.com>, linux-kernel@...r.kernel.org, kvm@...r.kernel.org
Subject: Re: [PATCH v8 29/30] KVM: selftests: TDX: Add TDX UPM selftests for
implicit conversion
On 8/8/2025 4:16 AM, Sagi Shahar wrote:
> From: Ackerley Tng <ackerleytng@...gle.com>
>
> This tests the use of guest memory without explicit TDG.VP.VMCALL<MapGPA>
> calls.
>
> Provide a 2MB memory region to the TDX guest with a 40KB focus area at
> offset 1MB intended to be shared between host and guest. The guest does
> not request memory to be shared or private using TDG.VP.VMCALL<MapGPA> but
> instead relies on memory to be converted automatically based on its
> access via shared or private mapping. The host automatically
> converts the memory when guest exits with KVM_EXIT_MEMORY_FAULT.
>
> The 2MB region starts out as private with the guest filling it with a
> pattern, followed by a check from the host to ensure the host is not able
> to see the pattern. The guest then accesses the 40KB focus area via
> its shared mapping to trigger implicit conversion followed by checks that
> the host and guest has the same view of the memory. Finally the guest
> accesses the 40KB memory via its private mapping to trigger the implicit
> conversion to private followed by checks to confirm this is the case.
>
> Signed-off-by: Ackerley Tng <ackerleytng@...gle.com>
> Signed-off-by: Sagi Shahar <sagis@...gle.com>
> ---
> .../testing/selftests/kvm/x86/tdx_upm_test.c | 88 ++++++++++++++++---
> 1 file changed, 76 insertions(+), 12 deletions(-)
>
> diff --git a/tools/testing/selftests/kvm/x86/tdx_upm_test.c b/tools/testing/selftests/kvm/x86/tdx_upm_test.c
> index 387258ab1a62..2ea5bf6d24b7 100644
> --- a/tools/testing/selftests/kvm/x86/tdx_upm_test.c
> +++ b/tools/testing/selftests/kvm/x86/tdx_upm_test.c
> @@ -150,10 +150,10 @@ enum {
> * Does vcpu_run, and also manages memory conversions if requested by the TD.
> */
> void vcpu_run_and_manage_memory_conversions(struct kvm_vm *vm,
> - struct kvm_vcpu *vcpu)
> + struct kvm_vcpu *vcpu, bool handle_conversions)
> {
> for (;;) {
> - vcpu_run(vcpu);
> + _vcpu_run(vcpu);
Why this change?
> if (vcpu->run->exit_reason == KVM_EXIT_HYPERCALL &&
> vcpu->run->hypercall.nr == KVM_HC_MAP_GPA_RANGE) {
> uint64_t gpa = vcpu->run->hypercall.args[0];
> @@ -164,6 +164,13 @@ void vcpu_run_and_manage_memory_conversions(struct kvm_vm *vm,
> KVM_MAP_GPA_RANGE_ENCRYPTED);
> vcpu->run->hypercall.ret = 0;
> continue;
> + } else if (handle_conversions &&
> + vcpu->run->exit_reason == KVM_EXIT_MEMORY_FAULT) {
> + handle_memory_conversion(vm, vcpu->id, vcpu->run->memory_fault.gpa,
> + vcpu->run->memory_fault.size,
> + vcpu->run->memory_fault.flags ==
> + KVM_MEMORY_EXIT_FLAG_PRIVATE);
> + continue;
> } else if (vcpu->run->exit_reason == KVM_EXIT_IO &&
> vcpu->run->io.port == TDX_UPM_TEST_ACCEPT_PRINT_PORT) {
> uint64_t gpa = tdx_test_read_64bit(vcpu,
> @@ -241,8 +248,48 @@ static void guest_upm_explicit(void)
> tdx_test_success();
> }
>
>
[...]
Powered by blists - more mailing lists