All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ackerley Tng <ackerleytng@google.com>
To: aik@amd.com, andrew.jones@linux.dev, binbin.wu@linux.intel.com,
	 brauner@kernel.org, chao.p.peng@linux.intel.com,
	david@kernel.org,  ira.weiny@intel.com, jmattson@google.com,
	jthoughton@google.com,  michael.roth@amd.com, oupton@kernel.org,
	pankaj.gupta@amd.com,  qperret@google.com,
	rick.p.edgecombe@intel.com, rientjes@google.com,
	 shivankg@amd.com, steven.price@arm.com, tabba@google.com,
	 willy@infradead.org, wyihan@google.com, yan.y.zhao@intel.com,
	 forkloop@google.com, pratyush@kernel.org,
	suzuki.poulose@arm.com,  aneesh.kumar@kernel.org,
	Paolo Bonzini <pbonzini@redhat.com>,
	 Sean Christopherson <seanjc@google.com>,
	Thomas Gleixner <tglx@kernel.org>,
	 Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	 Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org,  "H. Peter Anvin" <hpa@zytor.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	 Masami Hiramatsu <mhiramat@kernel.org>,
	 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	 Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	 Shuah Khan <shuah@kernel.org>,
	Vishal Annapurve <vannapurve@google.com>,
	 Andrew Morton <akpm@linux-foundation.org>,
	Chris Li <chrisl@kernel.org>,  Kairui Song <kasong@tencent.com>,
	Kemeng Shi <shikemeng@huaweicloud.com>,
	 Nhat Pham <nphamcs@gmail.com>, Baoquan He <bhe@redhat.com>,
	 Barry Song <baohua@kernel.org>,
	Axel Rasmussen <axelrasmussen@google.com>,
	 Yuanchu Xie <yuanchu@google.com>, Wei Xu <weixugc@google.com>,
	 Youngjun Park <youngjun.park@lge.com>,
	Qi Zheng <qi.zheng@linux.dev>,
	 Shakeel Butt <shakeel.butt@linux.dev>,
	Kiryl Shutsemau <kas@kernel.org>,  Jason Gunthorpe <jgg@ziepe.ca>,
	Vlastimil Babka <vbabka@kernel.org>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	 linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	 linux-kselftest@vger.kernel.org, linux-mm@kvack.org,
	 linux-coco@lists.linux.dev,
	Ackerley Tng <ackerleytng@google.com>
Subject: [PATCH RFC v5 50/53] KVM: selftests: Update private_mem_conversions_test to mmap() guest_memfd
Date: Tue, 28 Apr 2026 16:25:45 -0700	[thread overview]
Message-ID: <20260428-gmem-inplace-conversion-v5-50-d8608ccfca22@google.com> (raw)
In-Reply-To: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com>

Update the private memory conversions selftest to also test conversions
that are done "in-place" via per-guest_memfd memory attributes. In-place
conversions require the host to be able to mmap() the guest_memfd so that
the host and guest can share the same backing physical memory.

This includes several updates, that are conditioned on the system
supporting per-guest_memfd attributes (kvm_has_gmem_attributes):

1. Set up guest_memfd requesting MMAP and INIT_SHARED.

2. With in-place conversions, the host's mapping points directly to the
   guest's memory. When the guest converts a region to private, host access
   to that region is blocked. Update the test to expect a SIGBUS when
   attempting to access the host virtual address (HVA) of private memory.

3. Use vm_mem_set_memory_attributes(), which chooses how to set memory
   attributes based on whether kvm_has_gmem_attributes.

Restrict the test to using VM_MEM_SRC_SHMEM because guest_memfd's required
mmap() flags and page sizes happens to align with those of
VM_MEM_SRC_SHMEM. As long as VM_MEM_SRC_SHMEM is used for src_type,
vm_mem_add() works as intended.

Signed-off-by: Ackerley Tng <ackerleytng@google.com>
Co-developed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 .../kvm/x86/private_mem_conversions_test.c         | 46 ++++++++++++++++++----
 1 file changed, 38 insertions(+), 8 deletions(-)

