[PATCH v7 05/30] KVM: selftests: Update kvm_init_vm_address_properties() for TDX

Sagi Shahar posted 30 patches 3 months, 4 weeks ago
There is a newer version of this series
[PATCH v7 05/30] KVM: selftests: Update kvm_init_vm_address_properties() for TDX
Posted by Sagi Shahar 3 months, 4 weeks ago
From: Isaku Yamahata <isaku.yamahata@intel.com>

Let kvm_init_vm_address_properties() initialize vm->arch.{s_bit, tag_mask}
similar to SEV.

Set shared bit position based on guest maximum physical address width
instead of maximum physical address width, because that is what KVM
uses, refer to setup_tdparams_eptp_controls(), and because maximum physical
address width can be different.

In the case of SRF, guest maximum physical address width is 48 because SRF
does not support 5-level EPT, even though the maximum physical address
width is 52.

Co-developed-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
Signed-off-by: Sagi Shahar <sagis@google.com>
---
 tools/testing/selftests/kvm/lib/x86/processor.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testing/selftests/kvm/lib/x86/processor.c
index d082d429e127..d9f4ecd6ffbc 100644
--- a/tools/testing/selftests/kvm/lib/x86/processor.c
+++ b/tools/testing/selftests/kvm/lib/x86/processor.c
@@ -1166,10 +1166,19 @@ void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits)
 
 void kvm_init_vm_address_properties(struct kvm_vm *vm)
 {
+	uint32_t gpa_bits = kvm_cpu_property(X86_PROPERTY_GUEST_MAX_PHY_ADDR)
+
 	if (is_sev_vm(vm)) {
 		vm->arch.sev_fd = open_sev_dev_path_or_exit();
 		vm->arch.c_bit = BIT_ULL(this_cpu_property(X86_PROPERTY_SEV_C_BIT));
 		vm->gpa_tag_mask = vm->arch.c_bit;
+	} else if (vm->type == KVM_X86_TDX_VM) {
+		TEST_ASSERT(gpa_bits == 48 || gpa_bits == 52,
+			    "TDX: bad X86_PROPERTY_GUEST_MAX_PHY_ADDR value: %u", gpa_bits);
+		vm->arch.sev_fd = -1;
+		vm->arch.s_bit = 1ULL << (gpa_bits - 1);
+		vm->arch.c_bit = 0;
+		vm->gpa_tag_mask = vm->arch.s_bit;
 	} else {
 		vm->arch.sev_fd = -1;
 	}
-- 
2.50.0.rc2.692.g299adb8693-goog
Re: [PATCH v7 05/30] KVM: selftests: Update kvm_init_vm_address_properties() for TDX
Posted by Ira Weiny 2 months, 2 weeks ago
On Fri, Jun 13, 2025 at 12:13:32PM -0700, Sagi Shahar wrote:
> From: Isaku Yamahata <isaku.yamahata@intel.com>
> 

[snip]

> 
> diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testing/selftests/kvm/lib/x86/processor.c
> index d082d429e127..d9f4ecd6ffbc 100644
> --- a/tools/testing/selftests/kvm/lib/x86/processor.c
> +++ b/tools/testing/selftests/kvm/lib/x86/processor.c
> @@ -1166,10 +1166,19 @@ void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits)
>  
>  void kvm_init_vm_address_properties(struct kvm_vm *vm)
>  {
> +	uint32_t gpa_bits = kvm_cpu_property(X86_PROPERTY_GUEST_MAX_PHY_ADDR)

This fails to compile.

Ira

[snip]
Re: [PATCH v7 05/30] KVM: selftests: Update kvm_init_vm_address_properties() for TDX
Posted by Sagi Shahar 2 months, 1 week ago
On Mon, Jul 21, 2025 at 4:51 PM Ira Weiny <ira.weiny@intel.com> wrote:
>
> On Fri, Jun 13, 2025 at 12:13:32PM -0700, Sagi Shahar wrote:
> > From: Isaku Yamahata <isaku.yamahata@intel.com>
> >
>
> [snip]
>
> >
> > diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testing/selftests/kvm/lib/x86/processor.c
> > index d082d429e127..d9f4ecd6ffbc 100644
> > --- a/tools/testing/selftests/kvm/lib/x86/processor.c
> > +++ b/tools/testing/selftests/kvm/lib/x86/processor.c
> > @@ -1166,10 +1166,19 @@ void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits)
> >
> >  void kvm_init_vm_address_properties(struct kvm_vm *vm)
> >  {
> > +     uint32_t gpa_bits = kvm_cpu_property(X86_PROPERTY_GUEST_MAX_PHY_ADDR)
>
> This fails to compile.

Looks like it's a simple case of missing semicolon at the end of the
line, it builds fine if you add it. I can update it in the next
version.
>
> Ira
>
> [snip]
Re: [PATCH v7 05/30] KVM: selftests: Update kvm_init_vm_address_properties() for TDX
Posted by Ira Weiny 2 months ago
Sagi Shahar wrote:
> On Mon, Jul 21, 2025 at 4:51 PM Ira Weiny <ira.weiny@intel.com> wrote:
> >
> > On Fri, Jun 13, 2025 at 12:13:32PM -0700, Sagi Shahar wrote:
> > > From: Isaku Yamahata <isaku.yamahata@intel.com>
> > >
> >
> > [snip]
> >
> > >
> > > diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testing/selftests/kvm/lib/x86/processor.c
> > > index d082d429e127..d9f4ecd6ffbc 100644
> > > --- a/tools/testing/selftests/kvm/lib/x86/processor.c
> > > +++ b/tools/testing/selftests/kvm/lib/x86/processor.c
> > > @@ -1166,10 +1166,19 @@ void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits)
> > >
> > >  void kvm_init_vm_address_properties(struct kvm_vm *vm)
> > >  {
> > > +     uint32_t gpa_bits = kvm_cpu_property(X86_PROPERTY_GUEST_MAX_PHY_ADDR)
> >
> > This fails to compile.
> 
> Looks like it's a simple case of missing semicolon at the end of the
> line, it builds fine if you add it.

Yea.

> I can update it in the next
> version.

When do you expect this to be updated?

It would be nice to see this land soon such that we don't have to keep
carrying these patches out of tree.

Would it help if I review this series?  I thought it was relatively well
reviewed.  But given the above simple mistake perhaps it needs more
review?

Ira
Re: [PATCH v7 05/30] KVM: selftests: Update kvm_init_vm_address_properties() for TDX
Posted by Sagi Shahar 2 months ago
On Tue, Aug 5, 2025 at 10:39 AM Ira Weiny <ira.weiny@intel.com> wrote:
>
> Sagi Shahar wrote:
> > On Mon, Jul 21, 2025 at 4:51 PM Ira Weiny <ira.weiny@intel.com> wrote:
> > >
> > > On Fri, Jun 13, 2025 at 12:13:32PM -0700, Sagi Shahar wrote:
> > > > From: Isaku Yamahata <isaku.yamahata@intel.com>
> > > >
> > >
> > > [snip]
> > >
> > > >
> > > > diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testing/selftests/kvm/lib/x86/processor.c
> > > > index d082d429e127..d9f4ecd6ffbc 100644
> > > > --- a/tools/testing/selftests/kvm/lib/x86/processor.c
> > > > +++ b/tools/testing/selftests/kvm/lib/x86/processor.c
> > > > @@ -1166,10 +1166,19 @@ void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits)
> > > >
> > > >  void kvm_init_vm_address_properties(struct kvm_vm *vm)
> > > >  {
> > > > +     uint32_t gpa_bits = kvm_cpu_property(X86_PROPERTY_GUEST_MAX_PHY_ADDR)
> > >
> > > This fails to compile.
> >
> > Looks like it's a simple case of missing semicolon at the end of the
> > line, it builds fine if you add it.
>
> Yea.
>
> > I can update it in the next
> > version.
>
> When do you expect this to be updated?

I just sent out v8 of the patches.
>
> It would be nice to see this land soon such that we don't have to keep
> carrying these patches out of tree.
>
> Would it help if I review this series?  I thought it was relatively well
> reviewed.  But given the above simple mistake perhaps it needs more
> review?

If you can review v8 that would be great.
>
> Ira