From nobody Fri Oct 10 17:26:53 2025 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2089.outbound.protection.outlook.com [40.107.96.89]) (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 259711BFE00; Fri, 13 Jun 2025 00:55:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.96.89 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776148; cv=fail; b=d4BATk66rXrtAIgpyhK2NznziLhaXBNBlQ8sGXIwRUPUg/NQvGS81rF9eucSsLsG//avtAVnzNdH4mvTP/F2gfLGP6QF/ZVudaI3JVH4ao5CakjQwxAOQdbZg/aAxycuYUgMaRziH8z4/tvpClSQ7p9Zl7Mat9lk52Xh9IcUmWw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776148; c=relaxed/simple; bh=+TTeox9mmq2ceHjzv7Orpn1tb7hFcgvrqk1Qowiaq/Q=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=U8srXt0SIAJuhPFqi4M2/qfBOxzRtedsbeQB1GNDZJFWF0Efl6HxsO2yxx8fqErZR3hO9JA88SnNRBevCUmLWv5jc3QuyV78gx6P5nRs67ZplwP9T1xoi12IDaJBb1oSmBwpSgTzewBs9LSRyPan7zw5RLXibtom7b5/1WqjwEQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=d1z7xF8e; arc=fail smtp.client-ip=40.107.96.89 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="d1z7xF8e" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G/D9oAcqTqMjeWMxmTxgLXEWgkvXjMN19DD7s9A1XTRVu2qCcGRVQhHaUPhwiyIJQpoXoVtpSurys/CxyGqGe2UMk8pYDwKB5tL3c8oWjdFWPXIH7edvLT6NJArq+XuFxkzRbrZq90du+2jxPfAxIpN/UYkD5MYADHxea+Y1OCFqPmHT7YrhdxQ6wZgVRI96XxA7sPXe9kxBoqftdyR4twMdm7NGHXFHLYeZyahFS6GvqkvCuiGQEVWlC0DAwc0jEhh19zvpfYg41suVf+eACs4WbbeD+iYN4Rax2HIrqgGoB/umOedtX5jA7alGizMOpiTHW7PX22zSr4zr+lP/kg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WTIYLqnHflBJ4kcesaFIiAy5hujCp3BRjYbJNtqNmxc=; b=x+4rgtMZXaU2Vntk8m2/gR5vs1iYXn1euki4S9MHsqmLyxwmcD0nGWifKsaMkxALwcVYOH8fTot+ZxgEZZI3apY/iNa5lca6F4ZWfmW50upjpaT/J+x/R8+XlCXjUUJaeqwDKkuU+Gxz8IsFOEwLSWbauktm9bxy4JRlK4EuyLdCwF8nKmWFOH3mJgR+Ak1hLggg2zOkkcAsFslq8yQC4jDB6Rfct8AqNfSgI0Ay+BgjXnK4ala2/hOGBuoZli+bI17ANAgn/84tWddZKW2gLwzI6NXIjldo47/RQT+Hj+9XRePd6+fNIkeHmrAPqXrgFQE+wedxL6UCswacl8ygkg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WTIYLqnHflBJ4kcesaFIiAy5hujCp3BRjYbJNtqNmxc=; b=d1z7xF8e3HjxLrtS125t24nspXxP54QDxO/uD3aXxtsly/F7aDCHR4QihFM/zp4E0FkxbSu03YE6z3gWBQ5MZIqDUeu9JchAhZQLM2+iuQ1wb7uh17gCv/DKY3AUe4pbTBs1VL/8DTRz3cUc2PPCJdawK7B4ngk/GbZoSdTaiL4= Received: from SJ0PR03CA0275.namprd03.prod.outlook.com (2603:10b6:a03:39e::10) by MW5PR12MB5681.namprd12.prod.outlook.com (2603:10b6:303:19e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.41; Fri, 13 Jun 2025 00:55:41 +0000 Received: from SJ5PEPF000001F3.namprd05.prod.outlook.com (2603:10b6:a03:39e:cafe::f2) by SJ0PR03CA0275.outlook.office365.com (2603:10b6:a03:39e::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8835.19 via Frontend Transport; Fri, 13 Jun 2025 00:55:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F3.mail.protection.outlook.com (10.167.242.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8835.15 via Frontend Transport; Fri, 13 Jun 2025 00:55:41 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 12 Jun 2025 19:55:40 -0500 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , Subject: [PATCH RFC v1 1/5] KVM: guest_memfd: Remove preparation tracking Date: Thu, 12 Jun 2025 19:53:56 -0500 Message-ID: <20250613005400.3694904-2-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250613005400.3694904-1-michael.roth@amd.com> References: <20250613005400.3694904-1-michael.roth@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F3:EE_|MW5PR12MB5681:EE_ X-MS-Office365-Filtering-Correlation-Id: 3189f3cd-f622-4993-751d-08ddaa15052c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|7416014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?XkVb9sVT4WcZe0rydRo3wDqZCA/rPFyVYv7JGsIgLVoQARNep+3e1Twglrsx?= =?us-ascii?Q?8RCFQSTxKKQjpcN/ONkj/tb/+z+fKXcX882S3Ums+yAqggqPI/56Q8jvyv/e?= =?us-ascii?Q?ntTw/4N9NuiE1GZSQlC73W6oA3Xebq1jZiU5rNcpjtZkGlYNimAvT2++xemo?= =?us-ascii?Q?5XOWqh8gweKvbT3dVs4oIFisgJS3PhKi+v2EPoypfNIUvHHzTXbh6tvoDwJI?= =?us-ascii?Q?eGmyREkjMj1dQw5AGI6wlLtzWxvX8HQiVNJ+mZUiV5GzIc6VcPp4u02zTYz7?= =?us-ascii?Q?kRbIJdp9SCVv1VkYTuz2z28L7o8fkJVxzjAhHqXcpP3e8mIsjhEoF7oiFdWt?= =?us-ascii?Q?JjQVsKjdYC62m3p1maQPaW+x4FLXUHyk3JCqwM3/upDJ1ONjOnwTocA361vo?= =?us-ascii?Q?2C7G40JHfe77eoGy1R0h7NHWw28O2kPxfWWE5WOYyqlRxmLLkxcBqDrOf+vJ?= =?us-ascii?Q?rNXpGKCibOAlPXHSKztiQwCXGEPvhTKtwiGlU+EBfUtrDztchpdHl2i2C7Il?= =?us-ascii?Q?TEr5YCN4IdLs1gfsT9HlJ+Mb2PE06KvcHDvq8Gdr5ic6utQj/ifOzn3y3WDJ?= =?us-ascii?Q?5XnLHsTlgcK3+zL3KqoQr9X3ZCwYkkkwFaa7k3o4BVXcBSlc3VN6CdioWrqN?= =?us-ascii?Q?bG9vSL85muTuIHgMbrlgG9Th8BICDqmcmjLMA354rzyuGfXVCfNkJvJPQMfB?= =?us-ascii?Q?5xkbkMEGhj+y7Kzd3cRz3Ulj7gBUjMMuX+4R0anZXIkwpNTfuSh41V4MO+q1?= =?us-ascii?Q?e1pVih4sWWZTG4o9cxIpQer5hsbZybLBiCaysf9N4Le9gom8pX/O1bZVSsFO?= =?us-ascii?Q?jMv0PCkoEBuPbgiflLh3nnLl+YIKrJkKZZ+SQD4FCMtkdRS+OthwCO9TELuN?= =?us-ascii?Q?1xsSutFPs7VMeDF7Ut47smrJKrwjNgbYKA0/q/ybL0gwtfB5KwtDtbGg7TIY?= =?us-ascii?Q?gGMtmOxJ/b0IOi/s7yI1eI7/z7n23/e6icuaziNexaCxPDB0ipsvmrUgsd/Y?= =?us-ascii?Q?1A6/So/CWVqA0Rc3wByrut1iyiIiX5Q6fG2lEa+pHLJPosC585isXkz14VKw?= =?us-ascii?Q?X4Ub0hKOY/PLq+YcOgiLTF4Mn5jqYoR+3UdTiRRfsynT9/bNI2iZfc7f+Upu?= =?us-ascii?Q?ucTAi6+v7473KIwfoGtLJgGrvq3dETocnz+bNZroPB+EfBkXRW3qns9bhzML?= =?us-ascii?Q?DKzbMN+cHYRVdx8mPU5WVhQ4s9H9YpGWpylDHGA4sAHsXWRzuCjL55nNeqXA?= =?us-ascii?Q?0F2QTR6fxa+mP3er8GYg7BGqjvzacubk1lsh0bKDP2aYmkY2rdutckwAfjt/?= =?us-ascii?Q?lJuhAPbSHh0RuNAaO1hGyNKmM18PcJo1BN49Qi73TmOWopGldpAXvfe6IKvC?= =?us-ascii?Q?BYfz9X2gINiOXldzZNmIETPpVGhbLaUN+1ERACDcLq5vx2OEANi/Sc1xUXUs?= =?us-ascii?Q?z3BRL6NkDCHiNRml1/CUnuSDm8h5ExV892mPPSMAXO5rj8rn6cx63fh4Ch8+?= =?us-ascii?Q?OlLYjeCpN9UqS39toSCKW20yt1WwJSNn6t9S?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(376014)(7416014)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 00:55:41.3036 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3189f3cd-f622-4993-751d-08ddaa15052c X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR12MB5681 Content-Type: text/plain; charset="utf-8" guest_memfd currently uses the folio uptodate flag to track: 1) whether or not a page had been cleared before initial usage 2) whether or not the architecture hooks have been issued to put the page in a private state as defined by the architecture In practice, 2) is only actually being tracked for SEV-SNP VMs, and there do not seem to be any plans/reasons that would suggest this will change in the future, so this additional tracking/complexity is not really providing any general benefit to guest_memfd users. Future plans around in-place conversion and hugepage support, where the per-folio uptodate flag is planned to be used purely to track the initial clearing of folios, whereas conversion operations could trigger multiple transitions between 'prepared' and 'unprepared' and thus need separate tracking, will make the burden of tracking this information within guest_memfd even more complex, since preparation generally happens during fault time, on the "read-side" of any global locks that might protect state tracked by guest_memfd, and so may require more complex locking schemes to allow for concurrent handling of page faults for multiple vCPUs where the "preparedness" state tracked by guest_memfd might need to be updated as part of handling the fault. Instead of keeping this current/future complexity within guest_memfd for what is essentially just SEV-SNP, just drop the tracking for 2) and have the arch-specific preparation hooks get triggered unconditionally on every fault so the arch-specific hooks can check the preparation state directly and decide whether or not a folio still needs additional preparation. In the case of SEV-SNP, the preparation state is already checked again via the preparation hooks to avoid double-preparation, so nothing extra needs to be done to update the handling of things there. Signed-off-by: Michael Roth --- virt/kvm/guest_memfd.c | 47 ++++++++++++++---------------------------- 1 file changed, 15 insertions(+), 32 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 35f94a288e52..cc93c502b5d8 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -421,11 +421,6 @@ static int __kvm_gmem_prepare_folio(struct kvm *kvm, s= truct kvm_memory_slot *slo return 0; } =20 -static inline void kvm_gmem_mark_prepared(struct folio *folio) -{ - folio_mark_uptodate(folio); -} - /* * Process @folio, which contains @gfn, so that the guest can use it. * The folio must be locked and the gfn must be contained in @slot. @@ -435,13 +430,7 @@ static inline void kvm_gmem_mark_prepared(struct folio= *folio) static int kvm_gmem_prepare_folio(struct kvm *kvm, struct kvm_memory_slot = *slot, gfn_t gfn, struct folio *folio) { - unsigned long nr_pages, i; pgoff_t index; - int r; - - nr_pages =3D folio_nr_pages(folio); - for (i =3D 0; i < nr_pages; i++) - clear_highpage(folio_page(folio, i)); =20 /* * Preparing huge folios should always be safe, since it should @@ -459,11 +448,8 @@ static int kvm_gmem_prepare_folio(struct kvm *kvm, str= uct kvm_memory_slot *slot, WARN_ON(!IS_ALIGNED(slot->gmem.pgoff, 1 << folio_order(folio))); index =3D gfn - slot->base_gfn + slot->gmem.pgoff; index =3D ALIGN_DOWN(index, 1 << folio_order(folio)); - r =3D __kvm_gmem_prepare_folio(kvm, slot, index, folio); - if (!r) - kvm_gmem_mark_prepared(folio); =20 - return r; + return __kvm_gmem_prepare_folio(kvm, slot, index, folio); } =20 static int __kvm_gmem_filemap_add_folio(struct address_space *mapping, @@ -808,7 +794,7 @@ static vm_fault_t kvm_gmem_fault_shared(struct vm_fault= *vmf) =20 if (!folio_test_uptodate(folio)) { clear_highpage(folio_page(folio, 0)); - kvm_gmem_mark_prepared(folio); + folio_mark_uptodate(folio); } =20 vmf->page =3D folio_file_page(folio, vmf->pgoff); @@ -1306,7 +1292,7 @@ void kvm_gmem_unbind(struct kvm_memory_slot *slot) static struct folio *__kvm_gmem_get_pfn(struct file *file, struct kvm_memory_slot *slot, pgoff_t index, kvm_pfn_t *pfn, - bool *is_prepared, int *max_order) + int *max_order) { struct file *gmem_file =3D READ_ONCE(slot->gmem.file); struct kvm_gmem *gmem =3D file->private_data; @@ -1337,7 +1323,6 @@ static struct folio *__kvm_gmem_get_pfn(struct file *= file, if (max_order) *max_order =3D 0; =20 - *is_prepared =3D folio_test_uptodate(folio); return folio; } =20 @@ -1348,7 +1333,6 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memo= ry_slot *slot, pgoff_t index =3D kvm_gmem_get_index(slot, gfn); struct file *file =3D kvm_gmem_get_file(slot); struct folio *folio; - bool is_prepared =3D false; int r =3D 0; =20 if (!file) @@ -1356,14 +1340,21 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_me= mory_slot *slot, =20 filemap_invalidate_lock_shared(file_inode(file)->i_mapping); =20 - folio =3D __kvm_gmem_get_pfn(file, slot, index, pfn, &is_prepared, max_or= der); + folio =3D __kvm_gmem_get_pfn(file, slot, index, pfn, max_order); if (IS_ERR(folio)) { r =3D PTR_ERR(folio); goto out; } =20 - if (!is_prepared) - r =3D kvm_gmem_prepare_folio(kvm, slot, gfn, folio); + if (!folio_test_uptodate(folio)) { + unsigned long i, nr_pages =3D folio_nr_pages(folio); + + for (i =3D 0; i < nr_pages; i++) + clear_highpage(folio_page(folio, i)); + folio_mark_uptodate(folio); + } + + r =3D kvm_gmem_prepare_folio(kvm, slot, gfn, folio); =20 folio_unlock(folio); =20 @@ -1420,7 +1411,6 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_g= fn, void __user *src, long struct folio *folio; gfn_t gfn =3D start_gfn + i; pgoff_t index =3D kvm_gmem_get_index(slot, gfn); - bool is_prepared =3D false; kvm_pfn_t pfn; =20 if (signal_pending(current)) { @@ -1428,19 +1418,12 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start= _gfn, void __user *src, long break; } =20 - folio =3D __kvm_gmem_get_pfn(file, slot, index, &pfn, &is_prepared, &max= _order); + folio =3D __kvm_gmem_get_pfn(file, slot, index, &pfn, &max_order); if (IS_ERR(folio)) { ret =3D PTR_ERR(folio); break; } =20 - if (is_prepared) { - folio_unlock(folio); - folio_put(folio); - ret =3D -EEXIST; - break; - } - folio_unlock(folio); WARN_ON(!IS_ALIGNED(gfn, 1 << max_order) || (npages - i) < (1 << max_order)); @@ -1457,7 +1440,7 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_g= fn, void __user *src, long p =3D src ? src + i * PAGE_SIZE : NULL; ret =3D post_populate(kvm, gfn, pfn, p, max_order, opaque); if (!ret) - kvm_gmem_mark_prepared(folio); + folio_mark_uptodate(folio); =20 put_folio_and_exit: folio_put(folio); --=20 2.25.1 From nobody Fri Oct 10 17:26:53 2025 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2046.outbound.protection.outlook.com [40.107.100.46]) (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 76FB81C84C4; Fri, 13 Jun 2025 00:56:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.100.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776174; cv=fail; b=i7aofjk6C1zSPslwOrDB2v0yUIXRUfy0MQLqXbfZGGgQcIkSRGWDwZsIqp+2RJcp7ym1NUCPmjgLXzwVQIxQaX0p14ZvjK8Oz0eL9Zq8hWDTWChMrkxlWzre7yeyXgVd0vDtV/UDp8yRIe4s1NkbKrXik0v0JbZhXzAP/+CGRIA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776174; c=relaxed/simple; bh=AG/BGR530wAPT1XxvFExkP9qvzLtxGc00SmeHLY/ub0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oRBIR/SH35B0/45fIoamsoMmqsvOFJL6bZ7FIAwT0cvAwxeT9g7zuMGRd4DNJKd6CQyNlU/XTw5y/V5RV+t9tk2T2onKFgdFMvhC9QJ+tJ0qc5O/epxD63iZSkAoINlF1A8tQ3PB92PaR39WqlfTrYWSikD5ljcw74ye1AU4oes= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=NCckkxXj; arc=fail smtp.client-ip=40.107.100.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="NCckkxXj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Tj0FFh+UPABXNSxgbzUpzFEx5wrdVy6IMB3hozuJ7sZCcJYBnqvGKUtflEVslcleb6x+kh4HyxcvCLnwPdb6N6wlIPOUo1sxh7jQ3398hupFtoqWtMVwIrnbB4I0VimiWkTetw0rpRQkzM/mcdH50g6d12irdl5wafwVDhNQKSJQHlRiXcsTYORtd4t1jCUK1YMS7hCAb10kizt7HNKZej2eco0R6U6dbrWybVhX8YWYC3u0lNVFkmPe3RmDxuwl4VacS6ZMupTZTiIJqsoG0IgC/9Lf8YTIUihb/OAY8ubiSez7Kwq9Yxq4Bqx/WIolhz4wdToFGt+P+0DETIaTbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ojB82e/6aYnnJurKtM2byMu4AkhgvZx9DM0Sk18ntN0=; b=MGHDpjBLwBKWPSIWYAsmN/4AlSehiuC+7vuq/Y9NuvaTL98uu9a4QUzAy2Vk8n0wB4p3Tc1PNFCWze/5+zwlDZETYtMPrcGF49cV5QK3dWdClNb/wyynkeG4Jd1xzIjfjo0Ec6yLUHfljpRnwDWsXcf8/2GkyXEvlZGUSm/VGi6dT6vISfErNEl0NgN8CSqd2uGPNJAqEnrxTLPlxIKvRqfyPOSDrArAey9lvDGcJwmfYjsj38Sdr1DEk+2l+AsA3YqrYN4M+1K2oRrPioMzigShYnPSCcaK0Hib2LdRN90k45BXGlYcNCnb+aWqax7lLyaH9jB1w8udSfn9OlhiNA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ojB82e/6aYnnJurKtM2byMu4AkhgvZx9DM0Sk18ntN0=; b=NCckkxXje9nTT/w9ocDPY7RcbPVu5vW2+8M8k6NqNHOxACoJHUXtgdBNY5y+0w52Io41bKNNKS4X+jpTnHrJX5CLyOAdURMmeMj1c2EGQin60pl1UPZ7vh6D5OqF9RWRb0LnRSJgMYZZKablCs7zcrwCbFZGuFKPb6gMW+hRvHE= Received: from BYAPR21CA0024.namprd21.prod.outlook.com (2603:10b6:a03:114::34) by SA0PR12MB4478.namprd12.prod.outlook.com (2603:10b6:806:9c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.25; Fri, 13 Jun 2025 00:56:07 +0000 Received: from SJ5PEPF000001F7.namprd05.prod.outlook.com (2603:10b6:a03:114:cafe::a2) by BYAPR21CA0024.outlook.office365.com (2603:10b6:a03:114::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8835.24 via Frontend Transport; Fri, 13 Jun 2025 00:56:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F7.mail.protection.outlook.com (10.167.242.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8835.15 via Frontend Transport; Fri, 13 Jun 2025 00:56:06 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 12 Jun 2025 19:56:01 -0500 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , Subject: [PATCH RFC v1 2/5] KVM: guest_memfd: Only access KVM memory attributes when appropriate Date: Thu, 12 Jun 2025 19:53:57 -0500 Message-ID: <20250613005400.3694904-3-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250613005400.3694904-1-michael.roth@amd.com> References: <20250613005400.3694904-1-michael.roth@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F7:EE_|SA0PR12MB4478:EE_ X-MS-Office365-Filtering-Correlation-Id: 37fea1a6-fcf8-46c8-3ea4-08ddaa151471 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700013|7416014|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?CqGj8TXvuMb2b7Hgd15Ut1kUVVJRg0AcrlnjglfpgvTLlS92Es0cHnwnMpBh?= =?us-ascii?Q?7+gIJhAcdEb1vxhNZjQBgRO5NI365BuBuQOO4vD/FNw7bfcs/3f9EusfmJ27?= =?us-ascii?Q?LAlYEuJQnSS6e8Uie4Eb3/6HYlPM+7xyfpMh9KY9WNuy2v8TRaBLVq+C1t2S?= =?us-ascii?Q?RUwW6IPKGrloUUteMdW8vqH9acknXR3Vsxn6fsQA8T1ZcTVn3LF1MW2LW85I?= =?us-ascii?Q?G5Ek09cd2heevKYQASP/SRKgsopj/jsjyYF7u9VkAXVBwQQMDUF1bvIK2Nst?= =?us-ascii?Q?F0TmKOK9o3ShtGAmZAOrIU5ORDKTrsTVjl6XR7YjJR8TQfZIfcAhaDa9bCSI?= =?us-ascii?Q?ppTuMZw/TnUG7o4jYU/DmpeT0y/UNYQSVIFflXs5Qnr5tYQRYfRAwfPEYVvC?= =?us-ascii?Q?BVkbZ3vVsHKJJepd8JFg5hWWgze4p+VcYLvJMGxN/HBe6rWePpx86K1JUyqD?= =?us-ascii?Q?0aVNCGuKNiupA2WOadNyKYmhx0BTuGxfnpdrV3zMUq1zmH7slDehOq/D2Sx1?= =?us-ascii?Q?+IKjNHrZLb+09CzTavOkfKLjPa5zc6eQp9ChxvE9Gzk9f3zIB3nmIowO6fbH?= =?us-ascii?Q?5SZB0ECmd06XyELTNWXnn1x5UWYv6NeGaw2jCSV8gJBT4DWY63ZDGPqf8ZPp?= =?us-ascii?Q?V1fJTdbPbs7y5vf8WndxErZj7V/uEvESDdO+5Lh1CkMrMLMl90g1nl31/vir?= =?us-ascii?Q?r2xLmKFIS7/4+IPDzSseICfNKPpcNRMBUWcr9vexPp0QTJeYpZRRCxfocIik?= =?us-ascii?Q?wk9AH8UEkA1JxygErC/C1QeyVnaWHnhTKkH8/1BsCoE2N2nYVI9/GUaZbiMN?= =?us-ascii?Q?93ppcH+d+XO2v2ciN/3k/HXTQ9B7XORtbCIopQEdcO3GzhtkNkdgNQ1oxxpQ?= =?us-ascii?Q?us2Al1ZDBx8CFGezwOgTve5oM19MQ4Ot/EJIyijaYG0C8T/zdjwTm5biXTMU?= =?us-ascii?Q?3zf91PEhIP/nhXZuTmitoJeTd0PjTNYOwtfQgH6d8lYc0/80jc1JsMZ4ONXe?= =?us-ascii?Q?Th+MtUOADvNBnIHZcWUdnRf0iyoyOMIL13TUcdC28bb9QAbqqW7xgqoTibJl?= =?us-ascii?Q?1IBM6YySmyv8JXulUezKiAzM/8KcSO61pP13U24L3a84wL9TaLDWvWbvYcBK?= =?us-ascii?Q?IMwKMbWnJjNqry1wDFqqoqzfcO2IW4XElN3xrDabOqwfhr1x5nh1uFDntlhq?= =?us-ascii?Q?aH0/QF73sYtGsGE73O5SmtkhGLPyvxhClp96TVmXI+r9fjs9cGln1nwmAlC6?= =?us-ascii?Q?ghZK18oK1F4dRpTI5RNVlEAptOv++Wpw7sK249ZjLEVGp0basFqjOyjEylfP?= =?us-ascii?Q?qwOskVzRtIiE3gUaGKpG24FUPmsjR3vaUSOeZdWoy1qi7CLDBAz8b0YBiz2w?= =?us-ascii?Q?c36J5H0dfTisCOiHir62JWOuv/Dxb6fDCDkpKOn4s3vSIvToNroTx/EfY+Yv?= =?us-ascii?Q?UlDHUr5kn7Tcnk08pfSp7YL7gB8y+mLokj2bHT5OzrQxykVRQFl04P4s/IQe?= =?us-ascii?Q?D0BhJOlkoRZUIFAY8wCqidh5GWezX97OQu7Q?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(7416014)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 00:56:06.9199 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 37fea1a6-fcf8-46c8-3ea4-08ddaa151471 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F7.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4478 Content-Type: text/plain; charset="utf-8" When a memslot is configured with KVM_MEMSLOT_SUPPORTS_GMEM_SHARED, the KVM MMU will not rely on KVM's memory attribute tracking to determine whether a page is shared/private, but will instead call into guest_memfd to obtain this information. In the case of kvm_gmem_populate(), KVM's memory attributes are used to determine the max order for pages that will be used for the guest's initial memory payload, but this information will not be valid if KVM_MEMSLOT_SUPPORTS_GMEM_SHARED is set, so update the handling to account for this. Just hard-code the order to 0 for now since there isn't yet hugepage support in guest_memfd. Signed-off-by: Michael Roth --- virt/kvm/guest_memfd.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index cc93c502b5d8..b77cdccd340e 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -1429,12 +1429,16 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start= _gfn, void __user *src, long (npages - i) < (1 << max_order)); =20 ret =3D -EINVAL; - while (!kvm_range_has_memory_attributes(kvm, gfn, gfn + (1 << max_order), - KVM_MEMORY_ATTRIBUTE_PRIVATE, - KVM_MEMORY_ATTRIBUTE_PRIVATE)) { - if (!max_order) - goto put_folio_and_exit; - max_order--; + if (!kvm_gmem_memslot_supports_shared(slot)) { + while (!kvm_range_has_memory_attributes(kvm, gfn, gfn + (1 << max_order= ), + KVM_MEMORY_ATTRIBUTE_PRIVATE, + KVM_MEMORY_ATTRIBUTE_PRIVATE)) { + if (!max_order) + goto put_folio_and_exit; + max_order--; + } + } else { + max_order =3D 0; } =20 p =3D src ? src + i * PAGE_SIZE : NULL; --=20 2.25.1 From nobody Fri Oct 10 17:26:53 2025 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2068.outbound.protection.outlook.com [40.107.100.68]) (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 7E3AE72636; Fri, 13 Jun 2025 00:56:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.100.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776189; cv=fail; b=h2CiX7yw97OziCJbX3cuGMuMFozW7vJi4Vg4NEWSUXhKbE5F/ZeefP5mYFjOAZ5lcUsWewyPhq2TfebJUId0O5THntwOey+MXX0TStM2X60DkSZ2r1wts+rI2PuEAox1TcX+e77cFWo+JbBKAe16gF6Bl4RbRkvbtxUxa86/Iw0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776189; c=relaxed/simple; bh=yCnjxEyrkmIfAisftpW9ZWpOWKsGvp8hfGDglNJ0/GM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Wz1VmzPkIaEpuXzJGkWkzUV18xWm9N3Z+JtjjFfof8Zd7VJjPP7Z9nGghMke/TWq2eT1za8U3eRQg83t7Wlqrd61zJ0LD16ostJdHkBeQ4YCwntF4dDqZrrp/Y3ACpIBbtOFHJYxaf4G7SggNKELEmTV3xPuLzAp1FdeHSaHr4U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=y6Qkvmhe; arc=fail smtp.client-ip=40.107.100.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="y6Qkvmhe" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Daj3+YJw1y1S7AjOB5er1NthWcd7NBoxQ3H+fPbnFYLTmOdt9/p5LJhlODeYWED5M0bX00eIWZ6ADRaIxQ+Y612odgJRpLyCoGRmZ6kFiffZUvE2GUc7jBQehBk2/dcgn59+tVv81doxF3Ac0VdVPkcr7ctZqcW3lSg4d0maPDPAvLaAORWWqbaylQXOtxTba0QEuugNADDTHE3aXWgRPMM7XnTnwteRxneNojTtUp0wGeD8kdcXjgJr4vhQqGTCbPJADsgxMdK8yf/jpZuCVloiOBTJKMagRokm/v2GMUSkgVCQP9sXIbeVj+1jgnVwQ30yUXeOsY3cTYMmiNIlAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E6Hq8j/h5FscqUYS0v64Ey94ASqk8fJpcUbQZM2ox48=; b=LJQZ3SZCR/cusE4OJdZG2WIUWVBhCUmT5BsvscL/lp9toq278Jj9E7Q3fo4Uk1ay0+0cBrrvUBAm+Q+TPKVj0TvVTjoFRn9mFkDyn894GU0Yab/EoUbOfPTGxJyhVzQw/IK4bPYV5exkSXLc6/Aj2qzUoiNnLJ1o+PshTMD8fZkqQyNSOnMZu5Mr7INfcJ2TLsZzY8vDstPLJerSnywa4QM9DIVsoVcSsPMH1BLmogGR3CSP8taTcYcS3HZmXEYjEkey5OBW81ow/kwXTKtWXvRBz2ylAV8vaNOtvcsKYDseLHLHxL02rAgw+yuXZpEIJifozXK7T0MpY4jgommpJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E6Hq8j/h5FscqUYS0v64Ey94ASqk8fJpcUbQZM2ox48=; b=y6Qkvmhe9TEXpR5IVfDaBV/kRx4Wr7f93PkmLhvG1yChB8GHYSFw5KafEdN4xS2uFPbIDT+xNrbb1k/9GGQim10Ttn+/FUUObVpP1RmcHJKP5bHPx/lChc9y7MJCCtDSD2P+RXmolgP3Bz3rOGsRRCccV/C/OYxq238gXAq6Ris= Received: from SJ0PR05CA0095.namprd05.prod.outlook.com (2603:10b6:a03:334::10) by CH3PR12MB8211.namprd12.prod.outlook.com (2603:10b6:610:125::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.18; Fri, 13 Jun 2025 00:56:24 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:a03:334:cafe::39) by SJ0PR05CA0095.outlook.office365.com (2603:10b6:a03:334::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8835.22 via Frontend Transport; Fri, 13 Jun 2025 00:56:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8835.15 via Frontend Transport; Fri, 13 Jun 2025 00:56:23 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 12 Jun 2025 19:56:22 -0500 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , Subject: [PATCH RFC v1 3/5] KVM: guest_memfd: Call arch invalidation hooks when converting to shared Date: Thu, 12 Jun 2025 19:53:58 -0500 Message-ID: <20250613005400.3694904-4-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250613005400.3694904-1-michael.roth@amd.com> References: <20250613005400.3694904-1-michael.roth@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|CH3PR12MB8211:EE_ X-MS-Office365-Filtering-Correlation-Id: f33da593-d4b6-4a4a-c6ca-08ddaa151e57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?lrKgzAJ9XuFmf+4C5SlTWsP5C7DPJ/OIcIfWQxu4plzTb+RoEwjm/A7rI6iS?= =?us-ascii?Q?zTvgNoq4xVEQQ9Qi0r+zHP0C5KoMGQzhWsBINAwLUoGAT6+Sg7mUpuCpgc6h?= =?us-ascii?Q?7FqFXLIIFASHQG1q8Pvy3w0JR+P9SqjF3azqNcGXQNOLUXGJN5yvfooiwaz9?= =?us-ascii?Q?ZSTcDlCOUcdsLS/kDkXsmwyt4wQUc4NVjCvuFJYssushh0WeKqlzlbw7QMZl?= =?us-ascii?Q?pt2YyCQzDfEmQNCUXMcjcv3Rvnkvrx5Gh95RlfO159qZM9jbtLHuOcdNTHRP?= =?us-ascii?Q?LO5Xg/+8Ylg8zEMe+iBABVqW0Pcs5CcwvBaQR9aLul4ZbbWrJ/Qr8l5sQTrY?= =?us-ascii?Q?40CJ1isggzrMRVyBIbawLkyh5dTyQwCluK1N4WUmvwh/OZJ0AHGWxWjwQmwY?= =?us-ascii?Q?jBYMKMPU/k8KtEZmrkJ+wHUDy2F0AIzWc6t1Y4f70OY0queiTsLk/Zjapxrq?= =?us-ascii?Q?bb/luxJe005g0C7M0g8z3RV7LIhH7x75kxjZ0Z1aJ727dpcabVkKlWjRCoa1?= =?us-ascii?Q?pkaIOSA/CE1MdMouq9Z3Mk03kRcdurWFIpGTcYOt8o9NYPfRCc/7dPx/da3F?= =?us-ascii?Q?fOGFoZauIl4D5X1v1pmEBbgnUN7CeGOP5d87KccuAaudGj+bDwaIVM1TCc/M?= =?us-ascii?Q?25XyKs148EkAuao2ZcYckYFAz8F0CISteq/vUjtPzVQui82LJunKmL3ukjYx?= =?us-ascii?Q?uyWblV8LuTFOUkDpAp9vNroge1liJZW8t7zd26Xub1wmqkSuIBaqSdngVEBO?= =?us-ascii?Q?/hBBmnnuV9axEM1yYcltlCvcvGEX3b2JVEcgn+W5R4Il+CaMEV3DkCAxcBlO?= =?us-ascii?Q?7M1kCbNfTTzqMHJ+ge7zSK4iAUo9ClsfgQRvOd8sMvnGaA4S5zq5g95fV8Gx?= =?us-ascii?Q?ehXhCwtPutdH84wTXfaIMgku2za1Y9kIBok3MDCbdfj8PLw23tgnsDbmgB3U?= =?us-ascii?Q?gapJZOmv6E28vdl1fLwUJSDNf4KqyH9DB3lONXabmYoU9NlV8sWI5/lylxeE?= =?us-ascii?Q?B+Q4vUpWnd+K/v+3D8hVFeLQvWUNQeTQrl4yG0PDIlkUPnFgMZsCrX9Jiqru?= =?us-ascii?Q?s3BGAR5+EGvzBMFl4yaMtpRrKr1ArB4sn9aHZ1hJGJTv+OSKHCZlHKLZ9Klu?= =?us-ascii?Q?ZBpHsm9mca5myCrVltiLBaCu/45EMn5vQa3FCT6+eVpr9xFFNVRH/RDibMU8?= =?us-ascii?Q?Q788PqIefgnCvCCYNcOi3JtukDHy/OU1srNE5kAlsdeYY+V9OtrNHLHRMuJs?= =?us-ascii?Q?1ou+Txz70ofkxHnkeYC9P6EUzgBcaI019Lt79xCmRcT+/z/lo7aEDQex9ZJi?= =?us-ascii?Q?H+8P1fD1GvSvCO+puYL6+oMSbWuMz9A6DrNMK3uyYOzwyY4ynPYOMXaveYf/?= =?us-ascii?Q?9lBE5nfitXaFgt6H4zc49L+wR7Omzzaz8/U/1TKYlWV1k/hoDzHvZtZ7eBr5?= =?us-ascii?Q?dKxjGyFr3UD1F5oMMwjG8GIgGS+Bb9znqhH8vh3cW13fCA1GcmwOVApEQweE?= =?us-ascii?Q?W6fhc6Bc86Ir1yy9iNTaXBZuseBwR1AQdCaF?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 00:56:23.5321 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f33da593-d4b6-4a4a-c6ca-08ddaa151e57 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8211 Content-Type: text/plain; charset="utf-8" When guest_memfd is used for both shared/private memory, converting pages to shared may require kvm_arch_gmem_invalidate() to be issued to return the pages to an architecturally-defined "shared" state if the pages were previously allocated and transitioned to a private state via kvm_arch_gmem_prepare(). Handle this by issuing the appropriate kvm_arch_gmem_invalidate() calls when converting ranges in the filemap to a shared state. Signed-off-by: Michael Roth --- virt/kvm/guest_memfd.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index b77cdccd340e..f27e1f3962bb 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -203,6 +203,28 @@ static int kvm_gmem_shareability_apply(struct inode *i= node, struct maple_tree *mt; =20 mt =3D &kvm_gmem_private(inode)->shareability; + + /* + * If a folio has been allocated then it was possibly in a private + * state prior to conversion. Ensure arch invalidations are issued + * to return the folio to a normal/shared state as defined by the + * architecture before tracking it as shared in gmem. + */ + if (m =3D=3D SHAREABILITY_ALL) { + pgoff_t idx; + + for (idx =3D work->start; idx < work->start + work->nr_pages; idx++) { + struct folio *folio =3D filemap_lock_folio(inode->i_mapping, idx); + + if (!IS_ERR(folio)) { + kvm_arch_gmem_invalidate(folio_pfn(folio), + folio_pfn(folio) + folio_nr_pages(folio)); + folio_unlock(folio); + folio_put(folio); + } + } + } + return kvm_gmem_shareability_store(mt, work->start, work->nr_pages, m); } =20 --=20 2.25.1 From nobody Fri Oct 10 17:26:53 2025 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2052.outbound.protection.outlook.com [40.107.236.52]) (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 663A21C6FF9; Fri, 13 Jun 2025 00:56:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776209; cv=fail; b=ONla4FxE7bE3sGuocaHACbdfScBGWQJbMnGEzBGwD73/agfAOBRR+FKftGHUwWzZJUQQzHUHwcRKxo9tmKJVMfRaV01+Y1J2KSOolMrj9SkbPlJIIKMAadJ4pBjm82vlzfdePRhC+2ZNsA7+9uqW5N0rja8wYqXDAZuWT/IGfj0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776209; c=relaxed/simple; bh=7VJTw98OOdwTw8S1os3LS9y3DJtHpYVdH+V4SpgQFN0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=C6eZ2sG2vcvDrqX+lrHAEg/9ueUrIHYFkYhh2nNjN9MuIgSihhsS0k8541fiz9W6c6poWU9qWYsINx9xfdFk+ObuQmnlCvM8gdfkzrqbLIURbtxJtVQpTOfX4O3+EvdiLI2Tn9krW00tB52SBaJsCCGQWVyvT+Q3Kv5hGVM+tcI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=2K2bfTUX; arc=fail smtp.client-ip=40.107.236.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="2K2bfTUX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BByjYdhnpTBshvtgKwM4iOhMsxmmA1BGNCBUySv4yYjZQuJvWV8v5ca6qTm9hNx/JskpKdIpx4kwyYOXzEvRy/Rg/MUTcElGnHmQ9UQI0IG9UMT3XBG7F21MS8q4mbHhjQz+jvkxy0ADUukw2Oo6WSdnu2I7oJzUyRUPxHOJpO/fqVAq8JXrh5n10k0NsOBV0kbJb5xtovs30925jowuSNeTKVvEfQd2JdyvhSDd5TgD8mGMPlBzvVo0j4IiPkOHbJnIn5oXHsB4BauGU25zNNDu606yZDD6RO/W0+Va5OOARSp/EbInpt751TwrQ/Kl+jTU9gEKe/5WrhEWf2vH4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sylXUDhMR/lZnNcq0AeJVAD3BUXD5ZUf1tH0EXVDnJ8=; b=A9mGDFDabu0qUJoAq+jhxgXAlhOKmk0pRETNKsQYq+LgnZ+df6eMi8m38e5LzneV3doNtW78BXLGKZFxRvLePkAiH46aHxQgOtHDf4qBANXBqnyob/fhcDNRgxFhZgjxEIqOwTtA/gz70JOJQuJCtZBnHtVwhHtqkvyJFj4vNnwAZIuJTJjwvEV6lKe4H5YLhhFrHqrCfJE3IjmKuK8QnIHKqWgsLnh7+55NCYOLFdtccno0DZPii6XEI3ksAIQXiy6P+e0kIgkTS6/tWEgq62ZKGzKUz0ZGfmNKOxZNpSZ/4TeyXlQo/P/NRPlrEwR9i9Frt9m6HUWTToDpfJj6xQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sylXUDhMR/lZnNcq0AeJVAD3BUXD5ZUf1tH0EXVDnJ8=; b=2K2bfTUXeflql7yEBc0fzmq3q+AzlcB0M5ZF1UuJ1UCNvOC2tjtQ8dBFNBDRNaLZFtu170lEY/Ns0qfFAd+jiJY0NOjYFJnoP6SberuUWWa4tXn1EgNr8Dx+ub0vOgcUsZj0qOSpKhQqfMOu1mp2wO5TBnQGA3Ng7Q8CV0sEEAQ= Received: from BY5PR20CA0007.namprd20.prod.outlook.com (2603:10b6:a03:1f4::20) by SJ5PPFF62310189.namprd12.prod.outlook.com (2603:10b6:a0f:fc02::9a9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.23; Fri, 13 Jun 2025 00:56:44 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:1f4:cafe::4d) by BY5PR20CA0007.outlook.office365.com (2603:10b6:a03:1f4::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8835.25 via Frontend Transport; Fri, 13 Jun 2025 00:56:44 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8835.15 via Frontend Transport; Fri, 13 Jun 2025 00:56:44 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 12 Jun 2025 19:56:43 -0500 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , Subject: [PATCH RFC v1 4/5] KVM: guest_memfd: Don't prepare shared folios Date: Thu, 12 Jun 2025 19:53:59 -0500 Message-ID: <20250613005400.3694904-5-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250613005400.3694904-1-michael.roth@amd.com> References: <20250613005400.3694904-1-michael.roth@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|SJ5PPFF62310189:EE_ X-MS-Office365-Filtering-Correlation-Id: c24ce6ca-0add-41d6-fb9d-08ddaa152adb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?FXmcCCuFeVt4C5KHOU/Nco6uDGWEJmMo69d5cTcZypPWrNvC/89MPvypWWXY?= =?us-ascii?Q?I4vw7Dvu4jQjE3W1a9HMjJfSYuBtdIhYeAyCeh2u968jRSrQvSUbLoiQD6lW?= =?us-ascii?Q?ZM5ZdKCPN2Jh3uMTyhnqrOV8gHFeCWBjpGIKG0EMotcdGmON6PQytphhh3XM?= =?us-ascii?Q?yTww0fdWewkwuPICAGK+I5bXPjRSUxe2HbRDCPU8IXnS/nybTr+SH37reUyy?= =?us-ascii?Q?lamcZv7cFOnuAtaiiWlT6uJ98Ye1o75nzX7piOCLuM44jNa9q03ns/Cjrpv+?= =?us-ascii?Q?/kj+LAYfHlBh+Er1R3+9B3eQbYMsgKzp/O44dNbBI31ktQKblptlCFhVJ3KI?= =?us-ascii?Q?YeRtsQpJKiY+5JJgUVSy4JUJElt0h9bjn+mu0Z4k51bKLYjS3Uyn+ObPM6B8?= =?us-ascii?Q?m3/QBvuMvO2Gbdg860vSODU0xkgXPpxP+lKjsUWr+QiHaIQarXfsiBLy6jz/?= =?us-ascii?Q?IUYuhFPgZfrAVl8QTp15cLanapLaoyVyEVu6qdsUBPStnc2hO00EpkhZQFUv?= =?us-ascii?Q?ux6zXx1Y7UEy7iekq1a3Saphw92Cef6uuAGkMeJaGgK6n0mXlE+GW1KCQVMo?= =?us-ascii?Q?UlDgzT9Q7OouQfPR9ZHFWnMFL1ziVSmQfNTLYrGffitHrdLCqDzFnLei86Q2?= =?us-ascii?Q?mxjJ8lwWajNs9fFg+iLCu+cGUDwFg8E3dckxV5yvANgOLNSMo2k6lrA3u8tj?= =?us-ascii?Q?Wjj1tF6/hFNPjmlcJ+93p9FN1nEUpH2LGXsENoo7QjkZQ9S+yRYRdMCD98nf?= =?us-ascii?Q?5RnHqfijKsqAsu2CCgURL0ZFPfzD+NxUNEJOmDKZVSHImzpDQY7aOMFcpArA?= =?us-ascii?Q?5x+Jbv5PjNhknSeMDguETqyT7oyNQ4+Nsex04lfPCcr6hkdlEREIqe8nXX+5?= =?us-ascii?Q?2EzPsVaOV1lN7k5WcM9V9kBTnrjWu3Rgz4qDWD97g19r+umI8vGdhI2kuP4C?= =?us-ascii?Q?NyrtRrlanotQGZwmw2bfsGFE4w36GCMNvCgEvlbJG71Q/mAqeHyKz0TKQkpu?= =?us-ascii?Q?hNaS70FQJcTlFJzy0CC7ErUX5Fk3KBGznbD+9YpyXPH37QfyiRQgUFaNx8Zw?= =?us-ascii?Q?img+9AJT9EL+3PxymryxJjS0i3hIA2gW8Vz92RmEHxiveF9O66Dq+voOLeYk?= =?us-ascii?Q?Pk/vXklzcidGUZll8JItC75T0qGcJ4UvORG70FeQB/rHXWaxnZ8FAAHe6G+L?= =?us-ascii?Q?krwbfYm1WymcciOIrEXE9yepWkT5ZHFHIxqonMAIQ/NSthRP2OXE3/Jqrvdk?= =?us-ascii?Q?Zz4X9XYTeKzId1n+rra8gjkqdiV5Pxv0hR3MuSZiMN4rMy1uynWbIvTQKD7h?= =?us-ascii?Q?l2Pa2+H+K6HeTlEW7VEx4M34xnQ6M5rogKxClPVi6+CSFam2i29RvEagTD15?= =?us-ascii?Q?LHXKPvXO7imnwo73CN0TSAx7KDT9dCf4ANERa3v0oMwz8waxuBnxLMw5g2UT?= =?us-ascii?Q?wsR7hoTXglKMj/hOxSPxOmimXU2P8ZglFReuAww71z/xuLAVat5KiM0io6Ep?= =?us-ascii?Q?Z6lsrmox4KrXXc1atCfD21ZU2s/P0HVmAYpM?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(376014)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 00:56:44.5293 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c24ce6ca-0add-41d6-fb9d-08ddaa152adb X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFF62310189 Content-Type: text/plain; charset="utf-8" In the current guest_memfd logic, "preparation" is only used currently to describe the additional work of putting a guest_memfd page into an architecturally-defined "private" state, such as updating RMP table entries for SEV-SNP guests. As such, there's no input to the corresponding kvm_arch_gmem_prepare() hooks as to whether a page is being prepared/accessed as shared or as private, so "preparation" will end up being erroneously done on pages that were supposed to remain in a shared state. Rather than plumb through the additional information needed to distinguish between shared vs. private preparation, just continue to only do preparation on private pages, as was the case prior to support for GUEST_MEMFD_FLAG_SUPPORT_SHARED being introduced. Signed-off-by: Michael Roth --- virt/kvm/guest_memfd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index f27e1f3962bb..a912b00776f1 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -1376,7 +1376,8 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memo= ry_slot *slot, folio_mark_uptodate(folio); } =20 - r =3D kvm_gmem_prepare_folio(kvm, slot, gfn, folio); + if (kvm_gmem_shareability_get(file_inode(file), index) =3D=3D SHAREABILIT= Y_GUEST) + r =3D kvm_gmem_prepare_folio(kvm, slot, gfn, folio); =20 folio_unlock(folio); =20 --=20 2.25.1 From nobody Fri Oct 10 17:26:53 2025 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2042.outbound.protection.outlook.com [40.107.94.42]) (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 64D581CDFD4; Fri, 13 Jun 2025 00:57:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776234; cv=fail; b=iFJLqRUAu6UoBAMgaIFy2V24QRdUzUWFlZzcx15EcbkS3avWSXGj27QQWASWgw5UjNWVYeYhhY4iQU8aDItVZ5P+/48cr0HiHVAJnqiwUeqwL58OgFEe4qeC3pce2IjhGlTAIkILEDE6FRgfEmMah+Nl9725m90/uDVe10dzwu8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749776234; c=relaxed/simple; bh=Z5xrTxphxd/wqzxCxS98+TykdekWtcvM48A8SGzKilo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qMBDiQ8yiyF08BiDSV0X3oI5rmxTP5F7qDRhphp0F3/dVpOhk66OZvmIoe1BtmGQDE3GTCLrH1UZtUH3CzxaoH9+S7h6JNVbhwcPnSj6SaokUWv/9rO4SOP7h7OOcH3cCrfhmH817PO0ZZ93EZRcBtygReYty2PPMA9YB9O0fvw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=pqReFbiJ; arc=fail smtp.client-ip=40.107.94.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="pqReFbiJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lR/UVPs3tF78Z5X1b57pqFroLql74xpSHIpP8dtTRZ+72HmKfQNu1LFyc86EnSIhqDdC69ASDw2i5FRKUpY/i3/5+NjyNBkbuYPDbBrHgJu7ES6F+X7UIhpnJU7XyaJwBdGzVC/ATm7gJ9oPhE/OhefKOJAHLy462LO2Cu5bq28R1XQm2qKKg6SQTLhy/ofB3qSsudwfa1qdD51NMS/wpQr06IpwbtdNwlY0Qf479bU8WLVpNICCkUL8kL+cfrb3KQXp0eaN4n9IGxIIl825RcQuejTX5nUEmkKl+5A8Y0LCeC2Y6jXsAA+8RdtFhwq2tAwimBSLhb8P//MiZUcibw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XAZzbD9j3n8HWY3PrqVrnzusGcum50ZsLzNdeyLkIGI=; b=Ju9H2a11j7p13DXVpt/sh1zGIsDFPj8iZTDYRWct6Q/PN6ETcAyjnBJacAjWM9lVFg8weFEWFrl0UR60CcbHljKs7zv1MpH+4z2e4MebEDmPnPgpuVEKUuNui3gNTb/Unk7PUMLxE5q+8ksEd2tcm+bRg0NPGZ1WbXLJZ7PUgp/S222VhyEylEZ0imglTvC7HpZZoz32BOSlqXimV1nEizGcREtmh5/i2V09uwZY9QsSbDnEFUqmE/6Ub69+pMRIxPFM38IKUkcpaH75GSKjRWeBWt9aFHRLvWKI9xTqn/ctgLgDVlu/7RvuH61kQ2fGMHrHvhP/j52FyXKtR7ayrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XAZzbD9j3n8HWY3PrqVrnzusGcum50ZsLzNdeyLkIGI=; b=pqReFbiJQc2zJLI/P/3Q6i1bFFjBB3DMA18NqzMNKJHRGQcLUfrsUJc1ome9qjPvciatyJ9cmss1zROLgpnvkrqd3UiHthDRPultfECJD9w9tc7wXlGawhDQUR4FbkHJg+H+tiiXTe5D8ubffMZswbvwoE80HfSm+FiZnzFRNWM= Received: from SJ0PR05CA0106.namprd05.prod.outlook.com (2603:10b6:a03:334::21) by DS4PR12MB9660.namprd12.prod.outlook.com (2603:10b6:8:281::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.38; Fri, 13 Jun 2025 00:57:08 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:a03:334:cafe::de) by SJ0PR05CA0106.outlook.office365.com (2603:10b6:a03:334::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8835.25 via Frontend Transport; Fri, 13 Jun 2025 00:57:08 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8835.15 via Frontend Transport; Fri, 13 Jun 2025 00:57:08 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 12 Jun 2025 19:57:05 -0500 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , Subject: [PATCH RFC v1 5/5] KVM: SEV: Make SNP_LAUNCH_UPDATE ignore 'uaddr' if guest_memfd is shareable Date: Thu, 12 Jun 2025 19:54:00 -0500 Message-ID: <20250613005400.3694904-6-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250613005400.3694904-1-michael.roth@amd.com> References: <20250613005400.3694904-1-michael.roth@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|DS4PR12MB9660:EE_ X-MS-Office365-Filtering-Correlation-Id: 009874e5-a210-4d96-c938-08ddaa1538f4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|7416014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?bLA63iJkwiYyrnc8nk8CjZG26aptUYvvkcfj/dqAiTudZSGMSTZU5ieXhKA3?= =?us-ascii?Q?BLFTRKZZC1RZGtCta9BZRwpgVftBwBxCKMd6nO5Dwv2x698KNEbjbMlZk6WW?= =?us-ascii?Q?197uBlrN7bakTr8YPD+QdVAJxUwkErj1SRyFwGRVPdg8TJtFt17K14FyxqNh?= =?us-ascii?Q?x2qzCqLwQBGBMb066Ajz9OG9jrqjgnJk5/pL/mQvWUSPIeWLiU/xGf6vvD1/?= =?us-ascii?Q?KfMZEIz1ISI+TWUdizrFCFnB02fKvlvQWAI0RKcP+Ti/472aVhIi+iRa+xiy?= =?us-ascii?Q?CDPE/70w+BzDlX1ItlDvHk6aG017wzN3Jh2d2gXt9NHBmV9tAQ6Lcjgy4AkO?= =?us-ascii?Q?A+N65M+dxDW1UCT88+Qt/waIhNSqsB776v1vcYJfo/43KzwDD/CFnxxLfnpX?= =?us-ascii?Q?KLsfWt7LHb2pwZGmiGApqCslHdJvtHX2kQylMs0ZTJyXwYtZjB4x0FCLbyIN?= =?us-ascii?Q?nKxZZjeaL83wXRHB6C+DXIBVG/paLpsWcMXjcqgpEmqr8UD0ORITWnMQMJEg?= =?us-ascii?Q?iszY2D6F5eCi2x1S0FTF1Bicw/ZYMhO/ceNPsPl4AXsFXFJepOCd+xlDGVbD?= =?us-ascii?Q?N7nI+cNYs5NET5tPGq0d9Wk9Y8mNeYCr/DobyHNnz+pfmTpQ6DdB141aZp9o?= =?us-ascii?Q?9mX9MT91C/RwiPPDv2DyebxwLTTG+0keneMTXUTcN+Eqbj8vsj/7OvWLnz88?= =?us-ascii?Q?VNgY9g6NVtT6IIVRj2aB/5veTNlQ3I/+V7KjzUR7TFtB/BKsosWlZe6lTzzy?= =?us-ascii?Q?OKjxiCf8zc6le0/BFy7I3BIkOw/6kCUN/eUWvsLU13dUi8yeCwWC+6+nuhAx?= =?us-ascii?Q?8R/BIgTdgr+lXbrBQyTtiPIwbg6yfXfvgVZNEQ58hhBMzdTedHA6hDhZEZQt?= =?us-ascii?Q?F/3bwwkNWg7Zwo0CGizOlsN4Mr4UP1g455tC+wdiJvAUnGvOmp4eDMee0CQN?= =?us-ascii?Q?o5RCjeBAcGd5rThjpSa/Gd2eqICQBS27gyYLx5aK7esvgQEvSiGWkEqHhS6M?= =?us-ascii?Q?B4CZSwlMGi+OHUhmI6iNmd6f1ie0m5gTzrmveuuSEvA9Piqf3ESa5s9U5tjO?= =?us-ascii?Q?x9zKd9pWWe8+lSeQdhO7hB7/3pMAsAWidgQpLsPQliJXXlz93V7k+rzC1Gg9?= =?us-ascii?Q?niq+CPSHdKHAtV7xilbu0W6+f/X5lcOji2uMF4sTiLku/1+jC5zGTORdn68X?= =?us-ascii?Q?eysQprnU4P5JHalzWysizooikYKu1PFzK75NeuE36Hbh5JNdm/eYhvLzZ0bh?= =?us-ascii?Q?8wej5ISroypQGUeEKNv2fTxFiG8z8c7WlGQ+tmZjLpbR5L+sXvCXmc/1jCom?= =?us-ascii?Q?LdfgCNVGemPWRx73XJKqqSi3EdbLf16syaxKYC4PM9QQOMwGHyE0KwVQ/joK?= =?us-ascii?Q?KFWAQgijER09ZqXJbDyABzHT1/XqVvUWAHsIQL48C2vIsP7h6Ys+kVTNFu3S?= =?us-ascii?Q?paWO3lNmjSFmrbp0ktp7oxIoiwZkko2cLNqXhF9qx1A/+5SvgCmzKpTT+C61?= =?us-ascii?Q?LKDD8T7SrJqOC7k9T49v0opQAZXj/7MXh5HI?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(82310400026)(36860700013)(7416014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 00:57:08.1728 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 009874e5-a210-4d96-c938-08ddaa1538f4 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9660 Content-Type: text/plain; charset="utf-8" There is no need to copy in the data for initial guest memory payload in the case of shareable gmem instances since userspace can just initialize the contents directly. Ignore the 'uaddr' parameter in cases where KVM_MEMSLOT_SUPPORTS_SHARED is set for the GPA's memslot. Also incorporate similar expectations into kvm_gmem_populate() to avoid dealing with potential issues where guest_memfd's shared fault handler might trigger when issuing callbacks to populate pages and not know how to deal the index being marked as private. Signed-off-by: Michael Roth --- .../virt/kvm/x86/amd-memory-encryption.rst | 4 +++- arch/x86/kvm/svm/sev.c | 14 ++++++++++---- virt/kvm/guest_memfd.c | 8 ++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Documentation/virt/kvm/x86/amd-memory-encryption.rst b/Documen= tation/virt/kvm/x86/amd-memory-encryption.rst index 1ddb6a86ce7f..399b331a523f 100644 --- a/Documentation/virt/kvm/x86/amd-memory-encryption.rst +++ b/Documentation/virt/kvm/x86/amd-memory-encryption.rst @@ -513,7 +513,9 @@ calling this command until those fields indicate the en= tire range has been processed, e.g. ``len`` is 0, ``gfn_start`` is equal to the last GFN in the range plus 1, and ``uaddr`` is the last byte of the userspace-provided sou= rce buffer address plus 1. In the case where ``type`` is KVM_SEV_SNP_PAGE_TYPE= _ZERO, -``uaddr`` will be ignored completely. +``uaddr`` will be ignored completely. If the guest_memfd instance backing = the +GFN range has the GUEST_MEMFD_FLAG_SUPPORT_SHARED flag set, then ``uaddr``= will +be ignored for all KVM_SEV_SNP_PAGE_TYPE_*'s. =20 Parameters (in): struct kvm_sev_snp_launch_update =20 diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index ed85634eb2bd..6e4473e8db6d 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -2174,6 +2174,7 @@ struct sev_gmem_populate_args { __u8 type; int sev_fd; int fw_error; + bool gmem_supports_shared; }; =20 static int sev_gmem_post_populate(struct kvm *kvm, gfn_t gfn_start, kvm_pf= n_t pfn, @@ -2185,7 +2186,8 @@ static int sev_gmem_post_populate(struct kvm *kvm, gf= n_t gfn_start, kvm_pfn_t pf int npages =3D (1 << order); gfn_t gfn; =20 - if (WARN_ON_ONCE(sev_populate_args->type !=3D KVM_SEV_SNP_PAGE_TYPE_ZERO = && !src)) + if (WARN_ON_ONCE(sev_populate_args->type !=3D KVM_SEV_SNP_PAGE_TYPE_ZERO = && + !sev_populate_args->gmem_supports_shared && !src)) return -EINVAL; =20 for (gfn =3D gfn_start, i =3D 0; gfn < gfn_start + npages; gfn++, i++) { @@ -2275,7 +2277,7 @@ static int snp_launch_update(struct kvm *kvm, struct = kvm_sev_cmd *argp) struct kvm_sev_snp_launch_update params; struct kvm_memory_slot *memslot; long npages, count; - void __user *src; + void __user *src =3D NULL; int ret =3D 0; =20 if (!sev_snp_guest(kvm) || !sev->snp_context) @@ -2326,7 +2328,10 @@ static int snp_launch_update(struct kvm *kvm, struct= kvm_sev_cmd *argp) =20 sev_populate_args.sev_fd =3D argp->sev_fd; sev_populate_args.type =3D params.type; - src =3D params.type =3D=3D KVM_SEV_SNP_PAGE_TYPE_ZERO ? NULL : u64_to_use= r_ptr(params.uaddr); + sev_populate_args.gmem_supports_shared =3D kvm_gmem_memslot_supports_shar= ed(memslot); + + if (!kvm_gmem_memslot_supports_shared(memslot)) + src =3D params.type =3D=3D KVM_SEV_SNP_PAGE_TYPE_ZERO ? NULL : u64_to_us= er_ptr(params.uaddr); =20 count =3D kvm_gmem_populate(kvm, params.gfn_start, src, npages, sev_gmem_post_populate, &sev_populate_args); @@ -2338,7 +2343,8 @@ static int snp_launch_update(struct kvm *kvm, struct = kvm_sev_cmd *argp) } else { params.gfn_start +=3D count; params.len -=3D count * PAGE_SIZE; - if (params.type !=3D KVM_SEV_SNP_PAGE_TYPE_ZERO) + if (!kvm_gmem_memslot_supports_shared(memslot) && + params.type !=3D KVM_SEV_SNP_PAGE_TYPE_ZERO) params.uaddr +=3D count * PAGE_SIZE; =20 ret =3D 0; diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index a912b00776f1..309455e44e96 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -1462,6 +1462,14 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_= gfn, void __user *src, long } } else { max_order =3D 0; + + /* + * If shared memory is available, it is expected that + * userspace will populate memory contents directly and + * not provide an intermediate buffer to copy from. + */ + if (src) + return -EINVAL; } =20 p =3D src ? src + i * PAGE_SIZE : NULL; --=20 2.25.1