diff --git a/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c b/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c
index 289ad10063fca..14a25609a8a35 100644
--- a/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c
+++ b/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c
@@ -306,9 +306,14 @@ static void handle_exit_hypercall(struct kvm_vcpu *vcpu)
 	if (do_fallocate)
 		vm_guest_mem_fallocate(vm, gpa, size, map_shared);
 
-	if (set_attributes)
-		vm_set_memory_attributes(vm, gpa, size,
-					 map_shared ? 0 : KVM_MEMORY_ATTRIBUTE_PRIVATE);
+	if (set_attributes) {
+		u64 attrs = map_shared ? 0 : KVM_MEMORY_ATTRIBUTE_PRIVATE;
+		u64 flags = kvm_has_gmem_attributes ?
+			    KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE : 0;
+
+		vm_mem_set_memory_attributes(vm, gpa, size, attrs, flags);
+	}
+
 	run->hypercall.ret = 0;
 }
 
@@ -352,8 +357,20 @@ static void *__test_mem_conversions(void *__vcpu)
 				size_t nr_bytes = min_t(size_t, vm->page_size, size - i);
 				u8 *hva = addr_gpa2hva(vm, gpa + i);
 
-				/* In all cases, the host should observe the shared data. */
-				memcmp_h(hva, gpa + i, uc.args[3], nr_bytes);
+				/*
+				 * When using per-guest_memfd memory attributes,
+				 * i.e. in-place conversion, host accesses will
+				 * point at guest memory and should SIGBUS when
+				 * guest memory is private.  When using per-VM
+				 * attributes, i.e. separate backing for shared
+				 * vs. private, the host should always observe
+				 * the shared data.
+				 */
+				if (kvm_has_gmem_attributes &&
+				    uc.args[0] == SYNC_PRIVATE)
+					TEST_EXPECT_SIGBUS(READ_ONCE(*hva));
+				else
+					memcmp_h(hva, gpa + i, uc.args[3], nr_bytes);
 
 				/* For shared, write the new pattern to guest memory. */
 				if (uc.args[0] == SYNC_SHARED)
