From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F9894749D5 for ; Wed, 22 Jul 2026 23:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.199 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784762083; cv=none; b=QWdMoeTwNPIoNejueOWWv11cbZyX9YAev++lT4I6fQN6DIicemEBdWmwbc7/CbQAFUw+NVJMmHrDoovary6/HBC/BTjD0zwFdZ6zCCoBrHoMYYjAWonJase4Fr8U+dmtilqgqKjDQCf/ScyoR+nEiqKlOxCzSYko2Fuk1LIzCoA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784762083; c=relaxed/simple; bh=VFBJ0t/KYzCs2iOyhhGs1fkC9wa+psmJ3ukTJr6kCV8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GDeuGX1cl2itfk6iSHN7QpiDKWHDYyfueXctlcjNiOYY6bsaOGYa56WHa+ghk0MrUZmJdUWLhXJkuRMVGKGr7LP6bnjOmTrduqdoWEmOHzjP113Efrf394BBF5jv3suJKNRcBfP2Eimp+IrSX0MX5++vvVcosh9FhYAK1ettQu0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=D5ilMUO7; arc=none smtp.client-ip=209.85.214.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="D5ilMUO7" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cf6acd760cso588855ad.3 for ; Wed, 22 Jul 2026 16:14:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784762081; x=1785366881; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=hvtcY/6dFCZntPWOUjpqqoF1u1G6R7N65DKzf2Q1vxo=; b=D5ilMUO7jh7HTP9H9xBl5GS6adDer7y6ilUCe49DaAXTsZMNe0jl+K2OYx/HLCtzxj BpwJORpgXlKtkvLctpdW/DP9yWxbeRo33vdCXtXSKmmxqcHFU5XZZgPui5o4EUh+yLCl G09ywhqx3g7fb4vN0rfUkrQiRsqiKrUvddJFKqj6QNwOli1kWbTa5eB3U3gdXejLwW+4 nHR4Z6tYuFP1Ef4y79GbYPHbFLsgt6HZQgp1tw+KMM2oXBhA63QI8acuA0PYFsIGd+a2 8wUiZziZv5xpdHgTDeqXLWOqxvn5ScpRks8L8HV9d2ejgwUcXm8Ro0mheemd3nh1Fsbn C+EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784762081; x=1785366881; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=hvtcY/6dFCZntPWOUjpqqoF1u1G6R7N65DKzf2Q1vxo=; b=ZSaJFzk+VnSwko/yE/Wvz/DESetQV/q8D81meoev2/az+QgacLjgVyhJ8rbXePNoi/ 10NjKBcLUMya23MsOHyOqJFJWB+l9kBTjXLsEsHSHR4umKr96WLnKBhD+ukOd1xZNlIP KzN2rMikPJUSs9F+SZkvnTSZS59rEPp/P03QAhCesgkbUXDHfOUhFSBG/Y8KA/8MP/YF ZCVX2QWzgdScYt2UkCPPtxoFTaTAcsPJ7U4FGh9psGqApWmzpYaNwnuwaN1tJfGTitXF 6eGfEeEvPM8Y+wt3aM1KOSwiVbGjp/GXD+SAge6nt/9GDf9SWL30vopkunnUDMImIbYm 7LpA== X-Forwarded-Encrypted: i=1; AHgh+RrK1BtNUP2QkWgQhYjMP53QLLzk1bwdnlYdRxT7PWtaYlnPF3rBH8ozLAswxyoAah1GwhhfDZ/fdbqbV5o=@vger.kernel.org X-Gm-Message-State: AOJu0YywYAqMIaNqYKiNNeSoVG3R9v1ELoK4TKj4AvHokPnOOerLB4+D zPiqxOxIfeIzoFtr8vGFvV078qxYDqpMbM9qwSpJSJ+093tCovcs4+AfS2wSvuegZbBHxKiINWv tyMfGnQ== X-Received: from plbms3.prod.google.com ([2002:a17:903:ac3:b0:2ca:e163:e0c8]) (user=wyihan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e748:b0:2c9:b8b7:5d27 with SMTP id d9443c01a7336-2cfa6a4f988mr10057535ad.1.1784762068777; Wed, 22 Jul 2026 16:14:28 -0700 (PDT) Date: Wed, 22 Jul 2026 23:13:18 +0000 In-Reply-To: <20260722-tdx-selftests-v14-0-15ad654a50db@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260722-tdx-selftests-v14-0-15ad654a50db@google.com> X-Developer-Key: i=wyihan@google.com; a=ed25519; pk=cRi0fKzS5BMxlHyHY2pJv3w/1zcgfYKr6EYGYppdMYc= X-Developer-Signature: v=1; a=ed25519-sha256; t=1784762054; l=3672; i=wyihan@google.com; s=20260319; h=from:subject:message-id; bh=VFBJ0t/KYzCs2iOyhhGs1fkC9wa+psmJ3ukTJr6kCV8=; b=VhHaHVb0I75TaoDJIEAtXtpsU7m6/ncrsMDtWYFpT14qUn134qFdM73dltqi2aFGrCgNQByvn fazU2D+Dgo1Bd/meIx1oMboFmwZ2EQQh9HMJmeWqDkUPlBKETqAPkub X-Mailer: b4 0.14.3 Message-ID: <20260722-tdx-selftests-v14-13-15ad654a50db@google.com> Subject: [PATCH v14 13/22] KVM: selftests: Support guest_memfd in-place conversion From: Lisa Wang To: Andrew Jones , Ackerley Tng , Binbin Wu , Chao Gao , Chenyi Qiang , Dave Hansen , Erdem Aktas , Ira Weiny , Isaku Yamahata , Kiryl Shutsemau , linux-kselftest@vger.kernel.org, Paolo Bonzini , "Pratik R. Sampat" , Reinette Chatre , Rick Edgecombe , Roger Wang , Ryan Afranji , Sagi Shahar , Sean Christopherson , Shuah Khan , Xiaoyao Li , Oliver Upton Cc: Jeremiah McReynolds , kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, x86@kernel.org, Lisa Wang Content-Type: text/plain; charset="utf-8" Set the memory region as shared if guest_memfd in-place conversion is support, so that the KVM selftest framework functions can populate mmap()-ed guest_memfd memory the same way memory from other memory providers are populated. For CoCo VMs, pages that need to be private are explicitly set to private before executing the VM. Signed-off-by: Lisa Wang --- tools/testing/selftests/kvm/lib/kvm_util.c | 20 ++++++++++++++------ tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c | 8 ++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index 4a48c4b42095..e547ea341ff7 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -484,8 +484,10 @@ struct kvm_vm *__vm_create(struct vm_shape shape, u32 nr_runnable_vcpus, u64 nr_pages = vm_nr_pages_required(shape.mode, nr_runnable_vcpus, nr_extra_pages); struct userspace_mem_region *slot0; + u64 gmem_flags = 0; struct kvm_vm *vm; - int i, flags; + int flags = 0; + int i; kvm_set_files_rlimit(nr_runnable_vcpus); @@ -495,14 +497,20 @@ struct kvm_vm *__vm_create(struct vm_shape shape, u32 nr_runnable_vcpus, vm = ____vm_create(shape); /* - * Force GUEST_MEMFD for the primary memory region if necessary, e.g. - * for CoCo VMs that require GUEST_MEMFD backed private memory. + * Force GUEST_MEMFD for the primary memory region if necessary, and + * initialize it as shared if in-place conversion is support, so the + * selftest framework can populate it exactly like other memory + * providers. */ - flags = 0; - if (is_guest_memfd_required(shape)) + if (is_guest_memfd_required(shape)) { flags |= KVM_MEM_GUEST_MEMFD; + if (kvm_has_gmem_attributes) + gmem_flags |= GUEST_MEMFD_FLAG_INIT_SHARED | + GUEST_MEMFD_FLAG_MMAP; + } - vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, nr_pages, flags); + vm_mem_add(vm, VM_MEM_SRC_ANONYMOUS, 0, 0, nr_pages, flags, + -1, 0, gmem_flags); for (i = 0; i < NR_MEM_REGIONS; i++) vm->memslots[i] = 0; 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 2ce8c297f7ed..5bbe51ad0f66 100644 --- a/tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c +++ b/tools/testing/selftests/kvm/lib/x86/tdx/tdx_util.c @@ -17,10 +17,12 @@ void tdx_vm_setup_boot_code_region(struct kvm_vm *vm) gpa_t boot_code_gpa = X86_RESET_VECTOR - TD_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); - const u64 gmem_flags = 0; + u64 gmem_flags = 0; gpa_t gpa; u8 *hva; + if (kvm_has_gmem_attributes) + gmem_flags |= GUEST_MEMFD_FLAG_INIT_SHARED | GUEST_MEMFD_FLAG_MMAP; vm_mem_add(vm, VM_MEM_SRC_SHMEM, alloc_gpa, TD_BOOT_CODE_SLOT, nr_pages, KVM_MEM_GUEST_MEMFD, -1, 0, gmem_flags); @@ -56,9 +58,11 @@ void tdx_vm_setup_boot_parameters_region(struct kvm_vm *vm, u32 nr_runnable_vcpu sizeof(struct td_boot_parameters) + nr_runnable_vcpus * sizeof(struct td_per_vcpu_parameters); int npages = DIV_ROUND_UP(boot_params_size, PAGE_SIZE); - const u64 gmem_flags = 0; + u64 gmem_flags = 0; gpa_t gpa; + if (kvm_has_gmem_attributes) + gmem_flags |= GUEST_MEMFD_FLAG_INIT_SHARED | GUEST_MEMFD_FLAG_MMAP; vm_mem_add(vm, VM_MEM_SRC_SHMEM, TD_BOOT_PARAMETERS_GPA, TD_BOOT_PARAMETERS_SLOT, npages, KVM_MEM_GUEST_MEMFD, -1, 0, gmem_flags); -- 2.55.0.229.g6434b31f56-goog