On Mon, Aug 24, 2026 at 01:00:34PM -0700, Sean Christopherson wrote:
> 
> Ya, looking at this with fresh eyes, AFAICT there's no reason to handcode 
> anything,
> it's just basic arithmetic.
> 
> Side topic, this series doesn't compile for me, so the below isn't even 
> properly
> compile-tested (I hacked in arbitrary literals to get past the undefined 
> references).
> 
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:26:(.text+0xf): undefined 
> reference to `TD_BOOT_PARAMETERS_PER_VCPU'
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:30:(.text+0x17): undefined 
> reference to `TD_PER_VCPU_PARAMETERS_ESP_GVA'
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:33:(.text+0x1d): undefined 
> reference to `TD_BOOT_PARAMETERS_GDT'
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:37:(.text+0x26): undefined 
> reference to `TD_BOOT_PARAMETERS_IDT'
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:44:(.text+0x2f): undefined 
> reference to `TD_BOOT_PARAMETERS_CR4'
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:46:(.text+0x38): undefined 
> reference to `TD_BOOT_PARAMETERS_CR3'
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:48:(.text+0x41): undefined 
> reference to `TD_BOOT_PARAMETERS_CR0'
> /usr/bin/x86_64-linux-gnu-ld.bfd: 
> tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S:54:(.text+0x51): undefined 
> reference to `TD_PER_VCPU_PARAMETERS_GUEST_CODE'
> 
> 
> diff --git a/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h 
> b/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h
> index 89cf6c3485be..439d6f10489e 100644
> --- a/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h
> +++ b/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h

Thanks Sean! This diff is pretty much what I had in mind. Just one
comment below...

> diff --git a/tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c 
> b/tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c
> index 831b0e5160df..170354dcdb66 100644
> --- a/tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c
> +++ b/tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c
> @@ -15,10 +15,11 @@
>  
>  void tdx_vm_setup_boot_code_region(struct kvm_vm *vm)
>  {
> -     size_t total_code_size = TD_BOOT_CODE_SIZE + X86_RESET_VECTOR_SIZE;
> -     gpa_t boot_code_gpa = X86_RESET_VECTOR - TD_BOOT_CODE_SIZE;
> +     const size_t total_size = td_boot_code_end - td_boot;
> +     const size_t boot_code_size = td_boot_reset_vector_trampoline - td_boot;
> +     const gpa_t boot_code_gpa = X86_RESET_VECTOR - boot_code_size;
>       gpa_t alloc_gpa = round_down(boot_code_gpa, PAGE_SIZE);
> -     size_t nr_pages = DIV_ROUND_UP(total_code_size, PAGE_SIZE);
> +     size_t nr_pages = DIV_ROUND_UP(total_size, PAGE_SIZE);

td_boot_code_end and td_boot could both be non-page-aligned, so instead
this can be:

        size_t nr_pages = (SZ_4G - alloc_gpa) / PAGE_SIZE;

>       u64 gmem_flags = 0;
>       gpa_t gpa;
>       u8 *hva;

Reply via email to