@@ -382,6 +399,7 @@ static void test_mem_conversions(enum vm_mem_backing_src_type src_type, u32 nr_v
 	const size_t slot_size = memfd_size / nr_memslots;
 	struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
 	pthread_t threads[KVM_MAX_VCPUS];
+	u64 gmem_flags;
 	struct kvm_vm *vm;
 	int memfd, i;
 
@@ -397,12 +415,17 @@ static void test_mem_conversions(enum vm_mem_backing_src_type src_type, u32 nr_v
 
 	vm_enable_cap(vm, KVM_CAP_EXIT_HYPERCALL, (1 << KVM_HC_MAP_GPA_RANGE));
 
-	memfd = vm_create_guest_memfd(vm, memfd_size, 0);
+	if (kvm_has_gmem_attributes)
+		gmem_flags = GUEST_MEMFD_FLAG_MMAP | GUEST_MEMFD_FLAG_INIT_SHARED;
+	else
+		gmem_flags = 0;
+
+	memfd = vm_create_guest_memfd(vm, memfd_size, gmem_flags);
 
 	for (i = 0; i < nr_memslots; i++)
 		vm_mem_add(vm, src_type, BASE_DATA_GPA + slot_size * i,
 			   BASE_DATA_SLOT + i, slot_size / vm->page_size,
-			   KVM_MEM_GUEST_MEMFD, memfd, slot_size * i, 0);
+			   KVM_MEM_GUEST_MEMFD, memfd, slot_size * i, gmem_flags);
 
 	for (i = 0; i < nr_vcpus; i++) {
 		gpa_t gpa =  BASE_DATA_GPA + i * per_cpu_size;
@@ -452,17 +475,24 @@ static void usage(const char *cmd)
 
 int main(int argc, char *argv[])
 {
-	enum vm_mem_backing_src_type src_type = DEFAULT_VM_MEM_SRC;
+	enum vm_mem_backing_src_type src_type;
 	u32 nr_memslots = 1;
 	u32 nr_vcpus = 1;
 	int opt;
 
 	TEST_REQUIRE(kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SW_PROTECTED_VM));
 
+	src_type = kvm_has_gmem_attributes ? VM_MEM_SRC_SHMEM :
+					     DEFAULT_VM_MEM_SRC;
+
 	while ((opt = getopt(argc, argv, "hm:s:n:")) != -1) {
 		switch (opt) {
 		case 's':
 			src_type = parse_backing_src_type(optarg);
+			TEST_ASSERT(!kvm_has_gmem_attributes ||
+				    src_type == VM_MEM_SRC_SHMEM,
+				    "Testing in-place conversions, only %s mem_type supported\n",
+				    vm_mem_backing_src_alias(VM_MEM_SRC_SHMEM)->name);
 			break;
 		case 'n':
 			nr_vcpus = atoi_positive("nr_vcpus", optarg);

-- 
2.54.0.545.g6539524ca2-goog


WARNING: multiple messages have this Message-ID (diff)
From: Ackerley Tng via B4 Relay <devnull+ackerleytng.google.com@kernel.org>
To: aik@amd.com, andrew.jones@linux.dev, binbin.wu@linux.intel.com,
	 brauner@kernel.org, chao.p.peng@linux.intel.com,
	david@kernel.org,  ira.weiny@intel.com, jmattson@google.com,
	jthoughton@google.com,  michael.roth@amd.com, oupton@kernel.org,
	pankaj.gupta@amd.com,  qperret@google.com,
	rick.p.edgecombe@intel.com, rientjes@google.com,
	 shivankg@amd.com, steven.price@arm.com, tabba@google.com,
	 willy@infradead.org, wyihan@google.com, yan.y.zhao@intel.com,
	 forkloop@google.com, pratyush@kernel.org,
	suzuki.poulose@arm.com,  aneesh.kumar@kernel.org,
	Paolo Bonzini <pbonzini@redhat.com>,
	 Sean Christopherson <seanjc@google.com>,
	Thomas Gleixner <tglx@kernel.org>,
	 Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	 Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org,  "H. Peter Anvin" <hpa@zytor.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	 Masami Hiramatsu <mhiramat@kernel.org>,
	 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	 Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	 Shuah Khan <shuah@kernel.org>,
	Vishal Annapurve <vannapurve@google.com>,
	 Andrew Morton <akpm@linux-foundation.org>,
	Chris Li <chrisl@kernel.org>,  Kairui Song <kasong@tencent.com>,
	Kemeng Shi <shikemeng@huaweicloud.com>,
	 Nhat Pham <nphamcs@gmail.com>, Baoquan He <bhe@redhat.com>,
	 Barry Song <baohua@kernel.org>,
	Axel Rasmussen <axelrasmussen@google.com>,
	 Yuanchu Xie <yuanchu@google.com>, Wei Xu <weixugc@google.com>,
	 Youngjun Park <youngjun.park@lge.com>,
	Qi Zheng <qi.zheng@linux.dev>,
	 Shakeel Butt <shakeel.butt@linux.dev>,
	Kiryl Shutsemau <kas@kernel.org>,  Jason Gunthorpe <jgg@ziepe.ca>,
	Vlastimil Babka <vbabka@kernel.org>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	 linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	 linux-kselftest@vger.kernel.org, linux-mm@kvack.org,
	 linux-coco@lists.linux.dev,
	Ackerley Tng <ackerleytng@google.com>
Subject: [PATCH RFC v5 50/53] KVM: selftests: Update private_mem_conversions_test to mmap() guest_memfd
Date: Tue, 28 Apr 2026 16:25:45 -0700	[thread overview]
Message-ID: <20260428-gmem-inplace-conversion-v5-50-d8608ccfca22@google.com> (raw)
In-Reply-To: <20260428-gmem-inplace-conversion-v5-0-d8608ccfca22@google.com>

From: Ackerley Tng <ackerleytng@google.com>

Update the private memory conversions selftest to also test conversions
that are done "in-place" via per-guest_memfd memory attributes. In-place
conversions require the host to be able to mmap() the guest_memfd so that
the host and guest can share the same backing physical memory.

This includes several updates, that are conditioned on the system
supporting per-guest_memfd attributes (kvm_has_gmem_attributes):

1. Set up guest_memfd requesting MMAP and INIT_SHARED.

2. With in-place conversions, the host's mapping points directly to the
   guest's memory. When the guest converts a region to private, host access
   to that region is blocked. Update the test to expect a SIGBUS when
   attempting to access the host virtual address (HVA) of private memory.

3. Use vm_mem_set_memory_attributes(), which chooses how to set memory
   attributes based on whether kvm_has_gmem_attributes.

Restrict the test to using VM_MEM_SRC_SHMEM because guest_memfd's required
mmap() flags and page sizes happens to align with those of
VM_MEM_SRC_SHMEM. As long as VM_MEM_SRC_SHMEM is used for src_type,
vm_mem_add() works as intended.

Signed-off-by: Ackerley Tng <ackerleytng@google.com>
Co-developed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 .../kvm/x86/private_mem_conversions_test.c         | 46 ++++++++++++++++++----
 1 file changed, 38 insertions(+), 8 deletions(-)

diff --git a/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c b/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c
index 289ad10063fca..14a25609a8a35 100644
--- a/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c
+++ b/tools/testing/selftests/kvm/x86/private_mem_conversions_test.c
@@ -306,9 +306,14 @@ static void handle_exit_hypercall(struct kvm_vcpu *vcpu)
 	if (do_fallocate)
 		vm_guest_mem_fallocate(vm, gpa, size, map_shared);
 
-	if (set_attributes)
-		vm_set_memory_attributes(vm, gpa, size,
-					 map_shared ? 0 : KVM_MEMORY_ATTRIBUTE_PRIVATE);
+	if (set_attributes) {
+		u64 attrs = map_shared ? 0 : KVM_MEMORY_ATTRIBUTE_PRIVATE;
+		u64 flags = kvm_has_gmem_attributes ?
+			    KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE : 0;
+
+		vm_mem_set_memory_attributes(vm, gpa, size, attrs, flags);
+	}
+
 	run->hypercall.ret = 0;
 }
 
@@ -352,8 +357,20 @@ static void *__test_mem_conversions(void *__vcpu)
 				size_t nr_bytes = min_t(size_t, vm->page_size, size - i);
 				u8 *hva = addr_gpa2hva(vm, gpa + i);
 
-				/* In all cases, the host should observe the shared data. */
-				memcmp_h(hva, gpa + i, uc.args[3], nr_bytes);
+				/*
+				 * When using per-guest_memfd memory attributes,
+				 * i.e. in-place conversion, host accesses will
+				 * point at guest memory and should SIGBUS when
+				 * guest memory is private.  When using per-VM
+				 * attributes, i.e. separate backing for shared
+				 * vs. private, the host should always observe
+				 * the shared data.
+				 */
+				if (kvm_has_gmem_attributes &&
+				    uc.args[0] == SYNC_PRIVATE)
+					TEST_EXPECT_SIGBUS(READ_ONCE(*hva));
+				else
+					memcmp_h(hva, gpa + i, uc.args[3], nr_bytes);
 
 				/* For shared, write the new pattern to guest memory. */
 				if (uc.args[0] == SYNC_SHARED)
@@ -382,6 +399,7 @@ static void test_mem_conversions(enum vm_mem_backing_src_type src_type, u32 nr_v
 	const size_t slot_size = memfd_size / nr_memslots;
 	struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
 	pthread_t threads[KVM_MAX_VCPUS];
+	u64 gmem_flags;
 	struct kvm_vm *vm;
 	int memfd, i;
 
@@ -397,12 +415,17 @@ static void test_mem_conversions(enum vm_mem_backing_src_type src_type, u32 nr_v
 
 	vm_enable_cap(vm, KVM_CAP_EXIT_HYPERCALL, (1 << KVM_HC_MAP_GPA_RANGE));
 
-	memfd = vm_create_guest_memfd(vm, memfd_size, 0);
+	if (kvm_has_gmem_attributes)
+		gmem_flags = GUEST_MEMFD_FLAG_MMAP | GUEST_MEMFD_FLAG_INIT_SHARED;
+	else
+		gmem_flags = 0;
+
+	memfd = vm_create_guest_memfd(vm, memfd_size, gmem_flags);
 
 	for (i = 0; i < nr_memslots; i++)
 		vm_mem_add(vm, src_type, BASE_DATA_GPA + slot_size * i,
 			   BASE_DATA_SLOT + i, slot_size / vm->page_size,
-			   KVM_MEM_GUEST_MEMFD, memfd, slot_size * i, 0);
+			   KVM_MEM_GUEST_MEMFD, memfd, slot_size * i, gmem_flags);
 
 	for (i = 0; i < nr_vcpus; i++) {
 		gpa_t gpa =  BASE_DATA_GPA + i * per_cpu_size;
@@ -452,17 +475,24 @@ static void usage(const char *cmd)
 
 int main(int argc, char *argv[])
 {
-	enum vm_mem_backing_src_type src_type = DEFAULT_VM_MEM_SRC;
+	enum vm_mem_backing_src_type src_type;
 	u32 nr_memslots = 1;
 	u32 nr_vcpus = 1;
 	int opt;
 
 	TEST_REQUIRE(kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SW_PROTECTED_VM));
 
+	src_type = kvm_has_gmem_attributes ? VM_MEM_SRC_SHMEM :
+					     DEFAULT_VM_MEM_SRC;
+
 	while ((opt = getopt(argc, argv, "hm:s:n:")) != -1) {
 		switch (opt) {
 		case 's':
 			src_type = parse_backing_src_type(optarg);
+			TEST_ASSERT(!kvm_has_gmem_attributes ||
+				    src_type == VM_MEM_SRC_SHMEM,
+				    "Testing in-place conversions, only %s mem_type supported\n",
+				    vm_mem_backing_src_alias(VM_MEM_SRC_SHMEM)->name);
 			break;
 		case 'n':
 			nr_vcpus = atoi_positive("nr_vcpus", optarg);

-- 
2.54.0.545.g6539524ca2-goog



  parent reply	other threads:[~2026-04-28 23:25 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-28 23:24 [PATCH RFC v5 00/53] guest_memfd: In-place conversion support Ackerley Tng
2026-04-28 23:24 ` Ackerley Tng via B4 Relay
2026-04-28 23:24 ` [PATCH RFC v5 01/53] KVM: guest_memfd: Introduce per-gmem attributes, use to guard user mappings Ackerley Tng
2026-04-28 23:24   ` Ackerley Tng via B4 Relay
2026-05-07  3:34   ` Liam R. Howlett
2026-05-07 18:31     ` Ackerley Tng
2026-04-28 23:24 ` [PATCH RFC v5 02/53] KVM: Rename KVM_GENERIC_MEMORY_ATTRIBUTES to KVM_VM_MEMORY_ATTRIBUTES Ackerley Tng
2026-04-28 23:24   ` Ackerley Tng via B4 Relay
2026-04-28 23:24 ` [PATCH RFC v5 03/53] KVM: Enumerate support for PRIVATE memory iff kvm_arch_has_private_mem is defined Ackerley Tng
2026-04-28 23:24   ` Ackerley Tng via B4 Relay
2026-04-28 23:24 ` [PATCH RFC v5 04/53] KVM: Stub in ability to disable per-VM memory attribute tracking Ackerley Tng
2026-04-28 23:24   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 05/53] KVM: guest_memfd: Wire up kvm_get_memory_attributes() to per-gmem attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 06/53] KVM: x86/mmu: Bug the VM if gmem attributes are queried to determine max mapping level Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 07/53] KVM: guest_memfd: Update kvm_gmem_populate() to use gmem attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 08/53] KVM: guest_memfd: Only prepare folios for private pages Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 09/53] KVM: Move kvm_supported_mem_attributes() to kvm_host.h Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 10/53] KVM: guest_memfd: Add basic support for KVM_SET_MEMORY_ATTRIBUTES2 Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-05-07  3:46   ` Liam R. Howlett
2026-05-07 16:56     ` Ackerley Tng
2026-05-10 13:43       ` Liam R. Howlett
2026-05-12 22:30         ` Ackerley Tng
2026-04-28 23:25 ` [PATCH RFC v5 11/53] KVM: guest_memfd: Ensure pages are not in use before conversion Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 12/53] KVM: guest_memfd: Call arch invalidate hooks on conversion Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 13/53] KVM: guest_memfd: Return early if range already has requested attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 14/53] KVM: guest_memfd: Advertise KVM_SET_MEMORY_ATTRIBUTES2 ioctl Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 15/53] KVM: guest_memfd: Handle lru_add fbatch refcounts during conversion safety check Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 16/53] KVM: guest_memfd: Use actual size for invalidation in kvm_gmem_release() Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 17/53] KVM: guest_memfd: Determine invalidation filter from memory attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 18/53] KVM: Move KVM_VM_MEMORY_ATTRIBUTES config definition to x86 Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 19/53] KVM: Let userspace disable per-VM mem attributes, enable per-gmem attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 20/53] KVM: guest_memfd: Enable INIT_SHARED on guest_memfd for x86 Coco VMs Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 21/53] KVM: guest_memfd: Introduce default handlers for content modes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 22/53] KVM: guest_memfd: Apply content modes while setting memory attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 23/53] KVM: x86: Support SW_PROTECTED_VM in applying content modes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 24/53] KVM: SEV: Make 'uaddr' parameter optional for KVM_SEV_SNP_LAUNCH_UPDATE Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:40   ` Ackerley Tng
2026-04-28 23:25 ` [PATCH RFC v5 25/53] KVM: TDX: Make source page optional for KVM_TDX_INIT_MEM_REGION Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 26/53] KVM: x86: Support SNP and TDX applying content modes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 27/53] KVM: x86: Bug CoCo VM on page fault before finalizing Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 28/53] KVM: Add CAP to enumerate supported SET_MEMORY_ATTRIBUTES2 flags Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 29/53] KVM: selftests: Create gmem fd before "regular" fd when adding memslot Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 30/53] KVM: selftests: Rename guest_memfd{,_offset} to gmem_{fd,offset} Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 31/53] KVM: selftests: Add support for mmap() on guest_memfd in core library Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 32/53] KVM: selftests: Add selftests global for guest memory attributes capability Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 33/53] KVM: selftests: Add helpers for calling ioctls on guest_memfd Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 34/53] KVM: selftests: Test basic single-page conversion flow Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 35/53] KVM: selftests: Test conversion flow when INIT_SHARED Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 36/53] KVM: selftests: Test conversion precision in guest_memfd Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 37/53] KVM: selftests: Test conversion before allocation Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 38/53] KVM: selftests: Convert with allocated folios in different layouts Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 39/53] KVM: selftests: Test that truncation does not change shared/private status Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 40/53] KVM: selftests: Test that shared/private status is consistent across processes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 41/53] KVM: selftests: Test conversion with elevated page refcount Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 42/53] KVM: selftests: Test that conversion to private does not support ZERO Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 43/53] KVM: selftests: Support checking that data not equal expected Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 44/53] KVM: selftests: Test that not specifying a conversion flag scrambles memory contents Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 45/53] KVM: selftests: Reset shared memory after hole-punching Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 46/53] KVM: selftests: Provide function to look up guest_memfd details from gpa Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 47/53] KVM: selftests: Provide common function to set memory attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 48/53] KVM: selftests: Check fd/flags provided to mmap() when setting up memslot Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 49/53] KVM: selftests: Make TEST_EXPECT_SIGBUS thread-safe Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` Ackerley Tng [this message]
2026-04-28 23:25   ` [PATCH RFC v5 50/53] KVM: selftests: Update private_mem_conversions_test to mmap() guest_memfd Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 51/53] KVM: selftests: Add script to exercise private_mem_conversions_test Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 52/53] KVM: selftests: Update pre-fault test to work with per-guest_memfd attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:25 ` [PATCH RFC v5 53/53] KVM: selftests: Update private memory exits test to work with per-gmem attributes Ackerley Tng
2026-04-28 23:25   ` Ackerley Tng via B4 Relay
2026-04-28 23:33 ` [POC PATCH 0/6] guest_memfd in-place conversion selftests for SNP Ackerley Tng
2026-04-28 23:33   ` [POC PATCH 1/6] KVM: selftests: Initialize guest_memfd with INIT_SHARED Ackerley Tng
2026-04-28 23:33   ` [POC PATCH 2/6] KVM: selftests: Use guest_memfd memory contents in-place for SNP launch update Ackerley Tng
2026-04-28 23:33   ` [POC PATCH 3/6] KVM: selftests: Make guest_code_xsave more friendly Ackerley Tng
2026-04-28 23:33   ` [POC PATCH 4/6] KVM: selftests: Allow specifying CoCo-privateness while mapping a page Ackerley Tng
2026-04-28 23:33   ` [POC PATCH 5/6] KVM: selftests: Test conversions for SNP Ackerley Tng
2026-04-28 23:33   ` [POC PATCH 6/6] KVM: selftests: Test content modes ZERO and PRESERVE " Ackerley Tng
2026-04-29 15:06 ` [PATCH RFC v5 00/53] guest_memfd: In-place conversion support Sean Christopherson
2026-04-29 23:51 ` Michael Roth
2026-04-30 23:51   ` Ackerley Tng
2026-05-01 22:21     ` Ackerley Tng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260428-gmem-inplace-conversion-v5-50-d8608ccfca22@google.com \
    --to=ackerleytng@google.com \
    --cc=aik@amd.com \
    --cc=akpm@linux-foundation.org \
    --cc=andrew.jones@linux.dev \
    --cc=aneesh.kumar@kernel.org \
    --cc=axelrasmussen@google.com \
    --cc=baohua@kernel.org \
    --cc=bhe@redhat.com \
    --cc=binbin.wu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=brauner@kernel.org \
    --cc=chao.p.peng@linux.intel.com \
    --cc=chrisl@kernel.org \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=david@kernel.org \
    --cc=forkloop@google.com \
    --cc=hpa@zytor.com \
    --cc=ira.weiny@intel.com \
    --cc=jgg@ziepe.ca \
    --cc=jmattson@google.com \
    --cc=jthoughton@google.com \
    --cc=kas@kernel.org \
    --cc=kasong@tencent.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=michael.roth@amd.com \
    --cc=mingo@redhat.com \
    --cc=nphamcs@gmail.com \
    --cc=oupton@kernel.org \
    --cc=pankaj.gupta@amd.com \
    --cc=pbonzini@redhat.com \
    --cc=pratyush@kernel.org \
    --cc=qi.zheng@linux.dev \
    --cc=qperret@google.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=rientjes@google.com \
    --cc=rostedt@goodmis.org \
    --cc=seanjc@google.com \
    --cc=shakeel.butt@linux.dev \
    --cc=shikemeng@huaweicloud.com \
    --cc=shivankg@amd.com \
    --cc=shuah@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=steven.price@arm.com \
    --cc=suzuki.poulose@arm.com \
    --cc=tabba@google.com \
    --cc=tglx@kernel.org \
    --cc=vannapurve@google.com \
    --cc=vbabka@kernel.org \
    --cc=weixugc@google.com \
    --cc=willy@infradead.org \
    --cc=wyihan@google.com \
    --cc=x86@kernel.org \
    --cc=yan.y.zhao@intel.com \
    --cc=youngjun.park@lge.com \
    --cc=yuanchu@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.