From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9FA42EC57C; Fri, 19 Jun 2026 00:31:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781829110; cv=none; b=d+Kud2KVn3pcNvht6hkk+I9GH0t1/N9Uc+vtMRZrF1/aMGTzE0RMvDIgxIG8yrPi1Qm4DLtzMCM4IpA7WKIaQYOQ54A4WqIFFm1mEKmZ+fyrRnp9t1eiSKw6NcmwG6Qsuz7wJVcmeCdc9SKbf3xEiziB9d0axFrUR6NkO07Hu8E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781829110; c=relaxed/simple; bh=dTjvdbldo6HKcpb1OVxxxBSBTPhC9ZG8R90oBObq0WE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e37x8ktA3zRskQcE4t7U53h4j2O0hVvQXpP0rYE8M3iGFm/ACsqEloGD1RzzkoXE4pAXegeEyM3Mq+WhYXS7BCfTigxAHz62/K46BAGv8DVYlAZ22UO/4GneDrFB2QFovvoRUYxSpISVgfVXVl5IhLnJl/ydv7IKK88UHV4E+pI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PQA+w28p; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PQA+w28p" Received: by smtp.kernel.org (Postfix) with ESMTPS id 78A2FC2BCFB; Fri, 19 Jun 2026 00:31:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1781829110; bh=dTjvdbldo6HKcpb1OVxxxBSBTPhC9ZG8R90oBObq0WE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=PQA+w28p4YnJlJvePg3QGiEXL9kSdUqaoXOi+UNbVWrQEFZX08cr47rJH+9Kxzs1W xMzzPizpzVa4CfxhT0J8pKdqZJawnF2t74ect6zqfadfCBm7lZ1DpHCE/vaWuAbb2h 8pmYRGiavCb7eLTGNMYA+8vI9KX8zNCzh/nfTIhe2Xs/rLvhgZNQX6voT7Df7Z2/sJ v2pEaUlSrU8ZhpjTPhVRLP+Ezhe8aNjV/8DtdITz3GVI8ieb8g6o87bAcL6EgHCOq4 paVq0uCP1jSXo+0BKRfvZjobrSZNP1Cwxqe6ZQU3lA2d05s0BWU9kb9sG7AS6Wp6wU EYjb/gQDcMijg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F071CDB464; Fri, 19 Jun 2026 00:31:50 +0000 (UTC) From: Ackerley Tng via B4 Relay Date: Thu, 18 Jun 2026 17:32:12 -0700 Subject: [PATCH v8 35/46] KVM: selftests: Convert with allocated folios in different layouts Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260618-gmem-inplace-conversion-v8-35-9d2959357853@google.com> References: <20260618-gmem-inplace-conversion-v8-0-9d2959357853@google.com> In-Reply-To: <20260618-gmem-inplace-conversion-v8-0-9d2959357853@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, 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, liam@infradead.org, Paolo Bonzini , Sean Christopherson , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jonathan Corbet , Shuah Khan , Shuah Khan , Vishal Annapurve , Andrew Morton , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Barry Song , Axel Rasmussen , Yuanchu Xie , Wei Xu , Youngjun Park , Qi Zheng , Shakeel Butt , Kiryl Shutsemau , Baoquan He , Jason Gunthorpe , Vlastimil Babka , Baoquan He 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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781829104; l=2233; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=YB4MHWioMUMOBpaWhCcoyCgc6wLuvVO37S+IBwb9CKM=; b=uDlxhnYV+YZ0oFV4bZE5+6ERknddzJH9VyO8hwGfyeiMiR2/Nz9B2wZrjnFmwJdooJMnrwTRF gyNJQjqOB83AUiB/WIBt7GV9w4CsJtjV6zH1i4IUiFcXA7ve0FOgMkg X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Endpoint-Received: by B4 Relay for ackerleytng@google.com/20260225 with auth_id=649 X-Original-From: Ackerley Tng Reply-To: ackerleytng@google.com From: Ackerley Tng Add a guest_memfd selftest to verify that memory conversions work correctly with allocated folios in different layouts. By iterating through which pages are initially faulted, the test covers various layouts of contiguous allocated and unallocated regions, exercising conversion with different range layouts. Signed-off-by: Ackerley Tng Co-developed-by: Sean Christopherson Signed-off-by: Sean Christopherson --- .../kvm/x86/guest_memfd_conversions_test.c | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c b/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c index b43ac196330f1..0b024fb7227f0 100644 --- a/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c +++ b/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c @@ -279,6 +279,36 @@ GMEM_CONVERSION_TEST_INIT_PRIVATE(before_allocation_private) test_convert_to_shared(t, 0, 0, 'A', 'B'); } +/* + * Test that when some of the folios in the conversion range are allocated, + * conversion requests are handled correctly in guest_memfd. Vary the ranges + * allocated before conversion, using test_page, to cover various layouts of + * contiguous allocated and unallocated regions. + */ +GMEM_CONVERSION_MULTIPAGE_TEST_INIT_SHARED(unallocated_folios, 8) +{ + const int second_page_to_fault = 4; + int i; + + /* + * Fault 2 of the pages to test filemap range operations except when + * test_page == second_page_to_fault. + */ + host_do_rmw(t->mem, test_page, 0, 'A'); + if (test_page != second_page_to_fault) + host_do_rmw(t->mem, second_page_to_fault, 0, 'A'); + + gmem_set_private(t->gmem_fd, 0, nr_pages * page_size); + for (i = 0; i < nr_pages; ++i) { + char expected = (i == test_page || i == second_page_to_fault) ? 'A' : 0; + + test_private(t, i, expected, 'B'); + } + + for (i = 0; i < nr_pages; ++i) + test_convert_to_shared(t, i, 'B', 'C', 'D'); +} + int main(int argc, char *argv[]) { TEST_REQUIRE(kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SW_PROTECTED_VM)); -- 2.55.0.rc0.738.g0c8ab3ebcc-goog