From nobody Sat Feb 7 16:06:02 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010059.outbound.protection.outlook.com [52.101.201.59]) (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 A401133D514; Thu, 8 Jan 2026 21:47:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908877; cv=fail; b=O1hnwippd5tW6LPS78Vu7ItQZoCQ+bsg6aa34hUS4AAqSkNqQxrKtheip6a6Nr0TN1x3Nkkih3IuFR2o0DADMU1zd6EAVj6pS7kTWVQKkHWKu8164Wkiejcj+u0NRpUIDT7RjRoPtGk7Qw6des8oFWAhq2xTcTZs6MFPpJSIsnQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908877; c=relaxed/simple; bh=TEWYaQESfTHXi5gKAS7mSl2Ylsgs6N6c3wn/zPf2pxs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FdHU1obqsFDcNlVd+qyAwPn0LxDpZCZ6wfjXrMvUovwWFHgQ2VqvmOJg6dadn92aU+PIuRAgys9kxtbvxQBKiAysl+8djL617Ik+UpOK5dOMxK85Vje9hW0sKsO7nC30vUGFBP5t/1ly75negxRgqU5LXZ0mdULGCCv/XoUt1BM= 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=VQJK0UAd; arc=fail smtp.client-ip=52.101.201.59 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="VQJK0UAd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L6js/uGTbEjL+UCwiwnkomNB2kHC5aJq3S62WQBOWVXWmyMzsqAmhMXEH1I0N4DM8HXJ7d+FNohexEKwiDJI22vL8wXXt96vfoQR9J9hrUHsuzQ0AI67qq9AL9ZXNSaOcV6ZrPH6kHD4wR84Xd8oEJ8+bhHgGKP6RC7Sz5OylU1Xra+h1cf/NGfaO/I3kXnRW+lrl3ael0rR8n5k2dNaMMJluObocVnI6ZkXHwUps/xVA3NQ3Fvjk4H1I3VXUMtLMeRLRbi0hatJM0MwAlkz90EY3MZCsCnr9DCvN27ueTQcgxVfTayjPlUozmDu5M3rlPMtydl/IRZvPBaCtgMc1Q== 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=X/DGeAmIneQdqsWfNqmsml3ObwhmC2xDuP86SwZg5aQ=; b=YIJic4vFAGtHdxlGZV67u1tEEQ9nNYCmPquYclvqUcJm0s3TcCds101OhWxlG8GLXHUmf4SQFFmRoXnWQzGaML7H3EVh6rv8zuYtWzZi68MicueeQgcRo15w9QT4IW8RiHno1Ba7QSY9bpVlzTiuIfCdgk5fLytog4tQzztXFT0QLx4e+EtVfcUiciQD7c8PEQkKVqOVrxFXOegJbyRCCQs0jucwRm2AtRtpImjc0dVsblWxbSRQD5ernw5CCNlhyvzGqiJywch0Pizk+HS9h1vIFfjBVFOinUJFe+ibc79eHk2WIQn+x0iXgOQqZFmEXpYomg0C/eT0itHwYdK46w== 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=X/DGeAmIneQdqsWfNqmsml3ObwhmC2xDuP86SwZg5aQ=; b=VQJK0UAd9beXq7Fe3gSk4i0r+3FQcrou9TWETrCHZrko/tNUx09cn0ffGVanJjbI/dJSGmMU3h8n+yFuebha4VUWi3X64jHGg77YBEehyXF7cMOp6AS5KLKcpC50ShQ8vlHIGl1Acp2J2HsPQziAuHxl6/JRafjGHK7kTv3Ac1Q= Received: from BYAPR02CA0071.namprd02.prod.outlook.com (2603:10b6:a03:54::48) by MN2PR12MB4222.namprd12.prod.outlook.com (2603:10b6:208:19a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Thu, 8 Jan 2026 21:47:51 +0000 Received: from CO1PEPF000044F1.namprd05.prod.outlook.com (2603:10b6:a03:54:cafe::55) by BYAPR02CA0071.outlook.office365.com (2603:10b6:a03:54::48) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.3 via Frontend Transport; Thu, 8 Jan 2026 21:47:53 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CO1PEPF000044F1.mail.protection.outlook.com (10.167.241.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Thu, 8 Jan 2026 21:47:51 +0000 Received: from localhost (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 8 Jan 2026 15:47:50 -0600 From: Michael Roth To: CC: , , , , , , , , , , , , , , , Subject: [PATCH v3 1/6] KVM: SVM: Fix a missing kunmap_local() in sev_gmem_post_populate() Date: Thu, 8 Jan 2026 15:46:17 -0600 Message-ID: <20260108214622.1084057-2-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260108214622.1084057-1-michael.roth@amd.com> References: <20260108214622.1084057-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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000044F1:EE_|MN2PR12MB4222:EE_ X-MS-Office365-Filtering-Correlation-Id: b794bbcf-d688-4ba2-d85c-08de4eff9263 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|7416014|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?bNgu/SXOkEzHd57MTzRe6z2EUdQ7TQWG5nl5+0yK2DsKZN7Evxcn8pZ4qzjx?= =?us-ascii?Q?Cgqw8P6IDDJlUa0PZn6Nro2+f5vJnML4tgv0Y6e+3+RvUJlhScXVjQBVKKFO?= =?us-ascii?Q?2d7i4DZkDA7CXmuzj8Cb3eYWj7DGdhKxXwfxedTQx3HQ3bbnfkYNYytGU6nh?= =?us-ascii?Q?obZylpHH0m+CarY5zlaU3rEyQwhGKaxE6epnIIxHyT6NKRr7En9KqCVbqtgz?= =?us-ascii?Q?RinjkFEDHTSW3zuVaisA2FV7ID8KrzziFsOiQDl9qIvZ5IdC6mZJek13uAxZ?= =?us-ascii?Q?y9AJnj9mAuwtWgy8xwYwn0L0AAkZ45o/uFmapbwGLQEPh9RH1/5UkT61Rdfu?= =?us-ascii?Q?PX8ox7b92RDV/o9Mw252VfDQFEYlyG8dHp93vJlGUecYp1POgJ9yvEO/LdB9?= =?us-ascii?Q?7n/DzXITg1/IsbS6t4C9B+n5GwEVf8GXj/tC33KvLOjc/qJMlMAH2sm7V1zP?= =?us-ascii?Q?ceU6ueS8yGlEjYBMtweT0BcYutJQ+epqxWy5o3RYKwKV/qP6RE3ptos9+wSy?= =?us-ascii?Q?fWsEkwVG1UL0ksB0om6qo5tm3zGjvA8XHT395PQYBYLFdzEWJ+tCKOKkfX9T?= =?us-ascii?Q?rWDCqzR9AoSE/h9jQw00/aWpL9EHqhib9mzDyo4Ian5RXR5Ow5A1Resy03sk?= =?us-ascii?Q?ZLs9vC0U3zGl4s7+fC4ylRbFFaAIWzClI6JvAXN7S9BxOo211oarUhhnJ4wb?= =?us-ascii?Q?WwBBSrGLgiBAltu81qAS9jZpgfmd9kZB+BuZAHXCbpY4TVnHNEvWFl4mz8os?= =?us-ascii?Q?N/KzFX/zts4GZ4wsa7pAgSVbN+xxrQpe6pmGCi2HL1F5qjHKUkzqCAGzJUDR?= =?us-ascii?Q?LhZM+QxnvoZkBtGm8Q0n/SYr70ylkGjWZqA8zC/YgrV/xXPjPHcGpCc6jxbR?= =?us-ascii?Q?V8nqrYQx3goMv59vHzKYKGF48xG7Ln11V5wjcNVhBTkQD9wHIZ6YF+2GBMiY?= =?us-ascii?Q?RdHRlClj/cfdxv9b5o+zbw0pyRR+wHTBZjxieLvliCUV8H+rta17HJ+Y0smy?= =?us-ascii?Q?LZaVklYKmiwxfDhQjAAGNtyZ0aWVE95s0GugaDloen00vg+9Y/VBTAZNRWpL?= =?us-ascii?Q?9wl8EbiK13IdqkiCw5aR5DNgjZ2L0GKwjvltmARwEr0NgNscWlp+kql7L8A1?= =?us-ascii?Q?I5tPYrS3IWdoPPPVT28u28wCUTVTINhpWfq7vHq5Hr2Utcl2hZCyXAIURzSZ?= =?us-ascii?Q?bxrL/VXV4v3uUuK4fNNo/QFhq94OZHWfP0Ge5B4AOH00uhoKMe4edvdgBudk?= =?us-ascii?Q?Jy2Ewxo12wVZ9cLF3aJ3p9z9XS192Rnkj/P/9lO5D4O3tWV3X+KuktFJtZxP?= =?us-ascii?Q?rP3VURL/51OJzvG6MxDxAumGZQ1/wHd6dTTEfRnHVreIxNCNiJYCYiPMMtQn?= =?us-ascii?Q?NtvjXysGS0yEq5AFHQS7pjFL6i9tuNW/cN2QKuBgcqtiT631MreOxstratk2?= =?us-ascii?Q?+ddH1qDnjR6mAYrxoMg5g+GRxg8LESG3ZE4x87sA7mqOokPicSiLLAaKRNDk?= =?us-ascii?Q?XhWMciLxH7PXOJs1AC6n5WOfK0pYE0tmPU8Q/Gj8TZoRZOUDW+6+XoVxyPZu?= =?us-ascii?Q?ilCGnVfE6dbHY161MIU=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(7416014)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2026 21:47:51.1506 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b794bbcf-d688-4ba2-d85c-08de4eff9263 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000044F1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4222 Content-Type: text/plain; charset="utf-8" From: Yan Zhao sev_gmem_post_populate() needs to unmap the target vaddr after copy_from_user() to the vaddr fails. Fixes: dee5a47cc7a4 ("KVM: SEV: Add KVM_SEV_SNP_LAUNCH_UPDATE command") Signed-off-by: Yan Zhao Signed-off-by: Michael Roth --- arch/x86/kvm/svm/sev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index f59c65abe3cf..261d9ef8631b 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -2296,6 +2296,7 @@ static int sev_gmem_post_populate(struct kvm *kvm, gf= n_t gfn_start, kvm_pfn_t pf void *vaddr =3D kmap_local_pfn(pfn + i); =20 if (copy_from_user(vaddr, src + i * PAGE_SIZE, PAGE_SIZE)) { + kunmap_local(vaddr); ret =3D -EFAULT; goto err; } --=20 2.25.1 From nobody Sat Feb 7 16:06:02 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010068.outbound.protection.outlook.com [40.93.198.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 EE312322B69; Thu, 8 Jan 2026 21:48:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908901; cv=fail; b=FwA5Ou3Xr+MmEG/xrKxjF3Fa1xS40gVKD2bZD0ufjorhidFRjtP7QfdS/64pNVsZr0mZ+Hyp+2pqRe0r52/cHlw/Mm5WGtHo4H3wUdvp5468zDjnvdAZeoarVuEep3BVgQFMzJkZf3YdwlXctaxdTjK0EHL2Sw+evT2vpA0i87s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908901; c=relaxed/simple; bh=OEvM6qbTylvo50D11P9SeLADcnjizH78GnvWG2itMWQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oouuMarOMA1OKi3FA+FHE1KCWUPKCJo8f/YULu9XvfAU3Wp3NCP8/qw8vpYH/HBAvCYb1QzXRUXGlHQ2PbcsrLJwq/afSkHak4QadGLH1tSDZLER10QLjbRqQIDIhpUuYLI4u5QeUSxNdC8xi5kjCbIk/EWSjhAv2WQOO2t1T5E= 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=PxLNoxra; arc=fail smtp.client-ip=40.93.198.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="PxLNoxra" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rBgX839IlHB9yBjf64g550St9F/Vgd4gaoyInwkWr7FYy5W2Q1G6px68p+tmCSoqfVTjTG/SYL7+zXHqPcuhGIsUELyGJKwi72mocv1M+dUEnptDP4kI75+vGzEbah1Ad7e4nNOhyQkMgagGTIPmKX94OfjT/AEfAuYiblCTyFBYFYFv9jKskn7WPGeetdkOZogqxWyN5JqFKOwReAzvt7NrDrBIYjBSTQIh2z7J/zOSV03fXWpuQU9yBhvwoWTc/rnRFHFBhsqPIYx02J8eUk3sCVKAaJCFNnW3sZH0HAbozZgazNqsZsDC0SvPt3thSkeDee85G/4tbQNkCBBp3A== 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=Z+T3vQgOwfoAwYq9ThP4FF0wIPJyST2c7qW9it038Dg=; b=FHeoecIy9QZJJtTOQLCFYwcM/4j4YN3dX4vB1mMwnT3Rf0pceizG0sBfZTd7zKsQoRbYLTmFzv3YgOwDnOYMd85u8N+M/Wf1GExqfHMQKIiyoziwV5RdpgIpUviLSLWPgL0ZHLLfUwTKdRSwNW0aR7jUmTeUyfUtp00UCscooCODGB+mIyB1aXJW5/e1wZrCNwfcvD0ELrx3Uhj4Tc3KfvhYlSQkRDd5aY5S4ksJt7adZbY4guJhtcmrXRDHExKhe2Ngvh0YdffTMeIobxUeZtY1VDn917zwY6FCrmhJQN9fNFXIaijbLmqL7rAAEv0C2ELtmGzUzT8rD0txq040uA== 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=Z+T3vQgOwfoAwYq9ThP4FF0wIPJyST2c7qW9it038Dg=; b=PxLNoxrajcJw+gIqtOEcDNKC3zIwGZvOBONR4AqX3K338+Fv+INA88Uo9To0nmLUs0Zr48Enmx3SHJ9/lQbRO6XelZrXBvbFPCHWtUnh8QNXIhonGNSvOA1pTgEakZdnf2tzebESPxvBSv1OsrjwrvjexkjoCnk7bzKr7EmlGmA= Received: from BY5PR17CA0028.namprd17.prod.outlook.com (2603:10b6:a03:1b8::41) by LV8PR12MB9716.namprd12.prod.outlook.com (2603:10b6:408:2a1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.3; Thu, 8 Jan 2026 21:48:12 +0000 Received: from CO1PEPF000044EE.namprd05.prod.outlook.com (2603:10b6:a03:1b8:cafe::23) by BY5PR17CA0028.outlook.office365.com (2603:10b6:a03:1b8::41) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.3 via Frontend Transport; Thu, 8 Jan 2026 21:48:13 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CO1PEPF000044EE.mail.protection.outlook.com (10.167.241.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Thu, 8 Jan 2026 21:48:11 +0000 Received: from localhost (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 8 Jan 2026 15:48:11 -0600 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , "Kai Huang" Subject: [PATCH v3 2/6] KVM: guest_memfd: Remove partial hugepage handling from kvm_gmem_populate() Date: Thu, 8 Jan 2026 15:46:18 -0600 Message-ID: <20260108214622.1084057-3-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260108214622.1084057-1-michael.roth@amd.com> References: <20260108214622.1084057-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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000044EE:EE_|LV8PR12MB9716:EE_ X-MS-Office365-Filtering-Correlation-Id: e2514335-6005-4ec2-55ba-08de4eff9e77 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ZGabLIezJ9pzEb5WHRtijdCukgGTUp60nNPqL7iipGCMBLyvNPr7rvgy2Hv0?= =?us-ascii?Q?O+MxO73qZQa7CEKJs+v45gH+Z9JZXy2yKsQ6lx/vlVXn04IsmbXFmnoLHGYV?= =?us-ascii?Q?TAwXK83gu31P84fmydGloR8WLVkaklUo8jPMTtOHzQ76KpzyYw/8FzjX8n+y?= =?us-ascii?Q?Noc3FMIyNqtS6/K2hacbdEMPmD3OcVwoxw5dFiDwCkQ8YYMp2qKmlg/onzHl?= =?us-ascii?Q?MRUl8d7YKcudXpOiRM65PW3Y5XN9wO/7oAr/KSmMvFSACxNgsHiwcvmRL8lI?= =?us-ascii?Q?vliLMlXgq4fJKuTvvBekLm13t5kF9LwNfkxUSA93nyJMEzvz17UxzOeRQdIX?= =?us-ascii?Q?rsZGQx3XJiHM7PdnTSR8Y0+ldvz51QccPZqwrznQrLkE48Z0nSAMCyFOdVhw?= =?us-ascii?Q?4OY1dj8Go64/jAGQHzspr7DDQ6q4xxaqUXmhCm//3YvE+rVlpHaSb/7AC0kw?= =?us-ascii?Q?gq2oHxaQihWNPDct6FYEOePBsBtbKnD3Bni9Q0fjtrYK2/k8mPs63SoSrSEy?= =?us-ascii?Q?yNHmGXXPJDiI1M2DoyBamTg+K99boEFesDLPaat8kZYY9983s4g/3EOeARGI?= =?us-ascii?Q?2Yk78Do3Q39x5izoo6Lc8FT3+5A1dUqf2DojLsloiTCrN1PMW7fBBAbszbbi?= =?us-ascii?Q?qen6KuTbM9hHVnZ+fcpuoRsh+8MZXKL1OarNLEmv6qK9xVfDjo9HVRDt6VjU?= =?us-ascii?Q?PeSECGYor7qmhUErNrPA66XvCPtG+5suVRBBXClk49AOo7ZVbfZyd8hX4BWW?= =?us-ascii?Q?fZJBV9LARWzmM15uDql1OVK4TPk3xAbBWjfhTpbPWXIhGXe3Y7GQ3Y97QZhU?= =?us-ascii?Q?Z29LuLtDNDKF5gYIvV3IKNyRElmYoWTFEX/CFDYFx6vbOOPTFoKRUKq6g1r3?= =?us-ascii?Q?MYMOdhVX5CQ0AQRuTqtMZJptpf42c0R2nedRyDRGzLeB/hO5R5vFYhK1H6HG?= =?us-ascii?Q?fDBYX+rTxRg+Zh4/jrdj9gSnFeQlNsY+sYGzKgaLn0eaEQpm+8ghuWeGL870?= =?us-ascii?Q?xDuoSmFq8noacjKnTwGT7J+zyuVgXWs2dnscv0zvtSFdrsYB0FmVmeCZgA7A?= =?us-ascii?Q?u5H3Q/JSohnapDVPCUej1WP7jZgBRx4BHbFXK1KmDwmquSc4v7DMFXfG1vjO?= =?us-ascii?Q?unFwBhJclpXCvfdDylLQBewS7RzNIipi2sj3ekLYXenhxcExnus4RldRnZxm?= =?us-ascii?Q?4EpoEIvh0+VHGaZOho/yFHsRvMSWzAvCwAu+xXpbWi2NWwKsPQcTLEVggqrm?= =?us-ascii?Q?v0upZDCB69YniW0fHi2ZdeCCt5ucg9ADGEDOhQ5FPASFYLUGHnOJthIN16yR?= =?us-ascii?Q?/08Q60pOxxlNu7u/PMjKwGd+NbAyKMyr+1wxIllCgPh7ph4+EsYcF7ITe4je?= =?us-ascii?Q?vXtTw9kMG8FuO61BzHJswFn/6V2wzrbsABqbeH3rREEerb9ms8d9CJVdD5qc?= =?us-ascii?Q?oqZhzGcy5vDF6q/4oGA5XMz3K/3DdiRJuS+MimmUPGGPIFzkByzSGiwWd5+T?= =?us-ascii?Q?TAylrkKr7yBOOLGKjHhBsPpPe7cudAol54/ZhVsJswjuQiQ8A+QYDWzc1uXq?= =?us-ascii?Q?shV7+vt/voVwe3j6HR8=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2026 21:48:11.4748 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e2514335-6005-4ec2-55ba-08de4eff9e77 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000044EE.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9716 Content-Type: text/plain; charset="utf-8" kvm_gmem_populate(), and the associated post-populate callbacks, have some limited support for dealing with guests backed by hugepages by passing the order information along to each post-populate callback and iterating through the pages passed to kvm_gmem_populate() in hugepage-chunks. However, guest_memfd doesn't yet support hugepages, and in most cases additional changes in the kvm_gmem_populate() path would also be needed to actually allow for this functionality. This makes the existing code unecessarily complex, and makes changes difficult to work through upstream due to theoretical impacts on hugepage support that can't be considered properly without an actual hugepage implementation to reference. So for now, remove what's there so changes for things like in-place conversion can be implemented/reviewed more efficiently. Suggested-by: Vishal Annapurve Co-developed-by: Vishal Annapurve Signed-off-by: Vishal Annapurve Tested-by: Vishal Annapurve Tested-by: Kai Huang Signed-off-by: Michael Roth Reviewed-by: Yan Zhao Tested-by: Yan Zhao --- arch/x86/kvm/svm/sev.c | 94 ++++++++++++++++------------------------ arch/x86/kvm/vmx/tdx.c | 2 +- include/linux/kvm_host.h | 2 +- virt/kvm/guest_memfd.c | 30 +++++++------ 4 files changed, 56 insertions(+), 72 deletions(-) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index 261d9ef8631b..a70bd3f19e29 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -2267,67 +2267,53 @@ struct sev_gmem_populate_args { int fw_error; }; =20 -static int sev_gmem_post_populate(struct kvm *kvm, gfn_t gfn_start, kvm_pf= n_t pfn, - void __user *src, int order, void *opaque) +static int sev_gmem_post_populate(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pf= n, + void __user *src, void *opaque) { struct sev_gmem_populate_args *sev_populate_args =3D opaque; + struct sev_data_snp_launch_update fw_args =3D {0}; struct kvm_sev_info *sev =3D to_kvm_sev_info(kvm); - int n_private =3D 0, ret, i; - int npages =3D (1 << order); - gfn_t gfn; + bool assigned =3D false; + int level; + int ret; =20 if (WARN_ON_ONCE(sev_populate_args->type !=3D KVM_SEV_SNP_PAGE_TYPE_ZERO = && !src)) return -EINVAL; =20 - for (gfn =3D gfn_start, i =3D 0; gfn < gfn_start + npages; gfn++, i++) { - struct sev_data_snp_launch_update fw_args =3D {0}; - bool assigned =3D false; - int level; - - ret =3D snp_lookup_rmpentry((u64)pfn + i, &assigned, &level); - if (ret || assigned) { - pr_debug("%s: Failed to ensure GFN 0x%llx RMP entry is initial shared s= tate, ret: %d assigned: %d\n", - __func__, gfn, ret, assigned); - ret =3D ret ? -EINVAL : -EEXIST; - goto err; - } + ret =3D snp_lookup_rmpentry((u64)pfn, &assigned, &level); + if (ret || assigned) { + pr_debug("%s: Failed to ensure GFN 0x%llx RMP entry is initial shared st= ate, ret: %d assigned: %d\n", + __func__, gfn, ret, assigned); + ret =3D ret ? -EINVAL : -EEXIST; + goto out; + } =20 - if (src) { - void *vaddr =3D kmap_local_pfn(pfn + i); + if (src) { + void *vaddr =3D kmap_local_pfn(pfn); =20 - if (copy_from_user(vaddr, src + i * PAGE_SIZE, PAGE_SIZE)) { - kunmap_local(vaddr); - ret =3D -EFAULT; - goto err; - } + if (copy_from_user(vaddr, src, PAGE_SIZE)) { kunmap_local(vaddr); + ret =3D -EFAULT; + goto out; } - - ret =3D rmp_make_private(pfn + i, gfn << PAGE_SHIFT, PG_LEVEL_4K, - sev_get_asid(kvm), true); - if (ret) - goto err; - - n_private++; - - fw_args.gctx_paddr =3D __psp_pa(sev->snp_context); - fw_args.address =3D __sme_set(pfn_to_hpa(pfn + i)); - fw_args.page_size =3D PG_LEVEL_TO_RMP(PG_LEVEL_4K); - fw_args.page_type =3D sev_populate_args->type; - - ret =3D __sev_issue_cmd(sev_populate_args->sev_fd, SEV_CMD_SNP_LAUNCH_UP= DATE, - &fw_args, &sev_populate_args->fw_error); - if (ret) - goto fw_err; + kunmap_local(vaddr); } =20 - return 0; + ret =3D rmp_make_private(pfn, gfn << PAGE_SHIFT, PG_LEVEL_4K, + sev_get_asid(kvm), true); + if (ret) + goto out; + + fw_args.gctx_paddr =3D __psp_pa(sev->snp_context); + fw_args.address =3D __sme_set(pfn_to_hpa(pfn)); + fw_args.page_size =3D PG_LEVEL_TO_RMP(PG_LEVEL_4K); + fw_args.page_type =3D sev_populate_args->type; =20 -fw_err: + ret =3D __sev_issue_cmd(sev_populate_args->sev_fd, SEV_CMD_SNP_LAUNCH_UPD= ATE, + &fw_args, &sev_populate_args->fw_error); /* * If the firmware command failed handle the reclaim and cleanup of that - * PFN specially vs. prior pages which can be cleaned up below without - * needing to reclaim in advance. + * PFN before reporting an error. * * Additionally, when invalid CPUID function entries are detected, * firmware writes the expected values into the page and leaves it @@ -2337,26 +2323,20 @@ static int sev_gmem_post_populate(struct kvm *kvm, = gfn_t gfn_start, kvm_pfn_t pf * information to provide information on which CPUID leaves/fields * failed CPUID validation. */ - if (!snp_page_reclaim(kvm, pfn + i) && + if (ret && !snp_page_reclaim(kvm, pfn) && sev_populate_args->type =3D=3D KVM_SEV_SNP_PAGE_TYPE_CPUID && sev_populate_args->fw_error =3D=3D SEV_RET_INVALID_PARAM) { - void *vaddr =3D kmap_local_pfn(pfn + i); + void *vaddr =3D kmap_local_pfn(pfn); =20 - if (copy_to_user(src + i * PAGE_SIZE, vaddr, PAGE_SIZE)) + if (copy_to_user(src, vaddr, PAGE_SIZE)) pr_debug("Failed to write CPUID page back to userspace\n"); =20 kunmap_local(vaddr); } =20 - /* pfn + i is hypervisor-owned now, so skip below cleanup for it. */ - n_private--; - -err: - pr_debug("%s: exiting with error ret %d (fw_error %d), restoring %d gmem = PFNs to shared.\n", - __func__, ret, sev_populate_args->fw_error, n_private); - for (i =3D 0; i < n_private; i++) - kvm_rmp_make_shared(kvm, pfn + i, PG_LEVEL_4K); - +out: + pr_debug("%s: exiting with return code %d (fw_error %d)\n", + __func__, ret, sev_populate_args->fw_error); return ret; } =20 diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index 2d7a4d52ccfb..4fb042ce8ed1 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -3118,7 +3118,7 @@ struct tdx_gmem_post_populate_arg { }; =20 static int tdx_gmem_post_populate(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pf= n, - void __user *src, int order, void *_arg) + void __user *src, void *_arg) { struct tdx_gmem_post_populate_arg *arg =3D _arg; struct kvm_tdx *kvm_tdx =3D to_kvm_tdx(kvm); diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index d93f75b05ae2..1d0cee72e560 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2581,7 +2581,7 @@ int kvm_arch_gmem_prepare(struct kvm *kvm, gfn_t gfn,= kvm_pfn_t pfn, int max_ord * Returns the number of pages that were populated. */ typedef int (*kvm_gmem_populate_cb)(struct kvm *kvm, gfn_t gfn, kvm_pfn_t = pfn, - void __user *src, int order, void *opaque); + void __user *src, void *opaque); =20 long kvm_gmem_populate(struct kvm *kvm, gfn_t gfn, void __user *src, long = npages, kvm_gmem_populate_cb post_populate, void *opaque); diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index fdaea3422c30..9dafa44838fe 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -151,6 +151,15 @@ static struct folio *kvm_gmem_get_folio(struct inode *= inode, pgoff_t index) mapping_gfp_mask(inode->i_mapping), policy); mpol_cond_put(policy); =20 + /* + * External interfaces like kvm_gmem_get_pfn() support dealing + * with hugepages to a degree, but internally, guest_memfd currently + * assumes that all folios are order-0 and handling would need + * to be updated for anything otherwise (e.g. page-clearing + * operations). + */ + WARN_ON_ONCE(folio_order(folio)); + return folio; } =20 @@ -829,7 +838,7 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn= , void __user *src, long struct kvm_memory_slot *slot; void __user *p; =20 - int ret =3D 0, max_order; + int ret =3D 0; long i; =20 lockdep_assert_held(&kvm->slots_lock); @@ -848,7 +857,7 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn= , void __user *src, long filemap_invalidate_lock(file->f_mapping); =20 npages =3D min_t(ulong, slot->npages - (start_gfn - slot->base_gfn), npag= es); - for (i =3D 0; i < npages; i +=3D (1 << max_order)) { + for (i =3D 0; i < npages; i++) { struct folio *folio; gfn_t gfn =3D start_gfn + i; pgoff_t index =3D kvm_gmem_get_index(slot, gfn); @@ -860,7 +869,7 @@ 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, &is_prepared, NULL= ); if (IS_ERR(folio)) { ret =3D PTR_ERR(folio); break; @@ -874,20 +883,15 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_g= fn, void __user *src, long } =20 folio_unlock(folio); - WARN_ON(!IS_ALIGNED(gfn, 1 << max_order) || - (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_range_has_memory_attributes(kvm, gfn, gfn + 1, + KVM_MEMORY_ATTRIBUTE_PRIVATE, + KVM_MEMORY_ATTRIBUTE_PRIVATE)) + goto put_folio_and_exit; =20 p =3D src ? src + i * PAGE_SIZE : NULL; - ret =3D post_populate(kvm, gfn, pfn, p, max_order, opaque); + ret =3D post_populate(kvm, gfn, pfn, p, opaque); if (!ret) kvm_gmem_mark_prepared(folio); =20 --=20 2.25.1 From nobody Sat Feb 7 16:06:02 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011019.outbound.protection.outlook.com [40.107.208.19]) (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 706A6320CCC; Thu, 8 Jan 2026 21:48:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908921; cv=fail; b=LjXnAqp3kUBiIxsUrwJ8Q9kImGqpQoPinTlqeRpItpM7ZcU1OMOuuyAo2ZTKy0CmUWMaEB6Vgo5BJ1kvNdUCvoAG5chwEBizBYzfvhOGyKffjm5mBu0TrBYktFuGgi54dBvsMiHETxUt0jmPpJfBp1wOs+vL9WfvlXPzlF10RBU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908921; c=relaxed/simple; bh=+lvhFVbwldlW+3DLvIqne3f6jNgyIpVpR0EUPeFm2ug=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Vapw9fv+zYYj3+snyE1JXbvDdv6+rwzXH7sA54agi/cam5IhasuKzA+X9sbgQDtJRnqz+PFfvZph0MbDXz0RP6imFK/fED2U8hpiBoOXcQeeW4PsRVzJPWEoXNnNF8neUPfFH9RI4ozN/pS45PhhTHC5cI1s2QVcweV8nzU4n8E= 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=OOIYWRzr; arc=fail smtp.client-ip=40.107.208.19 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="OOIYWRzr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Rf9PHvmqWoIl08r9rRVecjw2nuzWM7TVpaGPX0f4h7OOBOg20lLnDWUFbnsXU9+PTRPDDka73TvQhWuWdH+N0A2RUUd6w4a+M715J5tvwvojVyL+yAkUNm3K9U+XC1xdRP4sAT0ybzkQPdkk9FXjgitKkir0Hw1QSBNBKTemR2pejIyqHFfOGqV92rTziCNzhlUa33xmZ7TCQROwRFYfEdbEgdicpfQNxQT97Keuq4DFTKZc8yJGTIy6lDYv6QzNiSK2GQMDslLiS93UfY3W1PofgFJxf9vIcj0BfGN+D5MD6cTOyg/s4Yb6ccxIROIhH6Ovzvyr1W2kgsbrRoeLBA== 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=YqhAPP7DM7ogn67eaMlEqzcRxGfRylkyRcISDB7jZHk=; b=NGFdNXFqN0vA43QTBkxuMFl2EngJqUWZTI0G5pvtKIBr+fT6YX+egR9aKc5wUr/NdS6poYTkGTAt7wtPMhvtk8yZWSU4QpE6IxFd3tr5wXTOESCyujI/6X09v9g5+RjanO2ipNNt/+lZK/RXS+5apLOrx7o5EJfLGMvpYgnIx082YMnbj29wOcI8IHbAtpphd2C2Vy7fvZS9vyEVWIAObQtkywzUL7kTHuIuoJhiWtsVZDv2mq2cFCaIXsrPiFOGwbld8yhbSlmFttyN0+urs9Inr+MC2FRRVYEWswK/9ncidi5XF30uVmXAThmWTom+w/nNBPW9r/6nQUI8ZeHLbQ== 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=YqhAPP7DM7ogn67eaMlEqzcRxGfRylkyRcISDB7jZHk=; b=OOIYWRzr2bC9N5kzfBJKKE0guVkK4/9DRTO+BxFUx78QIuyFgMJ0FkVC7P9R/8fkTKh+uOfpmV9jzSgN3zaywRs5jvZ58nixuf09EmbJBTKg35x2i27tgZX5GzcEvqnJyKoQsXJgs8yegnwgVJjcxyYZ0G978G1QnEqIL5YTIqA= Received: from BY5PR03CA0008.namprd03.prod.outlook.com (2603:10b6:a03:1e0::18) by LV2PR12MB5846.namprd12.prod.outlook.com (2603:10b6:408:175::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.4; Thu, 8 Jan 2026 21:48:33 +0000 Received: from CO1PEPF000044F2.namprd05.prod.outlook.com (2603:10b6:a03:1e0:cafe::58) by BY5PR03CA0008.outlook.office365.com (2603:10b6:a03:1e0::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.2 via Frontend Transport; Thu, 8 Jan 2026 21:48:28 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CO1PEPF000044F2.mail.protection.outlook.com (10.167.241.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Thu, 8 Jan 2026 21:48:32 +0000 Received: from localhost (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 8 Jan 2026 15:48:31 -0600 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , "Kai Huang" Subject: [PATCH v3 3/6] KVM: guest_memfd: Remove preparation tracking Date: Thu, 8 Jan 2026 15:46:19 -0600 Message-ID: <20260108214622.1084057-4-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260108214622.1084057-1-michael.roth@amd.com> References: <20260108214622.1084057-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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000044F2:EE_|LV2PR12MB5846:EE_ X-MS-Office365-Filtering-Correlation-Id: 04760073-2557-4834-51ce-08de4effaaff X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cOCTgbYTQeACiRnjr7+tpTSHOow9+tYVR30dQpx9p8O4YwIT/g9PxGQpmJn3?= =?us-ascii?Q?PlBQeZqtySkNDRZVe55PntEWB5neK9BBUNS800kiobfyYsvVsISL/YfDSNpA?= =?us-ascii?Q?uMZaWfvdG2yhq9mHlE3oJdcuv+sp5J28QnhTOyedYVcLlKc0sXkRPPp1Kgis?= =?us-ascii?Q?m2K8V3KUMapU2SH88+ThEx1XugbeQdpmQP9a4oWPL0Hy5MEOzxXM2yhsURDm?= =?us-ascii?Q?fdRQNb12uFzgJkLsyQHXTAjwl2wYHeh3s3tAMgM3YK7A77ElmC5fhj+pdgn6?= =?us-ascii?Q?BYJCOxYYZFgrkcEG3Fmiue7j4E1RHf25UL5uNEfi7VrARnEai/KBdieNGwuc?= =?us-ascii?Q?nxaG5sukE/v3IPisywvx+5roFebpgPJHtZARpOVxR+mtoiCgSYZKUoV7F+Nj?= =?us-ascii?Q?HQ91Hoen/Y3+jeo2xt6UGtX2Ro9gbGv9rJxgjQfK1y8+KMWGKAyp7qVqY4/y?= =?us-ascii?Q?xDVl/ROUg+vvkdIAsn4BVRQwNbNbeOTO8DF4SKMxRamiIib0AnLHixx/1n1f?= =?us-ascii?Q?o+7xqwnVfOmkeubpjrrH7IPNROjj/uWEXKSLJ6bww1bsVHvztTeC2XToYR9z?= =?us-ascii?Q?IyOHLWti52NvrGs5X+47406McLHHL2CGtYR3FfAC+q4e65PpEzbJ5h9n0CrF?= =?us-ascii?Q?w24AYG7O8AaXecaQFFpqqtEFV5drDQijs+sAVM3WwuetqfLkkeQK7DC7vZQs?= =?us-ascii?Q?RIIvTAHr9k2SZy19WRon45vA0zl8hZXc0ZQ+DrIF256nAw290t8c/NyljWY8?= =?us-ascii?Q?1lkzKbz+k6+XcYcxKbcTdAE4yXqCq0F59z0pGJoUZ9LcDnB6pFOPErGECksb?= =?us-ascii?Q?/WTJI9cJU74cufjYRchf/z1wpctLhhcRq0yAhiWCnNY2zmsIALvytQMXGGKL?= =?us-ascii?Q?65KeqjGUDjmq/4HiXmUA258rfftYj6MJ2l69UdXGJvsjRpf0kvf9kgYwprUi?= =?us-ascii?Q?veOFm+j9UBNfc+ANKJvE6jGlWGpjaeCgDBAVXtO9cJiHgtn3AnbEYs//XG8g?= =?us-ascii?Q?wZ6s8mOvC9TLgeERPaWnXyBRt3YV+i4e4pHo4vKoL4BJneDN0CvdN9TN7dAo?= =?us-ascii?Q?D/EQVffEt6Gdhi3RLOF4sKVum5KLpnJmCNu2hp3MfXD+QPkcWnAi4PHYd3tE?= =?us-ascii?Q?lbF81Y+8U/+QI57gAN3Ln3+nmBmv3Vqy58b4bYUPgbaJ6djr3Q0ExQvhuYoW?= =?us-ascii?Q?TcbpBWAi+OieF2Wxgjzd1hBRONpQesqS98v2ecxxCuts76YmDt5wL1UBJ0CR?= =?us-ascii?Q?MFvfQN3KP5Pq9LqtyQfx9fsdb0cy/yCIbTiCbf6jSe9b0aBgAsEAgTr6VVYG?= =?us-ascii?Q?/DPFCHazJXAGHq0KzVjjZfJxNkikRB2MJtyikN5Is7uwHrA+jQlLudu6GJCe?= =?us-ascii?Q?3vIiRZRdd2OQKgdGAG/5jnCkjEljIKkwict7ez2ef2XUPTt8vW/Xk/hFFB0e?= =?us-ascii?Q?RAT65O5hWbqmWBw5G3YKlG19jWgeO6KFcUdOR9c+AzWAO6bk9uXyvwqjJD+o?= =?us-ascii?Q?0ldZKzqvy3UPiY6IDByinFbj6K0b/zViQHojtEgXYX8TEqHuhFGH4QSnhiru?= =?us-ascii?Q?LQjX+aK3Vzm/JGMsh6s=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(376014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2026 21:48:32.4345 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 04760073-2557-4834-51ce-08de4effaaff 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000044F2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5846 Content-Type: text/plain; charset="utf-8" guest_memfd currently uses the folio uptodate flag to track: 1) whether or not a page has 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. Reviewed-by: Vishal Annapurve Tested-by: Vishal Annapurve Reviewed-by: Pankaj Gupta Tested-by: Kai Huang Signed-off-by: Michael Roth --- virt/kvm/guest_memfd.c | 44 ++++++++++++------------------------------ 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 9dafa44838fe..8b1248f42aae 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -76,11 +76,6 @@ static int __kvm_gmem_prepare_folio(struct kvm *kvm, str= uct 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. @@ -90,13 +85,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 @@ -114,11 +103,8 @@ static int kvm_gmem_prepare_folio(struct kvm *kvm, str= uct kvm_memory_slot *slot, WARN_ON(!IS_ALIGNED(slot->gmem.pgoff, folio_nr_pages(folio))); index =3D kvm_gmem_get_index(slot, gfn); index =3D ALIGN_DOWN(index, folio_nr_pages(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 /* @@ -429,7 +415,7 @@ static vm_fault_t kvm_gmem_fault_user_mapping(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); @@ -766,7 +752,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 *slot_file =3D READ_ONCE(slot->gmem.file); struct gmem_file *f =3D file->private_data; @@ -796,7 +782,6 @@ static struct folio *__kvm_gmem_get_pfn(struct file *fi= le, if (max_order) *max_order =3D 0; =20 - *is_prepared =3D folio_test_uptodate(folio); return folio; } =20 @@ -806,19 +791,22 @@ 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 folio *folio; - bool is_prepared =3D false; int r =3D 0; =20 CLASS(gmem_get_file, file)(slot); if (!file) return -EFAULT; =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)) return PTR_ERR(folio); =20 - if (!is_prepared) - r =3D kvm_gmem_prepare_folio(kvm, slot, gfn, folio); + if (!folio_test_uptodate(folio)) { + clear_highpage(folio_page(folio, 0)); + folio_mark_uptodate(folio); + } + + r =3D kvm_gmem_prepare_folio(kvm, slot, gfn, folio); =20 folio_unlock(folio); =20 @@ -861,7 +849,6 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn= , 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)) { @@ -869,19 +856,12 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_g= fn, void __user *src, long break; } =20 - folio =3D __kvm_gmem_get_pfn(file, slot, index, &pfn, &is_prepared, NULL= ); + folio =3D __kvm_gmem_get_pfn(file, slot, index, &pfn, NULL); 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); =20 ret =3D -EINVAL; @@ -893,7 +873,7 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn= , void __user *src, long p =3D src ? src + i * PAGE_SIZE : NULL; ret =3D post_populate(kvm, gfn, pfn, p, 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 Sat Feb 7 16:06:02 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010026.outbound.protection.outlook.com [52.101.61.26]) (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 745241F9F7A; Thu, 8 Jan 2026 21:48:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908937; cv=fail; b=JyorzypSSP7lTs7Vm/XNEjFWdUr7SQalcqT3d9na2H9zv4AOZOt3Qrs19H606FEhOLI4YdM0yqRqJlAwMlLZv32D+rsrav+FpO2Ezo+dXjsRrNjveKlznTLBF59ZY8vmehQzCqdtZf6BpB9oLPFTgG2LxzXh8yEiBp1INiOHugU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908937; c=relaxed/simple; bh=XWUMsPgQOfgRx95TtdPvULUniOSybX/fL+ys3DPkeGA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pbykEwKKx1684JnlgcWCt/Gx87MCLPg0GDj1EtMnxASFLQ9CHKgm5COgUzvF5vaGdDFYakWPT4WpVgKi93hU3A2T1GEITPgskMtiv3B2VO9SOId5orcU3poDQl12jO9l38JgGo0d+MO0sTeqabbQYojnRY87p92MNJidhxcpdUM= 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=vSP8M0Y2; arc=fail smtp.client-ip=52.101.61.26 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="vSP8M0Y2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IFC8bC/+69UpGfFt7TH+JqbeAyh0KnEJzSV7eUC/L+vpGb6bt6fYWJFcEXxmudnr9/PxBGksaNhlPym9zRxUh16I7Bd7kbeIIMrYAafV47/bOtNDKvZG6HhuAgcbicbciEQma94lr+XRE2xpsIhXrFad5n9pkZ31C0p9tbvleaLZCccbnwPHudo/w41yxocdy0trZJsduxQ88uolXuPAslqfV9ykihCeHFtaLo7k3pTY1GdnMxiB/HazD2AfDD2wmIghiT9F7RV/GAKmxEOz9E1oXaxHU01bnCogaqql29l04vwgW1rOYTYD5YCx82mMDCA4aDP9AXgF3bEniQlrjg== 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=T6S2bnfs9WvvEfWZmJfQLL0w0M0Psm/uI4p6BSOG8/E=; b=HNWg/2qVmVWGX2A2l6Cn+Y+ZR00imYIuBeGobzr17RtyNNp+Lvqjjk7MLrvmX/L5YZHJB69fVqnSw6WSSTCJoRtAhlvahsP2lByRlNkOgwwE9hel7n6jVWngRhBv5HN1Emr0Cpy47DDWrxMW5DE/yPx83mMKdeaQtg/Gqh62TiAhxlbbf6La/DE7jv/Blg1IQ1kqSJzbLT7QTQV+mFa5WHxrdmx3mWhD5lJ9ETO8rA41QtYVmWMbsKZBfiyoEBhiorp7JUZetnaBKvBXm10ccvpCyHaHqqHuPsvobt22YtVaaKdGN/ltNgBinc4mLPHDBXFOFf1v00OMFwpNQOTBOQ== 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=T6S2bnfs9WvvEfWZmJfQLL0w0M0Psm/uI4p6BSOG8/E=; b=vSP8M0Y2FIIZyaNLQ5YaXhXlnUPDVLUIJF1wflBu6liq/XOAgPjU3jPw4rnZwwONo7tUVJxH1yK0iTukvB8+gtolUFd4xo/uKDT19Q8EMA/UiXZIf/EawvyNYK+EwlJ+0X9ASvRbMBwFtSIAMvmh465PgL4pP8QzxjNASdaWu0E= Received: from MW4PR04CA0379.namprd04.prod.outlook.com (2603:10b6:303:81::24) by SN7PR12MB7911.namprd12.prod.outlook.com (2603:10b6:806:32a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.3; Thu, 8 Jan 2026 21:48:53 +0000 Received: from CO1PEPF000044F4.namprd05.prod.outlook.com (2603:10b6:303:81:cafe::f) by MW4PR04CA0379.outlook.office365.com (2603:10b6:303:81::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.3 via Frontend Transport; Thu, 8 Jan 2026 21:48:53 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CO1PEPF000044F4.mail.protection.outlook.com (10.167.241.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Thu, 8 Jan 2026 21:48:53 +0000 Received: from localhost (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 8 Jan 2026 15:48:52 -0600 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , "Kai Huang" Subject: [PATCH v3 4/6] KVM: SEV: Document/enforce page-alignment for KVM_SEV_SNP_LAUNCH_UPDATE Date: Thu, 8 Jan 2026 15:46:20 -0600 Message-ID: <20260108214622.1084057-5-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260108214622.1084057-1-michael.roth@amd.com> References: <20260108214622.1084057-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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000044F4:EE_|SN7PR12MB7911:EE_ X-MS-Office365-Filtering-Correlation-Id: 2747046a-d6e2-4d32-e667-08de4effb743 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|36860700013|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?B/tIsMYIRe7MhKrwpHwkwuXbyp4MbYzmFbXKc78nSb9dEgPo8lrKCJ8dOzl2?= =?us-ascii?Q?V/TV4+vGyRmRzRdLnuzxJZhWzRLxS0Hl00nGizWhjyekJXJYjRTnHplY2tMf?= =?us-ascii?Q?vAZfu1JZ50CPBXxDfi7V2KqMnt402bfnTw0H5Is5jErunKL9sPgQXJBB5KrY?= =?us-ascii?Q?O3+vcjhNABFi4aR0bGcHFI2+qxapnYPFuJFMn78FBHEC0tAGw0rGp4Cxq8qM?= =?us-ascii?Q?+/zDOY1G9HkbBOqm116QmVyVp5dl+mwqDnhHJlfmHWeT5Z+sKu/8WcY+yA1Q?= =?us-ascii?Q?ICExICD0pe3YEjiR3FpKczMl2f+fQ/bD1XIqdn+ioXl6F6nAdjBunr00PyRe?= =?us-ascii?Q?pRijoisINIA0/u6v07SZFw9LuShNxFCdrslWltO7gXODBhaYhbYqBGN2O3b5?= =?us-ascii?Q?/BTvuijuAJZ1jqkB6UtIy9AMxkbqpC3ilSL85kQNnJ6xYWVkyncELSMMJrZ2?= =?us-ascii?Q?lA5BqorMHjJYH/rP+GsHvkPq+432BWZqmC1Nrif0AmgpNRGi0V59B7G8AVtH?= =?us-ascii?Q?HXuDTM9Rr2X3luiO62O2VOZAQVr9seZdi44iYbzK3qU8x8PnG0Zcc9MsrTEv?= =?us-ascii?Q?6Dkgx+z8sbR296fPLq1EtLz8G0PKEIZl4dMeGM/NeJDf4EzcfkS9ZtCR57iq?= =?us-ascii?Q?ImRP+cAYENISw31vAOudAr4IyAiVmY4vnLdHP343z6F+qiTCl44drnG41MyH?= =?us-ascii?Q?D4/PSsApozyO4NyAbsIkegsiqzf1zoS4liyI3C/TIj/dsYKsxgd93ptf3wZB?= =?us-ascii?Q?kmmOTtdMFOQex3ee83nNSRk+3PablpyEtkU8GYQwGRi9vdaVNKH55n27JtPO?= =?us-ascii?Q?VXJwy96mIwkpua0Ja3BdO16FikkxGMOlsf8GZkUu4LtylbxrXyCY5jM2ffSI?= =?us-ascii?Q?7UEJagaauy1DMOBockooU1X2YM5/4KE2gFTGi1UAHfpupKM2V3LllxY5gK5w?= =?us-ascii?Q?7L3CsGG9FS3eF4QiI482rhHQxChYne67tfEh6o/s1DwlanlAAlETaU95lJys?= =?us-ascii?Q?yRQmqPY8dQIrq8H+LvFq4ySadWcEsz9Pfu8x9WIrfVt3YlvsTSZi6PfIynCL?= =?us-ascii?Q?MSpC/FDK97XRrMhqrldJ03UAOz2nP4sA6k8eU3cBdyhMSJmdngfgJ57llj6U?= =?us-ascii?Q?tQmcfud4iTLuHtmiyIqWJ7wRcARqRiACcmVne/38h01cj9KDo6JuxvCPHCvj?= =?us-ascii?Q?qJUXYf8i9lXhl+XCJH1Zvmq+fRN9xc03JyqyLpHfvZ0zHWOsdHhPRRfYXm78?= =?us-ascii?Q?NCyxl/QiNY8P1mWCyUfJ631TEePAKFWC+devuAvWTaBSuoXWhebaY9XGeDfL?= =?us-ascii?Q?SB04KfaGhwOUJ126iZTU7CxQoUMyeWi6efKS5lrkXo21Jcv4vscn37ih0tkP?= =?us-ascii?Q?49Ps0VGHifliaSkf8rqAk0VuPVGaB4g40+3rKvAFDBxaGn9hagjivLHp8E+s?= =?us-ascii?Q?JZurim8VPcXlw+2YP5Pp7tIw8kZJ1xN5J1nnjafOIq/2tEDHaL+mNtZdEmvx?= =?us-ascii?Q?GcIGsL6sNOPUABQm36Ane9yFCJDjGQAHkb6W+9L9trkWdEhBAftvhtorbR9j?= =?us-ascii?Q?r3dMZRdhQoE/z92wlso=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(376014)(36860700013)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2026 21:48:53.0157 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2747046a-d6e2-4d32-e667-08de4effb743 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000044F4.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7911 Content-Type: text/plain; charset="utf-8" In the past, KVM_SEV_SNP_LAUNCH_UPDATE accepted a non-page-aligned 'uaddr' parameter to copy data from, but continuing to support this with new functionality like in-place conversion and hugepages in the pipeline has proven to be more trouble than it is worth, since there are no known users that have been identified who use a non-page-aligned 'uaddr' parameter. Rather than locking guest_memfd into continuing to support this, go ahead and document page-alignment as a requirement and begin enforcing this in the handling function. Reviewed-by: Vishal Annapurve Tested-by: Kai Huang Signed-off-by: Michael Roth --- Documentation/virt/kvm/x86/amd-memory-encryption.rst | 2 +- arch/x86/kvm/svm/sev.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Documentation/virt/kvm/x86/amd-memory-encryption.rst b/Documen= tation/virt/kvm/x86/amd-memory-encryption.rst index 1ddb6a86ce7f..5a88d0197cb3 100644 --- a/Documentation/virt/kvm/x86/amd-memory-encryption.rst +++ b/Documentation/virt/kvm/x86/amd-memory-encryption.rst @@ -523,7 +523,7 @@ Returns: 0 on success, < 0 on error, -EAGAIN if caller = should retry =20 struct kvm_sev_snp_launch_update { __u64 gfn_start; /* Guest page number to load/encry= pt data into. */ - __u64 uaddr; /* Userspace address of data to be= loaded/encrypted. */ + __u64 uaddr; /* 4k-aligned address of data to b= e loaded/encrypted. */ __u64 len; /* 4k-aligned length in bytes to c= opy into guest memory.*/ __u8 type; /* The type of the guest pages bei= ng initialized. */ __u8 pad0; diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index a70bd3f19e29..b4409bc652d1 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -2367,6 +2367,11 @@ static int snp_launch_update(struct kvm *kvm, struct= kvm_sev_cmd *argp) params.type !=3D KVM_SEV_SNP_PAGE_TYPE_CPUID)) return -EINVAL; =20 + src =3D params.type =3D=3D KVM_SEV_SNP_PAGE_TYPE_ZERO ? NULL : u64_to_use= r_ptr(params.uaddr); + + if (!PAGE_ALIGNED(src)) + return -EINVAL; + npages =3D params.len / PAGE_SIZE; =20 /* @@ -2398,7 +2403,6 @@ 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); =20 count =3D kvm_gmem_populate(kvm, params.gfn_start, src, npages, sev_gmem_post_populate, &sev_populate_args); --=20 2.25.1 From nobody Sat Feb 7 16:06:02 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013059.outbound.protection.outlook.com [40.93.201.59]) (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 B3A1B309F01; Thu, 8 Jan 2026 21:49:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908959; cv=fail; b=CYcrv2c3NOiwp6BKJ9xfe9NMnecfzkK2LRa7PtV0I3jJRjGOsoO0LMwz9Jb2QxLuX9bdTSbtXXI39CkhjvdzYDq8pwhRima1B4ispago/vq01PrwldkdIfHbzHEaJZs0Ih32bx+hYhN+Wcm+RJCx6Y1YFxzrA3E6ljrdLLlKk08= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908959; c=relaxed/simple; bh=bywQ/dX7PnhrWBRLxfBoUCe/OEwEgXhZS8RgL/oulvI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=f4H41Zn/PVu1wqprywcO7UaJDzfx6H4s/a4UPO+tfzQlSFv26crp/iLhqKY3F6j9qV59BRlu6hCoARA4bHZmsRdp2aPNkLnSr3MtshbPzWX2s9xfqAALcbyFwfdGxkbgK05gjzRbMgwC0WznB8q7iVwRp4PwNAW+XP2rJr8KDS4= 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=bLhPHEXH; arc=fail smtp.client-ip=40.93.201.59 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="bLhPHEXH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Jfp0zrjilAdDAIjErmI76Fh8+wewZ69qbfp05xZVPUco7E8o6O8VFAunTYC67L4qh+i5jbISyowLgkU5z/gqgq3183eXY1yTYDqDHf6r6HM74KWI9SXZvAgD+wvO+axMuYBvRalSNtgtjMvvLrm6QVhjfTeFvRsDCfjiPZh6KADtcsu36bVmahIdjaGIEdOagNUhJisbKFeoZTJ8/uvg6h5+qO2+q8QiXWwlAeVsBPb4Sd1qs3opgB1PO693cfs6LPHkdMFFzVWqGdHU+F290Lb0Kc2YQTKiXk1Xt5zTUiWgZmCR1uuUlwN4Ulj11bt75VTQ19+ZwqOqavW0U1Pg2Q== 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=3Do7blpdofxmBRztyFxHIbaBEcAd5x5mLEZFtrUzNUU=; b=UyFZ6701K8ZOOivjFPyNq4XMz9Hjkwukc10ajusAwnM4GN+GsgtuP+Olt2h4pKEwGuFnNfjXZX2kmcYQ3EpKmGVh+yMDxkwR0kupaCD5X1/zI8PJ8wCHzqRJeledDwElCoWjnNw9wLfBWLfK10jUe5Av1tTusi9NoRuCBzqWxfm3ruFre7MGaQ/U2GnwyUIRHDpEaeA6LWw+dghmLhkpdyxXKi1YsUONYa9vQT0lnyA9UXo9xRu5ORIedO40D6AYZr2hD+SOgOCW+6FkNJF7y/GUTCaA+Xo9hf5MRdnr3QQ4FffFkCf6bzUJGeAgQJf8gKyNeX7VgNq9Rn9XI7N2rw== 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=3Do7blpdofxmBRztyFxHIbaBEcAd5x5mLEZFtrUzNUU=; b=bLhPHEXHlfks+A/PRo3KtpEYp3YkPTny76oqspUyUr7md8WHoc8zRFswWGYfjSFIYEKDiPFPf7f/0l0Fz94c/ZJ+vPEJb7GfGPTaA4OtE8DZSt2bYVNGf1viMyKvSzSxKCExDVAgmjEwIMYXF07PZd45zyNVBVSGEF8fwVzfvSA= Received: from BYAPR11CA0049.namprd11.prod.outlook.com (2603:10b6:a03:80::26) by CY5PR12MB6527.namprd12.prod.outlook.com (2603:10b6:930:30::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Thu, 8 Jan 2026 21:49:14 +0000 Received: from CO1PEPF000044F3.namprd05.prod.outlook.com (2603:10b6:a03:80:cafe::f8) by BYAPR11CA0049.outlook.office365.com (2603:10b6:a03:80::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.3 via Frontend Transport; Thu, 8 Jan 2026 21:49:13 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CO1PEPF000044F3.mail.protection.outlook.com (10.167.241.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Thu, 8 Jan 2026 21:49:13 +0000 Received: from localhost (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 8 Jan 2026 15:49:13 -0600 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , "Kai Huang" Subject: [PATCH v3 5/6] KVM: TDX: Document alignment requirements for KVM_TDX_INIT_MEM_REGION Date: Thu, 8 Jan 2026 15:46:21 -0600 Message-ID: <20260108214622.1084057-6-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260108214622.1084057-1-michael.roth@amd.com> References: <20260108214622.1084057-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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000044F3:EE_|CY5PR12MB6527:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fd0a2fc-a0f0-4893-187b-08de4effc39e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|7416014|376014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8uhymynXgKjpXNtk/jOd+t9ItQfYAvCdyrzw9nmrqRsJTozIxCtEuSV6cTIV?= =?us-ascii?Q?/omdwjK4VVwMdOmSB2AnXmKFpq+PbfqTRahBqAyO4BLEaAwSSlrWlAjMGyHN?= =?us-ascii?Q?fk9L3leHCWl/59KxOsNIaY+j7OmBi+fzAZlPsTu3jfsjzu+/hdOQmwvPwX/0?= =?us-ascii?Q?H/VhcEpGW9nMgxE2IjEyehg+IwMetYPjvX4ZQ9FG8dgGbdEXLIVh7bQoEzAB?= =?us-ascii?Q?FIpWEqRimCMfgtPG4ROCMYA9xMi7tERa/alZ1+T79mOOVL9JgE+cSPy652U2?= =?us-ascii?Q?9J8elJRocMgV8a0NwnN8iCwYCg7FteLwzGFGESHtFWsrj5tgldQZtVGOBkn7?= =?us-ascii?Q?15biad81zCy6KvruRhl+NiZMbJWQAr9ODjeHc1oMlgFvu76qq2eTQWW1oG49?= =?us-ascii?Q?clilWOlS8qqIelpMuotcKt7c3fZB5Al+r5+joebmETMskk43pxSb6iHDvNfG?= =?us-ascii?Q?kN94S5lnm1AIdTcuPbI889fWfVslPDXgiBNIY4HUwNHfVYPlYYzFP7Nh6fP5?= =?us-ascii?Q?D6Hq3LTGHVeHBBSOJE6DWuTRiLiYW/zvFBXVX/Y9OVAVhSosmR0o1pBm9hyW?= =?us-ascii?Q?SfAG3V3a9ifyeBkdnVO4eaTdY9V/NzYeEtNR6hl4mspHrQ/0BYOyeJzdWHiL?= =?us-ascii?Q?N9juUKiRuWrQptMDyGCYFIDyPdxpEDWjopNsPjuQ9isKoiX0zUl5M0kiczjP?= =?us-ascii?Q?X6NP06BeiX6m+48cwqyDkJ3uUshLe8N8ygStQbrx95YfgpKJ7vDjCVZEaTE4?= =?us-ascii?Q?t9hiH9ieTl6KbI52s7lB2E/+iNkWLhg/BmYplgUR21q/J9CXCpgoNZl5EGf7?= =?us-ascii?Q?S9Rn8H10gAer89LJabgdxIoWAveeiPsTmhj7htx0arGTP0+fauQyXlFOLJEm?= =?us-ascii?Q?UjxWOr5RWvnQF6uzjEM/V3Mi8lu8lhJKwlQZTrOF4dMZgjBsCbZZ+GtIrGCw?= =?us-ascii?Q?koe4A5KZ/pYZtzSaSzZ6l1uqXTZTfGEC6/lprYJ2wyNuGdKdKD8dctTx7PSu?= =?us-ascii?Q?PkpTLg4ISIYu5MiJWhdwwOGQ4+fTcaMmpMrpUpGH02dfrG8U6pDcixRZTYqN?= =?us-ascii?Q?23vf86R3cQ1/EsRVSubDKWtCKW9FxEcNo2G8PD9f4gqhjFJFEJ+QT3NzJf1S?= =?us-ascii?Q?8L0u69t7RK+DEQFWYZjUXZcA3gzTYw5S8XOsYo7v1bVy6Rw0qsU53mYtvBmY?= =?us-ascii?Q?KxUlerf45wyW5RNEnjtNXzdn8WyYY8T4o5RRABvJo4FlZWTw2JU5CkWA0T6Z?= =?us-ascii?Q?KeslCnEVTqOZ66pjgBU1yotQxYEvf6RwhZLsUIcVlVhN5wEQ+LcP8GZHdoP1?= =?us-ascii?Q?pWRuzmOYrmVdncHIRInpTYCjnlDO3lVrbLOnsRJXRc9x/0tEkvo1SPRi+W2S?= =?us-ascii?Q?MkdruL+yHhYQJSoXZJ7/ySWpdiPZ2pvPoVBD5HNSqN7amr09obaCut1VcOKW?= =?us-ascii?Q?Z4SOsu0HhHXSmGXvSesO3M/FAmajz2/2PUms4mJ/JcKj8R3fvvlCOh1bbT6i?= =?us-ascii?Q?cS0+1rygpuVEgT6h1hyruPUotkS4ltKHeanHE0xz6VUogI7HHw8+TaBD0cz3?= =?us-ascii?Q?vVm9k5sSaZ596xByqSk=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(7416014)(376014)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2026 21:49:13.7384 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0fd0a2fc-a0f0-4893-187b-08de4effc39e 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000044F3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6527 Content-Type: text/plain; charset="utf-8" Since it was never possible to use a non-PAGE_SIZE-aligned @source_addr, go ahead and document this as a requirement. This is in preparation for enforcing page-aligned @source_addr for all architectures in guest_memfd. Reviewed-by: Vishal Annapurve Tested-by: Kai Huang Signed-off-by: Michael Roth Reviewed-by: Yan Zhao --- Documentation/virt/kvm/x86/intel-tdx.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/virt/kvm/x86/intel-tdx.rst b/Documentation/virt/= kvm/x86/intel-tdx.rst index 5efac62c92c7..6a222e9d0954 100644 --- a/Documentation/virt/kvm/x86/intel-tdx.rst +++ b/Documentation/virt/kvm/x86/intel-tdx.rst @@ -156,7 +156,7 @@ KVM_TDX_INIT_MEM_REGION :Returns: 0 on success, <0 on error =20 Initialize @nr_pages TDX guest private memory starting from @gpa with user= space -provided data from @source_addr. +provided data from @source_addr. @source_addr must be PAGE_SIZE-aligned. =20 Note, before calling this sub command, memory attribute of the range [gpa, gpa + nr_pages] needs to be private. Userspace can use --=20 2.25.1 From nobody Sat Feb 7 16:06:02 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012024.outbound.protection.outlook.com [40.107.209.24]) (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 2DE1328488D; Thu, 8 Jan 2026 21:49:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908980; cv=fail; b=qFRLoA5Y2rV1J/BlQb7SvKcU7i0lGSuXsKddBweTIjY7eKtkUPdXE/rSb9rmFqFMd+ozA0w16nFIbKnemtn1cTkyDB3DQl8jnpY1N0C+AzO79pB7g0+u74yDsPEGoTO6uo705fzq9QD/5E1ZUBk2tgp7Z+JjRwMDc1JrLS4M4+Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767908980; c=relaxed/simple; bh=sCmhVlxsfO3q+fgYibuuOOyLMTZCK69XGzxCSC88YkY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qd3RbzaqtfqfCvonFvE+HTqq66D4WhaKNdknF6/3IAOnco62FAGwiDGjiRSzq9/3v+E2wCZSEhcfxUiHVesapCQB9aI2KC24m00UxhiSKYmf9M2VDpA+o//RWzgK5n8p/HO17tOuofyshuC1hVqAl2Z+LrLcXmDmhtxaRC9jeLw= 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=EvQFyc6k; arc=fail smtp.client-ip=40.107.209.24 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="EvQFyc6k" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uQqDO9HRblBcd7GDIYAr6GzoB9RCl+buLrwc9vhr3GhLr2S02D8DIjTrJMqD5RqOBm2byrHvArZh2LyK8A0cisaUaHGyYgGYFZ0nS/0mishUK3dOWXHEBHjCQAQ3fPJ69LocuTMU75hdttctWJpIVtR9+HcWRrxyVToD1yyhoJ3/vxfOdgAuij6qJHy1+lw1CR4x2edV4DMGYIXDR2lHXXbYt+JzKGjdR56ZRS5g5IO0efnYTrWRSP8gBjf3oSz78XfVgS2rgt3CI8uvMBD4Zl3j2jWsAndI/gP2iXyPyxcjqzeWVCYn8XZoi0TC+uHULBbJ/ql7woADNioNFPNIqw== 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=dQAqARBm8/DgZ7okd3vkWHlf6BPdYt5c+i4z/JPQweU=; b=XMlookRtkO2HBRT1NpiJCyNuoZP2mCd4eLIPsXq1ZQVM+iJimG7nyIKRALfaF1loriNH724qlE/5zlr4pj61lxCYx9yY8KkHMNDhsNXM5DOdxZ9jzhd8zaTqN1Lq1vSZA6NV5vrW25kQn3e/4ipgyuz05b/g2opJ1ZGNR8B5xq+nCFjSLXS0e3QaPqOcJrHG2YzD2kpdcr5IagRpsUXb3AZ4ilTzZQ1rZZtE0siX4e7TvIaMIttRqfByVE+sqWdyrOLgQpCxjLdftaYPX73Dmb7sLPVjOj9PGIoNBncNWUVb5k5yqJhmfmf5/zgu/8Kk+iu7HJ2DBS7w01IGxS4YtA== 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=dQAqARBm8/DgZ7okd3vkWHlf6BPdYt5c+i4z/JPQweU=; b=EvQFyc6k/fmAgMKAgNnrRU+kGyZGpsyX5YJrklTDw2uv4PGlKIboeYn8oCVL+hMvkm+Uc7Kc1pnLbG7K9h/LfkJ+LhSC3HCfLoFFgInOILmDOQ7hL2FOBsZhKZeBMb5RGRzgsZytH2X+ALnhzHxjLPjkia+xAdRtCkU84xFeSAo= Received: from BYAPR11CA0048.namprd11.prod.outlook.com (2603:10b6:a03:80::25) by BL3PR12MB6547.namprd12.prod.outlook.com (2603:10b6:208:38e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Thu, 8 Jan 2026 21:49:34 +0000 Received: from CO1PEPF000044F3.namprd05.prod.outlook.com (2603:10b6:a03:80:cafe::a) by BYAPR11CA0048.outlook.office365.com (2603:10b6:a03:80::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.3 via Frontend Transport; Thu, 8 Jan 2026 21:49:34 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CO1PEPF000044F3.mail.protection.outlook.com (10.167.241.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Thu, 8 Jan 2026 21:49:34 +0000 Received: from localhost (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 8 Jan 2026 15:49:33 -0600 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , "Kai Huang" Subject: [PATCH v3 6/6] KVM: guest_memfd: GUP source pages prior to populating guest memory Date: Thu, 8 Jan 2026 15:46:22 -0600 Message-ID: <20260108214622.1084057-7-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260108214622.1084057-1-michael.roth@amd.com> References: <20260108214622.1084057-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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000044F3:EE_|BL3PR12MB6547:EE_ X-MS-Office365-Filtering-Correlation-Id: 70b234a3-00fb-41db-b173-08de4effcfdf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700013|376014|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zZLBAOdbrDEYVEX4MnpSWDw/tJJK1TPKUIxtGGd7fNyiJWeiioYZ0RTS45KO?= =?us-ascii?Q?ZgzA1e/BkZ5yP4sMBf2Imn0u9fMXcUAGFryvyO7dO6JsRUmHPiJG3tOgCvnW?= =?us-ascii?Q?HBp6DJVXGW9KYr3thmNOTLtjfmNHzsYWxlDEe2obVZ+jLTjwZxNprWqwIoEc?= =?us-ascii?Q?vWfqpW07URdnMQq/yiLuLmPpEdHyFRR9Tqt2kjs3Jyqg98AzxiYbt0e6tIa3?= =?us-ascii?Q?f/qESHOCg7coupMjB8P91r/Bzb3qTYgprj3/PEGoC+/A6gZREdAJqaDp17Sm?= =?us-ascii?Q?1vNptfngkHristPsrowjFGEUGsFmMY2C+uxNuMkdgSERclcFi7hprflXqoYd?= =?us-ascii?Q?fkUPvvgGPw9SmHvtEWCGL+jj5xSxZ/wMQ3mam4LlqtjahDOQwgq+vQ46cbq8?= =?us-ascii?Q?wLsQmADoMK9MJvdGVVmWNkTht3y6SetS6CU3FGEnvAkIVaKZ4zlEpQl7bieX?= =?us-ascii?Q?nPwWA+G9UUSC0dnW1nXpaG3BeGacNkLkIFchY6prjFNmGZd3DylkD6+uh61G?= =?us-ascii?Q?3Nvd2Rv6s+mZe5Z4M8LUIt5zv7glqYG089fcbl+9wBfY1nvy5Z4+1iyXuPfZ?= =?us-ascii?Q?4TxQjprIKhP4wgqjex8sZG9n9ij+jAIXtACaY7TiTZ8tn/WBvmAdjX17BXWQ?= =?us-ascii?Q?EdsflgSxFLP10FQZhssjUOVfDBDTkyMYMAuWVhC+Uu5+HT7KZtRROLO940E9?= =?us-ascii?Q?avIKvGMznvnoDkwdTI5luWmB1FhAD3vYyqViGZqAnW82dmzS7wdIMkQDr4KU?= =?us-ascii?Q?hgK1XqgyUw3assxOugVUpoTG2M0pqZn5Wr0C7QfPVxXwT9G0N6+YLXPrXFm3?= =?us-ascii?Q?Mbsxn53JyYJdno+qWZh0azGIU6EKcm3+ui4H1ubLlPVmgEoYNolqsCdvEWxd?= =?us-ascii?Q?6ybthUrRgWF+xgwCif03hkAHOY72PwDdJWRFwzqJ0fzuouGzrRr5HOs522+4?= =?us-ascii?Q?WubuOXQplNKmQ0tW8yq6S2wIlhfTlf6VBLCpllA8eMVz67uuq1CllgPPT12m?= =?us-ascii?Q?mlsNz2Q2p2Bh7A7N8YGZSgYK0KNfrPyEHmluMPklk7ozb1RqvlUK7QuA2z1B?= =?us-ascii?Q?nfY8JM9ERhmOgaYSDrUu00AssKPj5fXmhV3WxYKZYJlYzoFApwBy8O5XJwgl?= =?us-ascii?Q?17G0H2RQihAymFgpfmPNUVOjA15zFBTyo9h5LcbnPpev9Y549T3iq/4gSawZ?= =?us-ascii?Q?ojEgBO2s9sjR/uI6S3ZIktxk4Bhsjao6IPFqFZfoFouT8jEsDxxUsYBAyfmf?= =?us-ascii?Q?lYB4JEkK1VZl9ehg6yMcSil3l7xSG28m2bqFk4HiTRHB/gaqDAvlE77IPG28?= =?us-ascii?Q?gX0pupaEuDH8WcWp8WfNAghtltdL+F/gX0A/gar9G78YA+ziqKuWsOb6/ur0?= =?us-ascii?Q?RWKPbqHpjfwFK2+jFWgzziJTVVhc2MAwiU22Hvn++rRc/t6fUFrh7XYhq/B5?= =?us-ascii?Q?MV4j/PePztOsWjBgUgt8UfGl4M4NrGgECZyKfABPylQYnpR6nB7A/8bEjgkH?= =?us-ascii?Q?wOcCHTF9DEWrtKCR9BEoiZetQpDFqYrZRaq7ejBrOvuEQGcXXx9t+XNVfXh/?= =?us-ascii?Q?KrZq161mT4P757YHByI=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(376014)(7416014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jan 2026 21:49:34.3006 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 70b234a3-00fb-41db-b173-08de4effcfdf 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000044F3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR12MB6547 Content-Type: text/plain; charset="utf-8" Currently the post-populate callbacks handle copying source pages into private GPA ranges backed by guest_memfd, where kvm_gmem_populate() acquires the filemap invalidate lock, then calls a post-populate callback which may issue a get_user_pages() on the source pages prior to copying them into the private GPA (e.g. TDX). This will not be compatible with in-place conversion, where the userspace page fault path will attempt to acquire the filemap invalidate lock while holding the mm->mmap_lock, leading to a potential ABBA deadlock. Address this by hoisting the GUP above the filemap invalidate lock so that these page faults path can be taken early, prior to acquiring the filemap invalidate lock. It's not currently clear whether this issue is reachable with the current implementation of guest_memfd, which doesn't support in-place conversion, however it does provide a consistent mechanism to provide stable source/target PFNs to callbacks rather than punting to vendor-specific code, which allows for more commonality across architectures, which may be worthwhile even without in-place conversion. As part of this change, also begin enforcing that the 'src' argument to kvm_gmem_populate() must be page-aligned, as this greatly reduces the complexity around how the post-populate callbacks are implemented, and since no current in-tree users support using a non-page-aligned 'src' argument. Suggested-by: Sean Christopherson Co-developed-by: Sean Christopherson Signed-off-by: Sean Christopherson Co-developed-by: Vishal Annapurve Signed-off-by: Vishal Annapurve Tested-by: Vishal Annapurve Tested-by: Kai Huang Signed-off-by: Michael Roth Reviewed-by: Yan Zhao Tested-by: Yan Zhao --- arch/x86/kvm/svm/sev.c | 33 ++++++++-------- arch/x86/kvm/vmx/tdx.c | 16 ++------ include/linux/kvm_host.h | 4 +- virt/kvm/guest_memfd.c | 84 +++++++++++++++++++++++++++------------- 4 files changed, 79 insertions(+), 58 deletions(-) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index b4409bc652d1..0ab7c89262fb 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -2268,7 +2268,7 @@ struct sev_gmem_populate_args { }; =20 static int sev_gmem_post_populate(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pf= n, - void __user *src, void *opaque) + struct page *src_page, void *opaque) { struct sev_gmem_populate_args *sev_populate_args =3D opaque; struct sev_data_snp_launch_update fw_args =3D {0}; @@ -2277,7 +2277,7 @@ static int sev_gmem_post_populate(struct kvm *kvm, gf= n_t gfn, kvm_pfn_t pfn, int level; int ret; =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 = && !src_page)) return -EINVAL; =20 ret =3D snp_lookup_rmpentry((u64)pfn, &assigned, &level); @@ -2288,15 +2288,14 @@ static int sev_gmem_post_populate(struct kvm *kvm, = gfn_t gfn, kvm_pfn_t pfn, goto out; } =20 - if (src) { - void *vaddr =3D kmap_local_pfn(pfn); + if (src_page) { + void *src_vaddr =3D kmap_local_page(src_page); + void *dst_vaddr =3D kmap_local_pfn(pfn); =20 - if (copy_from_user(vaddr, src, PAGE_SIZE)) { - kunmap_local(vaddr); - ret =3D -EFAULT; - goto out; - } - kunmap_local(vaddr); + memcpy(dst_vaddr, src_vaddr, PAGE_SIZE); + + kunmap_local(src_vaddr); + kunmap_local(dst_vaddr); } =20 ret =3D rmp_make_private(pfn, gfn << PAGE_SHIFT, PG_LEVEL_4K, @@ -2326,17 +2325,19 @@ static int sev_gmem_post_populate(struct kvm *kvm, = gfn_t gfn, kvm_pfn_t pfn, if (ret && !snp_page_reclaim(kvm, pfn) && sev_populate_args->type =3D=3D KVM_SEV_SNP_PAGE_TYPE_CPUID && sev_populate_args->fw_error =3D=3D SEV_RET_INVALID_PARAM) { - void *vaddr =3D kmap_local_pfn(pfn); + void *src_vaddr =3D kmap_local_page(src_page); + void *dst_vaddr =3D kmap_local_pfn(pfn); =20 - if (copy_to_user(src, vaddr, PAGE_SIZE)) - pr_debug("Failed to write CPUID page back to userspace\n"); + memcpy(src_vaddr, dst_vaddr, PAGE_SIZE); =20 - kunmap_local(vaddr); + kunmap_local(src_vaddr); + kunmap_local(dst_vaddr); } =20 out: - pr_debug("%s: exiting with return code %d (fw_error %d)\n", - __func__, ret, sev_populate_args->fw_error); + if (ret) + pr_debug("%s: error updating GFN %llx, return code %d (fw_error %d)\n", + __func__, gfn, ret, sev_populate_args->fw_error); return ret; } =20 diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index 4fb042ce8ed1..5df9d32d2058 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -3118,34 +3118,24 @@ struct tdx_gmem_post_populate_arg { }; =20 static int tdx_gmem_post_populate(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pf= n, - void __user *src, void *_arg) + struct page *src_page, void *_arg) { struct tdx_gmem_post_populate_arg *arg =3D _arg; struct kvm_tdx *kvm_tdx =3D to_kvm_tdx(kvm); u64 err, entry, level_state; gpa_t gpa =3D gfn_to_gpa(gfn); - struct page *src_page; int ret, i; =20 if (KVM_BUG_ON(kvm_tdx->page_add_src, kvm)) return -EIO; =20 - /* - * Get the source page if it has been faulted in. Return failure if the - * source page has been swapped out or unmapped in primary memory. - */ - ret =3D get_user_pages_fast((unsigned long)src, 1, 0, &src_page); - if (ret < 0) - return ret; - if (ret !=3D 1) - return -ENOMEM; + if (!src_page) + return -EOPNOTSUPP; =20 kvm_tdx->page_add_src =3D src_page; ret =3D kvm_tdp_mmu_map_private_pfn(arg->vcpu, gfn, pfn); kvm_tdx->page_add_src =3D NULL; =20 - put_page(src_page); - if (ret || !(arg->flags & KVM_TDX_MEASURE_MEMORY_REGION)) return ret; =20 diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 1d0cee72e560..49c0cfe24fd8 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2566,7 +2566,7 @@ int kvm_arch_gmem_prepare(struct kvm *kvm, gfn_t gfn,= kvm_pfn_t pfn, int max_ord * @gfn: starting GFN to be populated * @src: userspace-provided buffer containing data to copy into GFN range * (passed to @post_populate, and incremented on each iteration - * if not NULL) + * if not NULL). Must be page-aligned. * @npages: number of pages to copy from userspace-buffer * @post_populate: callback to issue for each gmem page that backs the GPA * range @@ -2581,7 +2581,7 @@ int kvm_arch_gmem_prepare(struct kvm *kvm, gfn_t gfn,= kvm_pfn_t pfn, int max_ord * Returns the number of pages that were populated. */ typedef int (*kvm_gmem_populate_cb)(struct kvm *kvm, gfn_t gfn, kvm_pfn_t = pfn, - void __user *src, void *opaque); + struct page *page, void *opaque); =20 long kvm_gmem_populate(struct kvm *kvm, gfn_t gfn, void __user *src, long = npages, kvm_gmem_populate_cb post_populate, void *opaque); diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 8b1248f42aae..18ae59b92257 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -820,12 +820,48 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memo= ry_slot *slot, EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_gmem_get_pfn); =20 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_POPULATE + +static long __kvm_gmem_populate(struct kvm *kvm, struct kvm_memory_slot *s= lot, + struct file *file, gfn_t gfn, struct page *src_page, + kvm_gmem_populate_cb post_populate, void *opaque) +{ + pgoff_t index =3D kvm_gmem_get_index(slot, gfn); + struct folio *folio; + kvm_pfn_t pfn; + int ret; + + filemap_invalidate_lock(file->f_mapping); + + folio =3D __kvm_gmem_get_pfn(file, slot, index, &pfn, NULL); + if (IS_ERR(folio)) { + ret =3D PTR_ERR(folio); + goto out_unlock; + } + + folio_unlock(folio); + + if (!kvm_range_has_memory_attributes(kvm, gfn, gfn + 1, + KVM_MEMORY_ATTRIBUTE_PRIVATE, + KVM_MEMORY_ATTRIBUTE_PRIVATE)) { + ret =3D -EINVAL; + goto out_put_folio; + } + + ret =3D post_populate(kvm, gfn, pfn, src_page, opaque); + if (!ret) + folio_mark_uptodate(folio); + +out_put_folio: + folio_put(folio); +out_unlock: + filemap_invalidate_unlock(file->f_mapping); + return ret; +} + long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn, void __user *src,= long npages, kvm_gmem_populate_cb post_populate, void *opaque) { struct kvm_memory_slot *slot; - void __user *p; - int ret =3D 0; long i; =20 @@ -834,6 +870,9 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn= , void __user *src, long if (WARN_ON_ONCE(npages <=3D 0)) return -EINVAL; =20 + if (WARN_ON_ONCE(!PAGE_ALIGNED(src))) + return -EINVAL; + slot =3D gfn_to_memslot(kvm, start_gfn); if (!kvm_slot_has_gmem(slot)) return -EINVAL; @@ -842,47 +881,38 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_g= fn, void __user *src, long if (!file) return -EFAULT; =20 - filemap_invalidate_lock(file->f_mapping); - npages =3D min_t(ulong, slot->npages - (start_gfn - slot->base_gfn), npag= es); for (i =3D 0; i < npages; i++) { - struct folio *folio; - gfn_t gfn =3D start_gfn + i; - pgoff_t index =3D kvm_gmem_get_index(slot, gfn); - kvm_pfn_t pfn; + struct page *src_page =3D NULL; + void __user *p; =20 if (signal_pending(current)) { ret =3D -EINTR; break; } =20 - folio =3D __kvm_gmem_get_pfn(file, slot, index, &pfn, NULL); - if (IS_ERR(folio)) { - ret =3D PTR_ERR(folio); - break; - } + p =3D src ? src + i * PAGE_SIZE : NULL; =20 - folio_unlock(folio); + if (p) { + ret =3D get_user_pages_fast((unsigned long)p, 1, 0, &src_page); + if (ret < 0) + break; + if (ret !=3D 1) { + ret =3D -ENOMEM; + break; + } + } =20 - ret =3D -EINVAL; - if (!kvm_range_has_memory_attributes(kvm, gfn, gfn + 1, - KVM_MEMORY_ATTRIBUTE_PRIVATE, - KVM_MEMORY_ATTRIBUTE_PRIVATE)) - goto put_folio_and_exit; + ret =3D __kvm_gmem_populate(kvm, slot, file, start_gfn + i, src_page, + post_populate, opaque); =20 - p =3D src ? src + i * PAGE_SIZE : NULL; - ret =3D post_populate(kvm, gfn, pfn, p, opaque); - if (!ret) - folio_mark_uptodate(folio); + if (src_page) + put_page(src_page); =20 -put_folio_and_exit: - folio_put(folio); if (ret) break; } =20 - filemap_invalidate_unlock(file->f_mapping); - return ret && !i ? ret : i; } EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_gmem_populate); --=20 2.25.1