Re: [PATCH v14 12/22] KVM: selftests: Require guest_memfd for TDX VMs

Xiaoyao Li <[email protected]>
Newsgroups org.kernel.vger.linux-kselftest,dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On 7/23/2026 7:13 AM, Lisa Wang wrote:
> Force guest_memfd for TDX VMs.
> 
> KVM supports guest_memfd for TDX private memory. Without in-place
> conversion supports, all pages default attributes are private. Thus,
> set page to "shared" for shared pages.
> 
> Signed-off-by: Lisa Wang <[email protected]>
> ---
>   tools/testing/selftests/kvm/lib/kvm_util.c     | 2 +-
>   tools/testing/selftests/kvm/lib/ucall_common.c | 8 ++++++++
>   2 files changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
> index 0b9d2d383bfa..4a48c4b42095 100644
> --- a/tools/testing/selftests/kvm/lib/kvm_util.c
> +++ b/tools/testing/selftests/kvm/lib/kvm_util.c
> @@ -472,7 +472,7 @@ void kvm_set_files_rlimit(u32 nr_vcpus)
>   static bool is_guest_memfd_required(struct vm_shape shape)
>   {
>   #ifdef __x86_64__
> -	return shape.type == KVM_X86_SNP_VM;
> +	return (shape.type == KVM_X86_SNP_VM || shape.type == KVM_X86_TDX_VM);

Instead of updating is_guest_memfd_required(), I'm thinking how about 
just replacing is_guest_memfd_required() with 
vm_arch_has_protected_memory()?

>   #else
>   	return false;
>   #endif
> diff --git a/tools/testing/selftests/kvm/lib/ucall_common.c b/tools/testing/selftests/kvm/lib/ucall_common.c
> index 029ce21f9f2f..c03dfc763172 100644
> --- a/tools/testing/selftests/kvm/lib/ucall_common.c
> +++ b/tools/testing/selftests/kvm/lib/ucall_common.c
> @@ -27,6 +27,7 @@ static struct ucall_header *ucall_pool;
>   
>   void ucall_init(struct kvm_vm *vm, gpa_t mmio_gpa)
>   {
> +	struct userspace_mem_region *region;
>   	struct ucall_header *hdr;
>   	struct ucall *uc;
>   	gva_t gva;
> @@ -37,6 +38,13 @@ void ucall_init(struct kvm_vm *vm, gpa_t mmio_gpa)
>   	hdr = (struct ucall_header *)addr_gva2hva(vm, gva);
>   	memset(hdr, 0, sizeof(*hdr));
>   
> +	region = vm_get_mem_region(vm, MEM_REGION_DATA);
> +	if (region->region.flags & KVM_MEM_GUEST_MEMFD) {
> +		size_t aligned_sz = align_up(sizeof(*hdr), vm->page_size);
> +
> +		vm_mem_set_shared(vm, addr_gva2gpa(vm, gva), aligned_sz);
> +	}

this diff about the ucall needs to be a separate patch. What's the 
reason to add it to this patch in this version?

>   	for (i = 0; i < KVM_MAX_VCPUS; ++i) {
>   		uc = &hdr->ucalls[i];
>   		uc->hva = uc;
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.