From patchwork Tue Apr 8 11:23:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042848 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2040.outbound.protection.outlook.com [40.107.223.40]) (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 741CA2690C8; Tue, 8 Apr 2025 11:24:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111493; cv=fail; b=njbRVE5oYUq/Iv2UYlWTG6c0OhH1PbV+QtQlIx7sPvOxb5tg7NAJeUIibOl+oZFTioKwWXIF5boGn6UJy2g3N92gprauUn941Frva+OGxOoZfue0CBAWQJ+AWjC0QZR3dyzmMJ8Co/U3SywkJob6NmEPSNuYPPjInvNWHz0FVSw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111493; c=relaxed/simple; bh=l5eKqlMTewsgv4rS07QQeBk9exGqHF2yhh5W4DRP23Q=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ngCvhxGRZJg3dHB3pNmbBOH9FPpifiq+RKW8lkEdaHyNy3TtuamzbW6r9ITsFxK25A0rOD490K3MJgLvd0+6xe+evRqLqodu3qj4EdZam70dzryn5BRt1kmhTN4ZbV5MDNiJ7WJ4L3n3xm4rclh+ZuWgj7updUWOsGpQIgiob4M= 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=5I1Qyx2g; arc=fail smtp.client-ip=40.107.223.40 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="5I1Qyx2g" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ma7VyaPSV91rzRbB+XnuhgDa2xD0rCM1iRsbdb5A73AxS87XceqkJ/LUGHbSa/9d7fkDDT93hrfqrk3iAAM3tqeQWY28/hfP+XzZwjuThcYeJSCOebV9MHxk3XoTQsUuMEnSae2sXnjTMzP9vfdBL+8UieNydR/ErC7iiu294b0xZrQZ13iFrzHNEXrKQOeMQXAAMpIBPfc29zQY9paxFfWNZUBzlBcOHUoO7VlX/VSUSdesdeE70huL+69WaMFEES1MIRKqUibscCJzCS33LnCyy+4OGRg1thc1uTDBV5ZEDHyOSun48SEJ7v2qOKpJvOIeh8Cw5qTw4dU25UKVJw== 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=6uqbzL6FNYPIGoO2HURWE8xG/C+IhaKcZleIt9i+uj0=; b=lIxVn+0NdyEc3wEWssHCg4B91LOK5aKx4ogDN2wmoq6nHolqkorxuDVS6UHqQAbTk9qAbdB04bmkKYccbIboTb1BImZ5uK3AJHZ2Vmh5tFtd6mj2feZ2muRdecRyGcKWJoQOKtb4PxuL7qdnZeKoIgd/b4Ff6rerWo54N/BEtnBOQH6TzQ/43rUl2hZbwnpFq3ODIslas56tf3X4NRdLJWjrafCd/py3YrHbRFkq/7t0fdbTVqWvYMUkZKaUoygA1mdi/5HON0McGoTjImE4Wn1YWV6ijBBW0qVaUQo2PWoyuJ03D8oCfadLIk4JewMZfqJzOze9pPRS4AZXoROsnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=6uqbzL6FNYPIGoO2HURWE8xG/C+IhaKcZleIt9i+uj0=; b=5I1Qyx2gGZ6uU337zhKvyiXTra0NF3laN29ukOk6FuFUnZuzZJtYAP0sKyQDdNcoKhwcCB/TrUHqIND+eYlbUbMO1PUgy2RFT4AdVlqfUNp1xFIbm0wmw868x6XS2rx+ghs5bFmoMoeQzmjNM5Wt0Od+y7aMTXtcQirxB3OGOLE= Received: from PH8PR02CA0001.namprd02.prod.outlook.com (2603:10b6:510:2d0::19) by BL1PR12MB5899.namprd12.prod.outlook.com (2603:10b6:208:397::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.20; Tue, 8 Apr 2025 11:24:46 +0000 Received: from SN1PEPF000397B2.namprd05.prod.outlook.com (2603:10b6:510:2d0:cafe::49) by PH8PR02CA0001.outlook.office365.com (2603:10b6:510:2d0::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8534.28 via Frontend Transport; Tue, 8 Apr 2025 11:24:46 +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 SN1PEPF000397B2.mail.protection.outlook.com (10.167.248.56) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:24:45 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:24:37 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 1/8] mm/filemap: Add mempolicy support to the filemap layer Date: Tue, 8 Apr 2025 11:23:55 +0000 Message-ID: <20250408112402.181574-2-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B2:EE_|BL1PR12MB5899:EE_ X-MS-Office365-Filtering-Correlation-Id: c29eabd2-7db3-4997-df96-08dd768ff718 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|7416014|376014|36860700013; X-Microsoft-Antispam-Message-Info: 32Iwbid+0ZejXpHMtNBHQ4k/qVG6Nt+x5G3Mn7hsEbuHlOjTmvAw/+oTx7FgtHXwq/tBH97WeQWp6esUrQOA3t7tXvgiFFPmohr4ouWsWZsX4XwNHNLzq/3p1b6/88l5YiJW0XHvO0n8o6ffq8rtJkOYrkeXgrfIxc7cOX9yUkZhhyRyTOhbYhluq5t4smjR3TTPZlBzEfTDIQ93CzHKA/swcwHMpbOJ5BGt8c5ki3vcrjyWkOVkq2ZTrjbvBvZ6dV/uQRUoRcc0OcWEGdE4iPR+1AkN09Ese9hxz2RTcDBeWLuJ1Qgh7nrpUeOh11NQJkp5DTpZPaEkFixjd6HmfhIq+igetmvfjqa6ra1HGfkFEJhvSZ/6Dl4BAzVOPEMY9WtDZr/CHqCsO07wwfoORoMinGpJYRBe83NMfqVEEW9lBQQkJsriNMtnJNLHoP4+Pg70jHR1l2FVmidBo32yGRYD545AvnF6wG5HUKvbBXRe0XnBAuMBn3SgRSs/tjwnCeCL8hSRClbEIuaFzHZt6XCKuQyQimyN6HqaXrKOKNa7UXzzkMj7ieVPpF0d0grCjACyfA7S2noH0k72PW3hmmyj7JGpN3h7WkePuMB4JU8/fESj6wT9hUD6BLrMakihToeaPloIZDCWT2l2zYsfr3gM/mKMtNWXVjQBbzY4pIgP6/TSEzQXSxkpZ2FfC8JwRdCsP+NzX0eqXHT85NMPK6OqFcHTbz8sPrhiXdSJcKiOyb2cV4jTr/Ab9bkMShV5Bg6+3q2kq4ZohcItCExKuSeng99tHcbpO7uqqlYvA7sgdZBXGeg5nQ5I5A1hRZKdKK3I05YpjtKJ4lXUN9IROJ1za3lcS3d3BmSxqg10jt3GnJlMNInVUKDMjFNnO9V1RC2K5odjMN0xDpqVL8HVrVvQ+Y6k1/36z20XchM3DumQr/S8ICGO+oTVnwk/36MWyIutIhoJX/VZGk62E35TJ6GG6hzo0gHB6Tk87nL0vUqHulcgoy5e2+GmWYysVZPVKqX5TXo6qM6wx7iG1J0p5kuI/MypGTZ1Qa8egj+P52JjNzGgOjs2Oc/Lw/StanNJ0nJuind4EBRKFpQ4HnwOmdVnpEz7DltMtfV2+4Rt4pxjRR+QCrmDdfEo+L5EeDqUfXtyIrbX0Xp4EskG9JoSvnAesX3NW0wHbi38Tg1/qEsuxnd7DDhkJEjSR7lO904BEMFne7WonOEavkx2xXkz5+r9C9EIM0VI/eFqeVnxMCFzBlgHNFCZqEP2vdl6MHsP4ZAyakCtqeOjfPnsnQEmZphgX3OoB/6b+qQYmG7DF/F0+QgzQUCVQ14rGqDH+2vVyBmMVBE9YOSKKP3YEjM3IreFZYcm/SosTBFuG4dxnT/uCWtYiACSth7HSbpNTinRM9G/kUSR/WjOlOaLY00xT20CGhbyuJIDw3i8mdyc5lGuTyBs0LOEjpK76ZkVphYCZODzU0DViIvmvcYNRKiomk2bGrDeP6i99qRdPwq2vup7EczBfmjlz80+kHNIasSy 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)(1800799024)(82310400026)(7416014)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:24:45.4013 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c29eabd2-7db3-4997-df96-08dd768ff718 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: SN1PEPF000397B2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5899 From: Shivansh Dhiman Add NUMA mempolicy support to the filemap allocation path by introducing new APIs that take a mempolicy argument: - filemap_grab_folio_mpol() - filemap_alloc_folio_mpol() - __filemap_get_folio_mpol() These APIs allow callers to specify a NUMA policy during page cache allocations, enabling fine-grained control over memory placement. This is particularly needed by KVM when using guest-memfd memory backends, where the guest memory needs to be allocated according to the NUMA policy specified by VMM. The existing non-mempolicy APIs remain unchanged and continue to use the default allocation behavior. Signed-off-by: Shivansh Dhiman Signed-off-by: Shivank Garg --- include/linux/pagemap.h | 41 +++++++++++++++++++++++++++++++++++++++++ mm/filemap.c | 27 +++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 26baa78f1ca7..bc5231626557 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -637,15 +637,24 @@ static inline void *detach_page_private(struct page *page) #ifdef CONFIG_NUMA struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order); +struct folio *filemap_alloc_folio_mpol_noprof(gfp_t gfp, unsigned int order, + struct mempolicy *mpol, pgoff_t ilx); #else static inline struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order) { return folio_alloc_noprof(gfp, order); } +static inline struct folio *filemap_alloc_folio_mpol_noprof(gfp_t gfp, + unsigned int order, struct mempolicy *mpol, pgoff_t ilx) +{ + return filemap_alloc_folio_noprof(gfp, order); +} #endif #define filemap_alloc_folio(...) \ alloc_hooks(filemap_alloc_folio_noprof(__VA_ARGS__)) +#define filemap_alloc_folio_mpol(...) \ + alloc_hooks(filemap_alloc_folio_mpol_noprof(__VA_ARGS__)) static inline struct page *__page_cache_alloc(gfp_t gfp) { @@ -737,6 +746,8 @@ static inline fgf_t fgf_set_order(size_t size) void *filemap_get_entry(struct address_space *mapping, pgoff_t index); struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp); +struct folio *__filemap_get_folio_mpol(struct address_space *mapping, + pgoff_t index, fgf_t fgp_flags, gfp_t gfp, struct mempolicy *mpol, pgoff_t ilx); struct page *pagecache_get_page(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp); @@ -795,6 +806,36 @@ static inline struct folio *filemap_grab_folio(struct address_space *mapping, mapping_gfp_mask(mapping)); } +/** + * filemap_grab_folio_mpol - grab a folio from the page cache. + * @mapping: The address space to search. + * @index: The page index. + * @mpol: The mempolicy to apply when allocating a new folio. + * @ilx: The interleave index, for use only with MPOL_INTERLEAVE or + * MPOL_WEIGHTED_INTERLEAVE. + * + * Same as filemap_grab_folio(), except that it allocates the folio using + * given memory policy. + * + * Return: A found or created folio. ERR_PTR(-ENOMEM) if no folio is found + * and failed to create a folio. + */ +#ifdef CONFIG_NUMA +static inline struct folio *filemap_grab_folio_mpol(struct address_space *mapping, + pgoff_t index, struct mempolicy *mpol, pgoff_t ilx) +{ + return __filemap_get_folio_mpol(mapping, index, + FGP_LOCK | FGP_ACCESSED | FGP_CREAT, + mapping_gfp_mask(mapping), mpol, ilx); +} +#else +static inline struct folio *filemap_grab_folio_mpol(struct address_space *mapping, + pgoff_t index, struct mempolicy *mpol, pgoff_t ilx) +{ + return filemap_grab_folio(mapping, index); +} +#endif /* CONFIG_NUMA */ + /** * find_get_page - find and get a page reference * @mapping: the address_space to search diff --git a/mm/filemap.c b/mm/filemap.c index b5e784f34d98..7b06ee4b4d63 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1007,6 +1007,15 @@ struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order) return folio_alloc_noprof(gfp, order); } EXPORT_SYMBOL(filemap_alloc_folio_noprof); + +struct folio *filemap_alloc_folio_mpol_noprof(gfp_t gfp, unsigned int order, + struct mempolicy *mpol, pgoff_t ilx) +{ + if (mpol) + return folio_alloc_mpol_noprof(gfp, order, mpol, + ilx, numa_node_id()); + return filemap_alloc_folio_noprof(gfp, order); +} #endif /* @@ -1880,11 +1889,14 @@ void *filemap_get_entry(struct address_space *mapping, pgoff_t index) } /** - * __filemap_get_folio - Find and get a reference to a folio. + * __filemap_get_folio_mpol - Find and get a reference to a folio. * @mapping: The address_space to search. * @index: The page index. * @fgp_flags: %FGP flags modify how the folio is returned. * @gfp: Memory allocation flags to use if %FGP_CREAT is specified. + * @mpol: The mempolicy to apply when allocating a new folio. + * @ilx: The interleave index, for use only with MPOL_INTERLEAVE or + * MPOL_WEIGHTED_INTERLEAVE. * * Looks up the page cache entry at @mapping & @index. * @@ -1895,8 +1907,8 @@ void *filemap_get_entry(struct address_space *mapping, pgoff_t index) * * Return: The found folio or an ERR_PTR() otherwise. */ -struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, - fgf_t fgp_flags, gfp_t gfp) +struct folio *__filemap_get_folio_mpol(struct address_space *mapping, pgoff_t index, + fgf_t fgp_flags, gfp_t gfp, struct mempolicy *mpol, pgoff_t ilx) { struct folio *folio; @@ -1966,7 +1978,7 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, err = -ENOMEM; if (order > min_order) alloc_gfp |= __GFP_NORETRY | __GFP_NOWARN; - folio = filemap_alloc_folio(alloc_gfp, order); + folio = filemap_alloc_folio_mpol(alloc_gfp, order, mpol, ilx); if (!folio) continue; @@ -2013,6 +2025,13 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, folio_clear_dropbehind(folio); return folio; } +EXPORT_SYMBOL(__filemap_get_folio_mpol); + +struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, + fgf_t fgp_flags, gfp_t gfp) +{ + return __filemap_get_folio_mpol(mapping, index, fgp_flags, gfp, NULL, 0); +} EXPORT_SYMBOL(__filemap_get_folio); static inline struct folio *find_get_entry(struct xa_state *xas, pgoff_t max, From patchwork Tue Apr 8 11:23:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042849 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2087.outbound.protection.outlook.com [40.107.236.87]) (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 AE4D5268C72; Tue, 8 Apr 2025 11:24:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.87 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111500; cv=fail; b=MyO0bDDk9gJ3Kf1kBA+HeJDf2aO6LElr3ZmDx+RU589iTMH55xqIRNWe7ZLCPdJWX5hQ3fjRqQymPgYX/ayP3ohT6+NKncjZgVu6kQZMcuj6jH25wFbde+D1M4I7PxAh/2QuJkP3zNIKL9y6aZA8alzxfqRvPJe3r9aKJTPhLLs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111500; c=relaxed/simple; bh=JNNLMRlqhuOVLdn6i8F9kg2HPti+4tk5C59pMjk31gI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=muxqvNIn5IvS3vCCs4fsUNUyQeDGYxxIFXzj6JIiIefptqzDXWO1UdUb8Iw2kF1zyoQkREL0fuuJ2UNSIgeYoyig5SLSdV09uZBCrys0lmkDT06tPGFuNkgwEjP4YiEpTfu4uCREwTEY/LjqauAorjOgYPRiWyXNSu2vA2RcOBY= 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=ZXH9w5np; arc=fail smtp.client-ip=40.107.236.87 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="ZXH9w5np" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AwPLhT8YSFU21JPLkRT6UkXV2tJ+waOdJzaTGb9ky5jd6f+7ILmslyckDZCrLMDJjxvzEUsjVFttR1Pqz7wSAwcU3+eeVedvPUO9OTY18GwODo17W2XjhAga7ui8KrSZfRlL0ToTD6bDwuglkZIViP0VQI6Q2D4aqoQyVhTbU8vUCOwB47RYeLhi6pUTQalp2FeoC83MadMyGMiCChvBx7SewgG3oYWUZh4EME4oo3kCAekN3sAqeoUyM1sCRHyFczgJWl2xs5HTiMEddx2LBVhT/JaOw2k3xHRK542nI/bQsNThj/iJhTodXlaccxtyouTUipbc3vsZgu4fdm9hDw== 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=JC5zkN3Ii5Gf9UJRMbWuXIYhBpL1BVZgJ5RZreT9LUM=; b=cciwiy28RCKXWc8it8q4b0X7mxaDoNVOwYQAdCWpJz8NaKqKelxchCjeORJl1O+RSDH1RLmWfi64npNqGBCqLHg5ODnKcxSLgUWNjPnVFUb3pCKEyLEyH/sLqlxH85dY9so8iGkzQAmAwZYT4dIOfH/E9NCmNF9ubT74C7U/6xCFpEGYtd823TIgzlW7tTmebcsfWvQsajlROUCC8pA5/ACMdwnejNoJc7n44ld4Kvk5Zwe1K5YOrxuEDhJnH9rBdA2VLD9yQeiB4y/XtX6gw+un3ij9wME2qRL+0E2ALm2djLnDIrO+HuIVxgmd5w23E2ppnhzSEAlVs8NuhOhOJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=JC5zkN3Ii5Gf9UJRMbWuXIYhBpL1BVZgJ5RZreT9LUM=; b=ZXH9w5npREZChpcvhzv1VS+gjhOuTuEzyba2/M2Kcijf/RNBZjS4QSOz74EsL5KVFfECaLgCw0Jf9pjTx1I91KxkvVN0CVZm6huJzkJtKOZ8+Qr3f3Xc54sF0hYyWwk0RAQ6cE8pPN5aRsCkIiZL5JG/w78THa3YGVHnF5wwQ4o= Received: from PH8P221CA0001.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:2d8::16) by LV3PR12MB9142.namprd12.prod.outlook.com (2603:10b6:408:198::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.20; Tue, 8 Apr 2025 11:24:54 +0000 Received: from SN1PEPF000397B3.namprd05.prod.outlook.com (2603:10b6:510:2d8:cafe::ee) by PH8P221CA0001.outlook.office365.com (2603:10b6:510:2d8::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.33 via Frontend Transport; Tue, 8 Apr 2025 11:24:54 +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 SN1PEPF000397B3.mail.protection.outlook.com (10.167.248.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:24:53 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:24:45 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 2/8] mm/mempolicy: Export memory policy symbols Date: Tue, 8 Apr 2025 11:23:56 +0000 Message-ID: <20250408112402.181574-3-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B3:EE_|LV3PR12MB9142:EE_ X-MS-Office365-Filtering-Correlation-Id: 35f2b2b9-81de-4a19-a2ad-08dd768ffc09 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|7416014|376014|36860700013; X-Microsoft-Antispam-Message-Info: Ncv7d+HHrSFsE76Hgt2uc8RQCJjRi6uoRhZs+QQXisQeDTzpCTYinKiUlkk9OPC8trWPmlLo/fsoooRFsyJV8oRSiJ/YzZAgfY3fO1anwTSeW5ZP7cl/7ahJm4CjtwlvghXoVRcm1JMWt3EXUni5wyC119BtRgdxmQm4QYsyo9u/ZMsW6Ecnne1I4nlad+AjTjvFvCAS7tjZVMzDsV5Vt/b3wkLmeYPzxUa0WDMupuozEU43A3Md26CrygcYchzVT1dnq7gz+7SnDxdHcMOWUjfs08cqHkJEgvad4kCw+jlth0xt8WHT+w43CKBM4sYLJwpVA8suWtm0n8HqoNb46/paf0yFPX2VyqU4zajiGrq6/5Vaj1DLrp53N9BxPcMcQ9ZfM0+f12hXZa+JQKOrTLolXYgffSfyWrGE/l7YArFtivfZcxszbJmK3H7r45BnhQTv7mQ2uji/9ezmEPNC+Yc0R+n7eisE3ST0/Y2U+IaHlx9Fm9q3jkNx1yH+g7IR8ovxcu5UwFHpeVLoSRj8wiCjBVZdbe3OGEAYgoJ7TaO1/vEZyBRKQq1fZ09gPMlk0XU07g2/SOT92p/RW07xcoZjluUOBaot3ouMGUeat6fvCQeDLrRsVlwxvX4TlX9R4arbGtxWIjl0n358nSM+o54q/1/66mtG1pUGFN99MrC2qFEA1IRdYStQ2/1XoJeUcZlt014THNTq87L6a2mhcQN8cjN4kDuMD80ilQYmTTaskOpJwPUWGRvXJOjVCqc8M09unBPRMVb/SnXMy6pNZAtIkD65q8D66We5GqpLY1TsPIQ+hkWkVmSGcCR864DDcrPTb09oJM49b+dVUSNr/P3msTN0xVo5W7MYssqvHsd4moy6mwUAsbMxRwnIyBH1ds56KdPKmHwarK7n2SblfZstjQtij5hEMoQzVhC61Yz/XlmRicJfEcStt5PYdBoW1hVjxN5j21aWwr9iOfHM6fi9bi6Xo+mjtf7KqF/Bz91Ak+o3SASIB8GXjrIl4RldibgdQEwY2SjQxg7h7jSOrxb2Mv/WWNprBQbUjA2uWbteV2WFrwdWqRr+F1Z0ogJPLVNM2BnjMx/IIAgFwm5fn4mHWYtGWwmkP/Kk15h771UCp2j7GCTkpPiGk+k6/+a1dSQvXZPSCXgxGNvjzyxmEIfaUJPHJAodUlPHfP1lDMzdzdRgQ+TbSFFiW5e92RlazBKM3gDZRgXijOnuVQdhvAVDyIdL3VteFYxi0KnbJEI6HUCzEgXcvsv5yogpj7OsNoZpJanrU0L1QDYslPOQ0FQP4YApDxyQ1gLoSVheojvLuBfLXRtucYf3/0+ItVL0kl/jttn2kwvT0jo6BXteo5Lk4xQTUOB+d8MPQofBLMmcimgBs6oYwhvw0GocMTXH90Qrn0JeW5NFojMotQcrChDc1+Sbt0sFQLsAARQ/s0VWiht/FxSMsPyXP8711sEt5TzP92AGu1CImlUa2V87nyJdLsHwfWkT4BqhqWj3Eo4= 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)(1800799024)(82310400026)(7416014)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:24:53.6744 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 35f2b2b9-81de-4a19-a2ad-08dd768ffc09 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: SN1PEPF000397B3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR12MB9142 KVM guest_memfd wants to implement support for NUMA policies just like shmem already does using the shared policy infrastructure. As guest_memfd currently resides in KVM module code, we have to export the relevant symbols. In the future, guest_memfd might be moved to core-mm, at which point the symbols no longer would have to be exported. When/if that happens is still unclear. Acked-by: David Hildenbrand Acked-by: Vlastimil Babka Signed-off-by: Shivank Garg --- mm/mempolicy.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index b28a1e6ae096..18182dd38fc1 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -245,6 +245,7 @@ struct mempolicy *get_task_policy(struct task_struct *p) return &default_policy; } +EXPORT_SYMBOL_GPL(get_task_policy); static const struct mempolicy_operations { int (*create)(struct mempolicy *pol, const nodemask_t *nodes); @@ -378,6 +379,7 @@ void __mpol_put(struct mempolicy *pol) return; kmem_cache_free(policy_cache, pol); } +EXPORT_SYMBOL_GPL(__mpol_put); static void mpol_rebind_default(struct mempolicy *pol, const nodemask_t *nodes) { @@ -2767,6 +2769,7 @@ struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp, read_unlock(&sp->lock); return pol; } +EXPORT_SYMBOL_GPL(mpol_shared_policy_lookup); static void sp_free(struct sp_node *n) { @@ -3052,6 +3055,7 @@ void mpol_shared_policy_init(struct shared_policy *sp, struct mempolicy *mpol) mpol_put(mpol); /* drop our incoming ref on sb mpol */ } } +EXPORT_SYMBOL_GPL(mpol_shared_policy_init); int mpol_set_shared_policy(struct shared_policy *sp, struct vm_area_struct *vma, struct mempolicy *pol) @@ -3070,6 +3074,7 @@ int mpol_set_shared_policy(struct shared_policy *sp, sp_free(new); return err; } +EXPORT_SYMBOL_GPL(mpol_set_shared_policy); /* Free a backing policy store on inode delete. */ void mpol_free_shared_policy(struct shared_policy *sp) @@ -3088,6 +3093,7 @@ void mpol_free_shared_policy(struct shared_policy *sp) } write_unlock(&sp->lock); } +EXPORT_SYMBOL_GPL(mpol_free_shared_policy); #ifdef CONFIG_NUMA_BALANCING static int __initdata numabalancing_override; From patchwork Tue Apr 8 11:23:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042850 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2059.outbound.protection.outlook.com [40.107.243.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 E7C5E268C61; Tue, 8 Apr 2025 11:25:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111508; cv=fail; b=AWKTf6FA92m6u9yAOQGC6e4aOnYCFzBDhurfaoixN+iS7mi9Naw/K9Sckpu9cMvm7ifDz01sTLgrYThT5I8YYNFumwuNIv+hy+BzzJAlCagXTbHJhUvGmgeJT1izp24lfC707KJ+jWonBJliLAN5FXFNQte1dXpS/k4W4fPFNY0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111508; c=relaxed/simple; bh=aAG1b2xEtAYKL34AheW09dcHsdsergw+mkvhYgy9jYk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=POWJsQJn7s9+9f4oJwGhevlTvEJlSBOssGyLvwckHhc1beuwZqU1i0fHT3hVy/m0/2ezb+9QCkeqwWFmOBxwrRNotVtYxqyS17kJ3+GH1vzNu/3vkgbu3reKq60lkYnncYT304l8HKHk8FYXt3+MorGZ9/vWfPqzeTFVyEDISQU= 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=sVqyJoI3; arc=fail smtp.client-ip=40.107.243.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="sVqyJoI3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g+8eqQcwvkhoZ+ULoCanRLe72JPxtTWUM0zzjSdylZ79q+n1JUYH+fZN/pV7qJsomh8pmENq15X+3vFtocd0L2eD0KkLTmMy8f4wgD7gRGmcjydBv/apOJj1ZeUGd24T/nsWLgV5uMAKtHyLvaVWEZsC//E6FOOQEbZQHvna0ve9ZMsuPqkuPhxT9lLMUTygBdp+3eSKrRIg3hcUN7QtbMHcEFYURQWxlgAbsGRbiSFqAqyd4JtS8Tu7jIGO+GsXo1LMJ8zFi84CHR5GTJ/7d+4a4GtnHHFhkRGYWVPXMbmFwyTS3qd6cpi8vmcLGaSknNq8IRoG9QbSvlewW5zZlw== 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=sYHq9jnSXndSvuTqlUZsfvxk1dzgclFuAnLBjLJpGB4=; b=g0sJpEZOIQ05dWHQF8UU96MuMJkp2oRF2NBCOCc9nvbjvimYH7wAec2LCc4sf9GkIRvspe+5AEWeUtm4lHF7YsXjbmpj0O4noR+FATr/vGfaaZvsVk5b/7h7uOPv3/5Qz9WjinZxhyv0GC1/rje3405ZHdEVCoWlakKjo9q457BTDU9332ReprXnotlyxIsTy56b8PDbX0OYmzJx6SbSExg3Cten2vB/6hzxr/eOv0Rn2DVtXaCJUXuHy97EWjqvnHcvKncNm+KLH6PUGCoS5ZH9OYdYDxVRg+wvE1Dij9PGon22bbzDUWefsLDKCCyUlFiXaEAcCJ/KrfJVoNr7BQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=sYHq9jnSXndSvuTqlUZsfvxk1dzgclFuAnLBjLJpGB4=; b=sVqyJoI3autnWi1Ro5LcMY2srDh17clyt2logF/WFtB3HYUjwX/7m/ihNHZE3+3EKyOfs8yskiPifUwVz/MxFK03M2gL+Ppu8FrkKrMR4SzKFj9Fg7i1KT/8157CDgvkEC5NaqfB+s9kaTQo4g3dv97svrmDUzqQxViN/sT8JgE= Received: from BY3PR05CA0004.namprd05.prod.outlook.com (2603:10b6:a03:254::9) by SJ0PR12MB8613.namprd12.prod.outlook.com (2603:10b6:a03:44d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8583.46; Tue, 8 Apr 2025 11:25:02 +0000 Received: from SN1PEPF000397AF.namprd05.prod.outlook.com (2603:10b6:a03:254:cafe::c1) by BY3PR05CA0004.outlook.office365.com (2603:10b6:a03:254::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.10 via Frontend Transport; Tue, 8 Apr 2025 11:25:02 +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 SN1PEPF000397AF.mail.protection.outlook.com (10.167.248.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:02 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:24:53 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 3/8] security: Export security_inode_init_security_anon for KVM guest_memfd Date: Tue, 8 Apr 2025 11:23:57 +0000 Message-ID: <20250408112402.181574-4-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397AF:EE_|SJ0PR12MB8613:EE_ X-MS-Office365-Filtering-Correlation-Id: 867ce280-46c1-4e7e-852f-08dd76900135 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|7416014|376014|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: 1tele9hNbvM4yZewnRp8S4sFhwsugE0WMUwjfSJYoRE+nremhCnig4iKl9MDkcWNOnNqK7gYj0a4wqAsGER6hhwkudCdjPuKp8YFyWHwSZiTeHdMdmaJXTNCGNnKcszxkSDgV99RHLVLx9aQO7iECSHj+Q9yB2Vqrr3oS+s7lXWE8pYJrtUiiNy6DaMspOxLKPPU5i3GoPpkHCZzvqoRbDIgi1Jl1Rhcp4oxrGv/XkmD18AXjLORjlrz7DZotbcv+72aaFrB21I7BP9jDPimSVbIb81SQGCBdqccs96nMNs10dXZsabPJO2XAMrZMtzLpfSKNVkhEKSO3KhsVwj/bKI9hhSaZdgSn5e8zVSIAG3dOSuEqjx3L4S4D0opBtqBCTFLko2AyFw+i1cBE3gIx8uEjb53AAw4c19enBuouA/I1kpFekTzUDC57/MQwasJhtroddbgD+p82+pxksoW9bsIxqzkaq7JOj23WudNJ53mc4dTYKH9x2NZEN/Hz6NnrKZ16tycTNtHM4OgMIxNupMVHaZbf9gy3eMp/578baC+MCXJGQAsxWwsZENzUR2nJyD0kQVQy6RZpLLFLOTaaa78fYFjXWly+jXcx1CXuQuiUOU8vD93zRRYEkttUQUm0+HVkrAzoBu2YKMM94/4EcqU6zAu1Nn1PX5WqZ5fQFrFrULgTje8PvBQK90aW+7ybO3w9ZaDLVla71vqMQVQLxKWe9YOptd4pTOfX4ZQQq3i8oLPzo+wx5oOUO1UEOpl5EGk3udbMWgrXRrHjSfmAtrAekyiZOTrHB9hVWZ5UJFzJw8Q7hgeiVL+S2yqtBS7pc/G+YFIzbFWUbSwKBJsKNiSqlRyI+fqpfr1mhGqOZ5xTE9b8goOukktr4Q0VAzniOT//XEC+mCHNKW0+4sFB4f8QuRpLCHILNQLGdF291MOH8rvJkDD+JCmxt3I2MnT/TbhK+aFeUvEY3qzEXpyVAU6m6ObjsZq1iZGXHaq7razq4B8xEstdO3LG2vgn1Ph3BUg5VUFdo8XOQCtgx8K8Ox3EJdtzgDRLmxP1qgJc9Misq/tj3jJKbHj/YQ0XyoP+Mpc1RleRTgHYoFXjro0ffl+UvS/GoI5IrbREVKFYQfrG8JL8oRS7AUwntmziNVTYOXDJcRF8YFxxmBJPP5UJlsCtUXbk6jVLsVdMR4q6dlI6Enhho2FzFRbSfBglue2FsoBgmuLcoyXWPU/RXc1nageHZN/yQQpqbKKJs85pk1fNlsAn4ryloNH9ajyCfzl75m2FhggWCILerQvT2VAo9nKkyRk8yxkDQ7ddItyRzW6O9iLJzR958wAmGF7jCZUy2eV8MSxn7tB4s5cjNvuDkx8yjxKJBzzyb0qED9RfidUoT1CNEYhPhxVP+T0Nv5cbZ0ZNaE0beRO7NeXwED9PaSOCReqnGjFNFRET7WVT1ln3fMYyUY+N26SpqRr6xk2wnAxyBFVhYjox6Wy9pI8gmsj4aMcSm+nVE/djn38pJ0= 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)(7416014)(376014)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:25:02.3506 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 867ce280-46c1-4e7e-852f-08dd76900135 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: SN1PEPF000397AF.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB8613 KVM guest_memfd is implementing its own inodes to store metadata for backing memory using a custom filesystem. This requires the ability to initialize anonymous inode using security_inode_init_security_anon(). As guest_memfd currently resides in the KVM module, we need to export this symbol for use outside the core kernel. In the future, guest_memfd might be moved to core-mm, at which point the symbols no longer would have to be exported. When/if that happens is still unclear. Signed-off-by: Shivank Garg --- security/security.c | 1 + 1 file changed, 1 insertion(+) diff --git a/security/security.c b/security/security.c index fb57e8fddd91..097283bb06a5 100644 --- a/security/security.c +++ b/security/security.c @@ -1877,6 +1877,7 @@ int security_inode_init_security_anon(struct inode *inode, return call_int_hook(inode_init_security_anon, inode, name, context_inode); } +EXPORT_SYMBOL(security_inode_init_security_anon); #ifdef CONFIG_SECURITY_PATH /** From patchwork Tue Apr 8 11:23:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042851 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2049.outbound.protection.outlook.com [40.107.220.49]) (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 E9616268FE5; Tue, 8 Apr 2025 11:25:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111516; cv=fail; b=nNk0gGNGei9hileOZIOxuoZTy1wE8YASgVDhlD35jv+wjjnb389L7L3y1ySaRPuwBNnnN91/oidOMNeK4dJa+l2ybXa1owQBJVpx1KlbZz1nJAsAlRzn+sb80ldjn2Rl6eTlcn1KUX99BbcmHg6j9Ynmg0s41hyRIJuD/mkJZQw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111516; c=relaxed/simple; bh=jNMG2ZtK4IDdiYCPz1B6Sj7cBTo3745yhkxiiTm1gJo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PBJFzdsrL1+AdIKg79S6BmY9Mld+s1s/6E15wogZUPpdOQfcGbVleuEpzez4JTj1WVJqw2hYYeQoFtnDYhh6lgi3ezTB+KzHrAjS8n/xYCMFdqi+dbuwZVc2fe8RxJLEYICxdACI37HHO0QOirPTwXD9Boet31o96IsmWeLXntk= 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=s1XZalsz; arc=fail smtp.client-ip=40.107.220.49 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="s1XZalsz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aD8y3lcoZ1iWn3cxEIB2zAtDZvDjTpo9I9FPxWLAey4PV99Z0FZsH1sTTtW1uXnt4MzBVHpNA1kWKHDZ6KQrUF2EHlqCCTbBUSYI3yfu+YwLFOJrWwJhQeFjM41K/NC00C3y3t9Oqy7pPFBboz+m/7JqtiFq+AvJQWZF83fl8C8OB+/Rzt+T3JXR/NPcPPE7M51qtaJEqjj5jsbiiwHQTAnb4nCoPghzm16wBav+TIzewiIG0oTUpCXRqt7ShBad3JP8ChX9h1NKBWSSS1boFTNGckumoLDCkghF3xE0tv9p3f8tamRodHn8yKcp6Q3/M+JhJmdmY1Mdmj5DRO5j1w== 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=rsJfiIWvnnVL8+FaE/0HSXr+gQhYoiD9aQegFlkmumQ=; b=J/oxO0TGu4JfXz6r1KIRipHho6eZldkTcqet0t7Xed0wCSWfnVX0PfuuKTpY3y5dGwr20aWBQzQZfwBiPyp3NyQ6aC5XwlauyHP93od07v8qWAJEv74/I6NBuxF+D8/uf2D53Mu49Ym4rIFMl5/ZURJ7i4+M6utxE0+W4oUH84vMHzIrJKybvSqkVpF1wJa3GdJJ7hMF6z5Unt12mSFMjPSsTmobrTtVmMn8sGCjJotsNUpwmBeb6GbPMfSfSSynPO8pPNabrky489SIp5RbI8g8Uhmb1CDhPU7dZFjqfp7Jm1sn7mCjy62Lu5XtbYwd878wzMF7Do5DXDCAfDLdOg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=rsJfiIWvnnVL8+FaE/0HSXr+gQhYoiD9aQegFlkmumQ=; b=s1XZalsz+1XdBsuiOX53aarsfNu6JOyXK07De6czvKM/s5JpmlVWwz9eLS9iA8PEgoxzhAjm6GQyXTQClQIr9/yl6F6TOfN0F4izjH6O8AshqrJGuDn6snwGwyUOIpSfUjWnYKvk9Joj54qLx+GYfugTPE7Dl69k49oLUXKfuVY= Received: from PH8PR02CA0018.namprd02.prod.outlook.com (2603:10b6:510:2d0::8) by BL3PR12MB9049.namprd12.prod.outlook.com (2603:10b6:208:3b8::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Tue, 8 Apr 2025 11:25:11 +0000 Received: from SN1PEPF000397B2.namprd05.prod.outlook.com (2603:10b6:510:2d0:cafe::2f) by PH8PR02CA0018.outlook.office365.com (2603:10b6:510:2d0::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8207.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:10 +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 SN1PEPF000397B2.mail.protection.outlook.com (10.167.248.56) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:10 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:25:02 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 4/8] KVM: Add kvm_gmem_exit() cleanup function Date: Tue, 8 Apr 2025 11:23:58 +0000 Message-ID: <20250408112402.181574-5-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B2:EE_|BL3PR12MB9049:EE_ X-MS-Office365-Filtering-Correlation-Id: ae4436c7-1e37-44b5-7e2a-08dd7690062a 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: gxC6SjeXtximb3oqkb139F4GbNSM6/Iz0ya018YyW4u76fPAmdiffyMaJZEfhmSnP0Qjwse32RIPcnQptCYmmAaaU+t3TLFPJleUTrk6jk147w50lLmFiatz/akDvlmqC9oahVoNSc7uNb+DMwVV7dCaQ9h5F+nifESHout3crHweKFCMqHDn5mEy2H0RHulMV/n6EdhTBlgh3D0RIgtVACZM0m4B+6m8haQHGDW2IhO1AlWhONtjA46OIvF7LX2wH18EGax7yy3Uw9N6vyOrYcVH5IUCNVH1odlN/gVRCu4mmMijmw2gjhpasimUwDmCeXHQlXMG6YN+YG0vC0y6+f0pcuZsWbqQwYCHN36TQmK7d72q7ONmsjlEnUDyrm+fRuyy7aRkNswf/dnefvjUOEoS3ZgS46Et1adFQ1VDp+t6z4nTp4e6KvSlSrOgkSbmwoQF7YbgfJwv3pxtIG9qYnOTEIaZocWuXlPsDjFYv3E6OytAymDHYi82JKTj5W4ebR5XyLooNJL9T4WhC/IEQ5T0gUb+mOWOJHauqRCC0QxmYfUTVrwRigjvWetG81XqDyhp3BxQWUvCBjB3k9rGIy67qJhuDvVEqm6Ua9QIfKpsQGDS6fWsSveeP9ZAl2rnBq18mjUYzwZG0ST6bZiFCtg7uj7rrWGKxNvomMPEBBJtBo5Y6LczNcFmVXdnJZr6h3RQynhrBETKUWxgyboofXM0E+OX7v4+P4sqW9Joh09sus+g6cijFON27vJy3GJGzWAU7ehaeXZ3HmqKDAB+P/Wpf1AR5ta34h8y4mIAQTCoYR2CHFKPX5UDHA0u/b67hJdo9P7AGaWZShJ/7s+7PHB+l0MBtFL4jPWpFF3PIUtWY1bepIwdOJEb+oGI+LbuG8H1bCJQAe0wOL2LwGWc5b3bYbCCPvtprkgC3bXXt0K2kmYOLw1av7s8IDcwv/2BFoP3y6hRTs8S4mYUrhyICFqR3eeT48NHfk9GqwQ4AsV/f194DMaNArkjUWqjn0kfWa0HHraghf1NSR0yE7jR7TzqL8Lj3U6Hs7Gswac9tEfpZaAkqKKpVwBbsgcSTfgU96hvw4EgxX5C8Hllh1rTusEhOC9HwB559Rdqz0OoDlULNlJzZ8dTr9rgHkgrmhnWgB7lG1kUmiRH/IdTZeDHtTW5TWiTVQCVhL1im6CtzjAl8ZcUKnvFYUmCWij/j61uq5CVQICp+Gr73vBJf4576GiTk+jRJRJI1D9tokusqQs0OKpag5K63DAXlUqHhwL4idnGMFYbP9R3QXaRjzcc71vcAi+mcLBV3KYzQmV8JBRoggaYcPM2Iw7uIjqZk7JdPPF3uNpiCmyM1/Xh4kdX8s0J/zT2YcsPftocnpVWuMy1xKAJyyx/wPvKzNvvJi91tBD7204araAdBDsBPN9UcIoJxVM4Gi+eUeq5CtPkBsUX7jZA9xcMKD1Sf4BagI313CwtexIv+FWbTGjX41uxn4Bx02PFvs7/QOUGsg8IRM= 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)(7416014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:25:10.6669 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ae4436c7-1e37-44b5-7e2a-08dd7690062a 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: SN1PEPF000397B2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR12MB9049 Add empty kvm_gmem_exit() function for proper cleanup of guest memory resources. Call it from both kvm_init() error path and kvm_exit(). This is preparatory change for upcoming work that involves KVM guest_memfd using inodes to store metadata for backing memory. Signed-off-by: Shivank Garg --- virt/kvm/guest_memfd.c | 5 +++++ virt/kvm/kvm_main.c | 2 ++ virt/kvm/kvm_mm.h | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index b2aa6bf24d3a..88453b040926 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -323,6 +323,11 @@ void kvm_gmem_init(struct module *module) kvm_gmem_fops.owner = module; } +void kvm_gmem_exit(void) +{ + +} + static int kvm_gmem_migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index e85b33a92624..39580f79908a 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -6441,6 +6441,7 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module) err_register: kvm_uninit_virtualization(); err_virt: + kvm_gmem_exit(); kvm_vfio_ops_exit(); err_vfio: kvm_async_pf_deinit(); @@ -6471,6 +6472,7 @@ void kvm_exit(void) debugfs_remove_recursive(kvm_debugfs_dir); for_each_possible_cpu(cpu) free_cpumask_var(per_cpu(cpu_kick_mask, cpu)); + kvm_gmem_exit(); kmem_cache_destroy(kvm_vcpu_cache); kvm_vfio_ops_exit(); kvm_async_pf_deinit(); diff --git a/virt/kvm/kvm_mm.h b/virt/kvm/kvm_mm.h index acef3f5c582a..8070956b1a43 100644 --- a/virt/kvm/kvm_mm.h +++ b/virt/kvm/kvm_mm.h @@ -69,6 +69,7 @@ static inline void gfn_to_pfn_cache_invalidate_start(struct kvm *kvm, #ifdef CONFIG_KVM_PRIVATE_MEM void kvm_gmem_init(struct module *module); +void kvm_gmem_exit(void); int kvm_gmem_create(struct kvm *kvm, struct kvm_create_guest_memfd *args); int kvm_gmem_bind(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned int fd, loff_t offset); @@ -79,6 +80,11 @@ static inline void kvm_gmem_init(struct module *module) } +static inline void kvm_gmem_exit(void) +{ + +} + static inline int kvm_gmem_bind(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned int fd, loff_t offset) From patchwork Tue Apr 8 11:23:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042852 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2085.outbound.protection.outlook.com [40.107.236.85]) (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 9DDDC268C44; Tue, 8 Apr 2025 11:25:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.85 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111525; cv=fail; b=eQ07iE1Px2rQcL4XeuFb0UCXAlEx5HemRJXiB129pl6Q3w1NApiL+n72HAoqBwhmE2Hd/hXmJa+cAPd/KmFhbn40vLFAHcJXyGrGffO9p1eE2nl4fycj2E3jy89kTa8igIk8bpATP4zoDApWfWNPCFBAgktDOHjXaBUkO/FX0ks= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111525; c=relaxed/simple; bh=hmeM27VRmgcbGxR8D8x2uc8yFa8llyHNxAzhb8N62aU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SqQ5btxHzQbyyydw69cVmgHXTQNIObU40iawRbpyQc5YrQgl8sQXEqkqHPS/t8/eOM2/YNXArGyhNReS8cwJ/x1IosJcsW1w1KvTq0HGnRlHATcclPFXBeSuq61db661NSMLzGEq15H6qVLJc6h7YPYA9sKX2ppIGSgXWc5Ho4w= 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=m8d9YYdY; arc=fail smtp.client-ip=40.107.236.85 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="m8d9YYdY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SR7tKYgjFOR4broq9+G6IpG/bcJO//E0qQPesMqEJZP0a16XCqr0E22Y24m+SMnn63sMPAxhcqRGX2DMTPrjq4wkeMwZLGlMcMfrdSqSiBaDLd+vbFTNvgxbSzRCzX+wIknLyjpdb8K0wyOvkJC7YZhnGrC1YBfOCTY0FO9slWYNGsEsjDB3g+NSyBzHilRL7RAe9ohnGiSGaIdJ+S8ISzWINjwpWSdHQRgxc9YAoKLd5n67KUQ05uCAEQV058ldQU9S9MokTlz/hteiTBvKJNEYopsFPJ++RivXuIEmMhpp063KgVJw6yIUdTSoHhEpJq9XUbvKvPCBINv+mJFulA== 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=ZtDtGnERGZVqPB/Lfqu6uZhmDvUEr3T8WSdW0Gr4W5Q=; b=sMS5klPWhvcwzven8xwAsUWvWxx9KF+7jXSiaAzsZWUCJgiTww+h3Ua9VCmVKx0RUWrDmMcvjOwoR5RgbC+02MSijHI6lhQhTcfsyURwJVdlXsNHXy7ColdLjPXeBWyk+hRjF5gYV75YdSK/5Yddqaw5XFzkGOW+O0vrTOzShwIEUUKnfZMv3y9teWn7zGTxqCpLcs/IYmpED8PUFMAZpoZcharwbxq1ZZgEynGtA+k/YO2OW2QDZS7FW4+KahRyy7bI0rQwnRRhantJi239qWZBXnRf9o1WG2zSXDNMfhnpBOacZjgodSr8Q/G8y++1RUzoIBoxVN1BvhNl3sge6g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=ZtDtGnERGZVqPB/Lfqu6uZhmDvUEr3T8WSdW0Gr4W5Q=; b=m8d9YYdYPcLhqqs+i/oL+tss0AzWDfK4heDBNoHEHk4Cw70zoT4Fdz+EdUEf0Yku3p38IuLDLWRWzH6tGNnX4sVz0Oky8juMUgfg72Z30Yrz28xZQire4wJ3KwC2GwMr8Y0MRw43NlNMbBD3/Gq8tvrE5HxiFbr8jii1Q2wVFhg= Received: from PH8PR02CA0003.namprd02.prod.outlook.com (2603:10b6:510:2d0::29) by SJ0PR12MB6968.namprd12.prod.outlook.com (2603:10b6:a03:47b::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.29; Tue, 8 Apr 2025 11:25:20 +0000 Received: from SN1PEPF000397B2.namprd05.prod.outlook.com (2603:10b6:510:2d0:cafe::84) by PH8PR02CA0003.outlook.office365.com (2603:10b6:510:2d0::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8207.19 via Frontend Transport; Tue, 8 Apr 2025 11:25:20 +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 SN1PEPF000397B2.mail.protection.outlook.com (10.167.248.56) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:20 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:25:10 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 5/8] KVM: guest_memfd: Make guest mem use guest mem inodes instead of anonymous inodes Date: Tue, 8 Apr 2025 11:23:59 +0000 Message-ID: <20250408112402.181574-6-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B2:EE_|SJ0PR12MB6968:EE_ X-MS-Office365-Filtering-Correlation-Id: ed778027-b6c4-467a-edc8-08dd76900bcc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|36860700013|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: neqr2vN/D+uZHvExlrSqwn7MPv4B2nmMK8ezTkoH6hm0kHbN4UR7MFyiK9CDciHdicKN0FjpA1JsQQDQpFspbtPi0JJUoCVEwAXBd3Brq33gWOxOpUbRDbQouJ4URozxp9kHmzRVWroRCIdakUI298sMzXYSbvVoLkF6SnUoCoZ/V1maMxa01ZJNRcLkR9ZqRVJI8ZlGx5T9P2DMwKO3OOLD4XgJ+nsesax36yFawB3ULU0KCj7F4OTvW71s0g1ktlbYoqTEd1XMwFdblYG9ZLuEY2jsMVIgrmrr2ebCbUhSGwQ0ftHT648GrFBQ0/9PDEClPRSE1R4e4wCFvzPDijfLwnbHu7FpcDdh60U0+2m8oSrqajAYF+EGvj0u3Jnf5tJs428eGpWokuG+U/r0ajxkRnqrb59l9/47HFEMRy3PHMA11cAU97avLkgqK32a3nfo78S2GO2W9eGVN19x5JKXdN4coAMOP3em40AwLWOovSv5DUSXqDCMyp7uPRa4t24Dnid4Ap2ya0MIs2grnTjBKuSOiCsCEOidmeauIasLwPh0BVf7RoAs4xzv7MGLA7+e/lkZyLYtU0o9PEG7tH7l3rowWPJgZrT0T7/5hW3McgISBrFHlGABaECxcLhfbR25/UpmEYbMZk5oNjFy4bzhsnTgXIOwaqRwnk47FPiIDzomOlMbR9nS+hs8o10gZtxZzGXyq/yZs0WAv/xpfAD14d6XSqNXfFQexJKtbRXyQ0c+Ykq7ZzQzFxcMvdUSkbPjKXUTEQk8tl4c3KOftz9yitCjTS5m4giNbu06FBNAyJxjFKuRmNa5JOvlGfeAh2wQwY7rT6+2U6Dbi1MuxBswsC6ANDllWYLwTIfyk0vW065pu0g1LuguFBzcoN16XnsueWpI4i9wOOb8URf0iE/TeNh2uu5W9kD2Y+Rt0B4tF2di5RO11N2YtdiAWE4d8rVk813lRhkZikoiqC1yicL9zzaCFvlnxwO9MYyurM+861wtH6DClTMKjeZpFozGOVqMx3IDZesGG0ushLC4DxnpnCECnErQG2NpHoJTP67DYBjGTIh8ayaZLgRS5r89N/xBex9ykEYdK229s9AqAz2q3RkyUO/hTvpxRUp4b3I4DyQbg3NKvYHLHyTyjtqlchn+iTV701HtGYdv4RoxIhwV+cIxQPpMhKyqS0FXexxVYPJSj1vLUufq0xHD6gqAE/uwI55unP03p898SZzluvP5c4E7GE/jMBdSyu15Jp4/SbIWQf/AkpWLcUZAvt/iFUHd1655RxrJ0iIhkpPLxTdoPw/LgUofwzb0KNEvaE80qQdIP2dLowmza1OYsykBrs/n8Fwk9tP3BWdZSa19ia51TYzmjz+9N+VHjuoabc7TXki13SbCfEildcaQdVFPaDRVnlTZcLx5w6l9d+P78Wt1x63F2hC+ED56i4+7UIccLQMUamcAulSvcCuSM5/PabI11tiJfgHriNc9KpQM7d5/gfC4e5PaLOmR+SHZeAc= 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)(7416014)(36860700013)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:25:20.1201 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ed778027-b6c4-467a-edc8-08dd76900bcc 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: SN1PEPF000397B2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6968 From: Ackerley Tng Using guest mem inodes allows us to store metadata for the backing memory on the inode. Metadata will be added in a later patch to support HugeTLB pages. Metadata about backing memory should not be stored on the file, since the file represents a guest_memfd's binding with a struct kvm, and metadata about backing memory is not unique to a specific binding and struct kvm. Signed-off-by: Ackerley Tng Signed-off-by: Fuad Tabba Signed-off-by: Shivank Garg --- include/uapi/linux/magic.h | 1 + virt/kvm/guest_memfd.c | 133 +++++++++++++++++++++++++++++++------ 2 files changed, 113 insertions(+), 21 deletions(-) diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h index bb575f3ab45e..169dba2a6920 100644 --- a/include/uapi/linux/magic.h +++ b/include/uapi/linux/magic.h @@ -103,5 +103,6 @@ #define DEVMEM_MAGIC 0x454d444d /* "DMEM" */ #define SECRETMEM_MAGIC 0x5345434d /* "SECM" */ #define PID_FS_MAGIC 0x50494446 /* "PIDF" */ +#define GUEST_MEMORY_MAGIC 0x474d454d /* "GMEM" */ #endif /* __LINUX_MAGIC_H__ */ diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 88453b040926..002328569c9e 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -1,12 +1,17 @@ // SPDX-License-Identifier: GPL-2.0 +#include +#include #include #include #include +#include #include #include #include "kvm_mm.h" +static struct vfsmount *kvm_gmem_mnt; + struct kvm_gmem { struct kvm *kvm; struct xarray bindings; @@ -312,6 +317,38 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) return gfn - slot->base_gfn + slot->gmem.pgoff; } +static const struct super_operations kvm_gmem_super_operations = { + .statfs = simple_statfs, +}; + +static int kvm_gmem_init_fs_context(struct fs_context *fc) +{ + struct pseudo_fs_context *ctx; + + if (!init_pseudo(fc, GUEST_MEMORY_MAGIC)) + return -ENOMEM; + + ctx = fc->fs_private; + ctx->ops = &kvm_gmem_super_operations; + + return 0; +} + +static struct file_system_type kvm_gmem_fs = { + .name = "kvm_guest_memory", + .init_fs_context = kvm_gmem_init_fs_context, + .kill_sb = kill_anon_super, +}; + +static void kvm_gmem_init_mount(void) +{ + kvm_gmem_mnt = kern_mount(&kvm_gmem_fs); + BUG_ON(IS_ERR(kvm_gmem_mnt)); + + /* For giggles. Userspace can never map this anyways. */ + kvm_gmem_mnt->mnt_flags |= MNT_NOEXEC; +} + static struct file_operations kvm_gmem_fops = { .open = generic_file_open, .release = kvm_gmem_release, @@ -321,11 +358,13 @@ static struct file_operations kvm_gmem_fops = { void kvm_gmem_init(struct module *module) { kvm_gmem_fops.owner = module; + + kvm_gmem_init_mount(); } void kvm_gmem_exit(void) { - + kern_unmount(kvm_gmem_mnt); } static int kvm_gmem_migrate_folio(struct address_space *mapping, @@ -407,11 +446,79 @@ static const struct inode_operations kvm_gmem_iops = { .setattr = kvm_gmem_setattr, }; +static struct inode *kvm_gmem_inode_make_secure_inode(const char *name, + loff_t size, u64 flags) +{ + const struct qstr qname = QSTR_INIT(name, strlen(name)); + struct inode *inode; + int err; + + inode = alloc_anon_inode(kvm_gmem_mnt->mnt_sb); + if (IS_ERR(inode)) + return inode; + + err = security_inode_init_security_anon(inode, &qname, NULL); + if (err) { + iput(inode); + return ERR_PTR(err); + } + + inode->i_private = (void *)(unsigned long)flags; + inode->i_op = &kvm_gmem_iops; + inode->i_mapping->a_ops = &kvm_gmem_aops; + inode->i_mode |= S_IFREG; + inode->i_size = size; + mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); + mapping_set_inaccessible(inode->i_mapping); + /* Unmovable mappings are supposed to be marked unevictable as well. */ + WARN_ON_ONCE(!mapping_unevictable(inode->i_mapping)); + + return inode; +} + +static struct file *kvm_gmem_inode_create_getfile(void *priv, loff_t size, + u64 flags) +{ + static const char *name = "[kvm-gmem]"; + struct inode *inode; + struct file *file; + int err; + + err = -ENOENT; + if (!try_module_get(kvm_gmem_fops.owner)) + goto err; + + inode = kvm_gmem_inode_make_secure_inode(name, size, flags); + if (IS_ERR(inode)) { + err = PTR_ERR(inode); + goto err_put_module; + } + + file = alloc_file_pseudo(inode, kvm_gmem_mnt, name, O_RDWR, + &kvm_gmem_fops); + if (IS_ERR(file)) { + err = PTR_ERR(file); + goto err_put_inode; + } + + file->f_flags |= O_LARGEFILE; + file->private_data = priv; + +out: + return file; + +err_put_inode: + iput(inode); +err_put_module: + module_put(kvm_gmem_fops.owner); +err: + file = ERR_PTR(err); + goto out; +} + static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) { - const char *anon_name = "[kvm-gmem]"; struct kvm_gmem *gmem; - struct inode *inode; struct file *file; int fd, err; @@ -425,32 +532,16 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) goto err_fd; } - file = anon_inode_create_getfile(anon_name, &kvm_gmem_fops, gmem, - O_RDWR, NULL); + file = kvm_gmem_inode_create_getfile(gmem, size, flags); if (IS_ERR(file)) { err = PTR_ERR(file); goto err_gmem; } - file->f_flags |= O_LARGEFILE; - - inode = file->f_inode; - WARN_ON(file->f_mapping != inode->i_mapping); - - inode->i_private = (void *)(unsigned long)flags; - inode->i_op = &kvm_gmem_iops; - inode->i_mapping->a_ops = &kvm_gmem_aops; - inode->i_mode |= S_IFREG; - inode->i_size = size; - mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); - mapping_set_inaccessible(inode->i_mapping); - /* Unmovable mappings are supposed to be marked unevictable as well. */ - WARN_ON_ONCE(!mapping_unevictable(inode->i_mapping)); - kvm_get_kvm(kvm); gmem->kvm = kvm; xa_init(&gmem->bindings); - list_add(&gmem->entry, &inode->i_mapping->i_private_list); + list_add(&gmem->entry, &file_inode(file)->i_mapping->i_private_list); fd_install(fd, file); return fd; From patchwork Tue Apr 8 11:24:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042853 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2052.outbound.protection.outlook.com [40.107.220.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 23244268C44; Tue, 8 Apr 2025 11:25:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111534; cv=fail; b=Rb+KWY/CiAMEMaGsiHcejzlhBM300RiMrCTPG/diAEr4NyDDgDB8ZcrDlPgNBMxmErBi3oF2DX29R2JiKmNfoPuVVhSqZCKkO/2NLZEzMNns1lFFGzK+4ycn9dpL1+fM2YlYzG1BvUqUpdL47t6lGJyu3bRvkJjiuNQdb/uUsLg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111534; c=relaxed/simple; bh=EwaFEG3JQTp6E0xZlyqRkKNLYxJYCe9FwQlBWoqCH7U=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=h54mTJS8qHUIUzXW49cgKuAp1S0pmkv5Gz4n+KY8rq94rzSR7pHYMoMjEZjyJCmEpDf4TUrenfYbT/uzIkh9V5s/87849CvjilcnUgjFwZ1Nu7dKWjdshM2dyQI+vmIgvnVyMfqZbJPMN2+Q56nGq40mTWwGvyrCihkEbXJbIv8= 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=O6TiZZy5; arc=fail smtp.client-ip=40.107.220.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="O6TiZZy5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=smXqU575NUWKBZcow1YOQOn/GTFGxjlktBcLnju2uj/Opsw2m2DJMGyn4eyZsCuvFKJfqq2JH/f2aVpoFkvyALD5UdsAfgflbzNuLDV2p2iitTf2JTEuAnsnQp/5fvLbu5T50asJeBc2hWs/Yu5f3hfhkVtHsPrHcbroDGLMeXVQeqIb8qDEcH9L4Ls+4YQuK7BJQ3foiwWzO8eZSdEjMUFARPlM2h4wQtzXzywYVik0FW4ke7Mg58+UDlAKTfjCwjOQt4MTct6EoyHEb8o/7D5g/MH3qblxBrJQ8DCkHiHezb7w2ZErFrRprJiBSV6FLHFb6gJs9RtN0hklbSGnZA== 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=SNHDj2125+dfDw+HUhTFnCp1kwrnzIBV2zrPrFVna80=; b=bMhZp78jm6lo3lTU0TjRitYVBwvCBXCvH7l/3d051tPJBdCTomZK6etDx+Bu23fj3wRMwXk5GAZD8UNtCIGg1KRjCLvApfKyrRUq2/P6a6swJu83XWk6tF2JZADDPSqNY3Kj6eCPToZ4HXpWuuib/yM+gb5hFn0lEzKV1px8ZDYCJVY12oreJDol6C25fBf2rR7oJMOwlO1LdxbOHAR2V4KA7VTgTA5VkLFwVkEWpTxqG4AsRKVf3rpb9h4ehsTKWzjoNURowsFRfBkiY7/Xzw/Ea4Yd2xByl8jYEoIaibiVUcdeCWO1GrDBWScMG/l/gOHINvi8Lhpj4PwLbj2cqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=SNHDj2125+dfDw+HUhTFnCp1kwrnzIBV2zrPrFVna80=; b=O6TiZZy5VdtAaPuk+NOWi/zGH0nrn5ivHJqm3U4oT6zaAR9I+N/aUdHyTbn+jQgkqGTVT9RDWPrRT0PxZHyCws4RCICHnGs02gYxfwNwz2TDd1bxG0tPYCXpEoXg3PG42KfxqBl8byNTneCIAwB2UILKwUzjVX+IqYQ90lA5AbA= Received: from SA0PR13CA0009.namprd13.prod.outlook.com (2603:10b6:806:130::14) by CH2PR12MB4184.namprd12.prod.outlook.com (2603:10b6:610:a7::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Tue, 8 Apr 2025 11:25:27 +0000 Received: from SN1PEPF000397B0.namprd05.prod.outlook.com (2603:10b6:806:130:cafe::6c) by SA0PR13CA0009.outlook.office365.com (2603:10b6:806:130::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.19 via Frontend Transport; Tue, 8 Apr 2025 11:25:27 +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 SN1PEPF000397B0.mail.protection.outlook.com (10.167.248.54) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:27 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:25:18 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 6/8] KVM: guest_memfd: Add slab-allocated inode cache Date: Tue, 8 Apr 2025 11:24:00 +0000 Message-ID: <20250408112402.181574-7-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B0:EE_|CH2PR12MB4184:EE_ X-MS-Office365-Filtering-Correlation-Id: 9dba5d47-eca5-4a91-3560-08dd7690101a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|7416014|36860700013; X-Microsoft-Antispam-Message-Info: 0f8g64D2wBB49I2BD7jWy4gneIROVMmGGX2osLwq/NrtHC3mk7f0QVFt6TXQik/2Wxa0d/bQvwiFP4E5IUCferrMnHye13KacdohnTLaFWy8aO/wmwmAFCdKKCJjsF0PMzKqR8KaDYh/nW1F64YHIULh46xxne+zRf6Yapej4T+GaFXUCYUsz7skSWaX9BuQdFoWxNRwTwrXnHMXfxqLUk024PHs+Gt0Ty8oVF0hnOZGTj6bNeWwYQrkYnPV+zbBgbY18JxPehDN2FWEBtUTQODbS6zxxuYmEk5VKBDIlSJfU7mE5ngar3XKuCicM+FzTUJ8jTOmNG341DeUkLkZYD0F80NcIRkkrQaDMmC8XEj5IeftWxPOjdBUmfDN24xkawND3jVq27oZAIiyLFpnPLV4CfxKseK7Zm4HfouSScTOvVtGm1S5Dwa2S10GPcBA/2pP1qsxFClhv1CEJbxXw3/yBZHcNM0TOOFF6YVV4cfj1NasLq3vi38IgxbckrKs1Nw4bKwB9EMgIrZDB2SbNzmgghW3OZrUkFm2vAhaP9FA+dwx9RErugIQaPCG61Ik7oxcwmzEgXbhp2jYh/We35xUAx3k7D8sRV8F5E2vAzw7CmSgmNLQ2cO2JykH/n8CDnnDPBImx/HmKHJE94rgqwwYAI+CyMKfuyPGS7gmMNfO2Brw1PKonKwoj+a5fCQ8a0IyWPOljALfmkp4txmeZ1UNs8Ro4Mr1704LIox8ogizboLr/2t/FbPnMKAiF1XrAxbckXw0vrJAAZeywosr0tqyiF4olmPawzHjwR/JnGWvEI19JqYoKnwLIiIOE20cK1dcmrmuC0rTQ2j1nvPrHfK3c1lyxzMGX6X/97fmPY8G+ccE3jzuchCqenltgXjslid8/vc6ovA+oNjAvoJgXpYnzSdDlgyrqjIGm/qg4gJf6WIZL23ABMOA0Ork4gry8YhCJMluxVYn5ltMORqTJ279DWlIbJUni38Ig8ds8zPnKG9YYf+1NqXX2U5N9lLdRo9Jsd5Axlef0cAdowzOU0QD9RE+tcdDHm9nxFTmFm5Czj5kPy5EqVQ3AKFJteUWQyQ7n6WxBsrtk52Rnvlhqs6+GmoWz244I4R0T7PuUwIOQC0f8ev3g0e9NOnpZel2JjAblkLOl0o/fy51qyoiSUQBVKjYKr7wmZBYCgN+l/Us9dAX1ug8/84qgw9FSiDKt80/XBUP1QaHtbba2hW4t03hoJsp7vD4ZL2SGyzus3EAOkEMBTmoEt6wQ2f9bi7HtLbOm95FzFGKjZlOVCEh5y9WP5k/FZcuV3EJoKnqP2txOptVWphz2Q6T+cJFaniNzLdOmdyYUFAG35TWB3FjOgQoX5TaDWEZHMIKVNuTI83lDufkuhRYLY1jHn0deOH5gUMJSLK8/MhpI+dAjq/jP4VTwE++nzoVEbz7qJDewfZkGf4ssxWpWd0DBN12IDuoq/3cUaeFeRr5xeLuDrerpYynXgVC6owCSY8+uCpzdtE= 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)(376014)(7416014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:25:27.3374 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9dba5d47-eca5-4a91-3560-08dd7690101a 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: SN1PEPF000397B0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4184 Add dedicated inode structure (kvm_gmem_inode_info) and slab-allocated inode cache for guest memory backing, similar to how shmem handles inodes. This adds the necessary allocation/destruction functions and prepares for upcoming guest_memfd NUMA policy support changes. Signed-off-by: Shivank Garg --- virt/kvm/guest_memfd.c | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 002328569c9e..0ccbb152483a 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -18,6 +18,15 @@ struct kvm_gmem { struct list_head entry; }; +struct kvm_gmem_inode_info { + struct inode vfs_inode; +}; + +static inline struct kvm_gmem_inode_info *KVM_GMEM_I(struct inode *inode) +{ + return container_of(inode, struct kvm_gmem_inode_info, vfs_inode); +} + /** * folio_file_pfn - like folio_file_page, but return a pfn. * @folio: The folio which contains this index. @@ -317,8 +326,34 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) return gfn - slot->base_gfn + slot->gmem.pgoff; } +static struct kmem_cache *kvm_gmem_inode_cachep; + +static struct inode *kvm_gmem_alloc_inode(struct super_block *sb) +{ + struct kvm_gmem_inode_info *info; + + info = alloc_inode_sb(sb, kvm_gmem_inode_cachep, GFP_KERNEL); + if (!info) + return NULL; + + return &info->vfs_inode; +} + +static void kvm_gmem_destroy_inode(struct inode *inode) +{ + +} + +static void kvm_gmem_free_inode(struct inode *inode) +{ + kmem_cache_free(kvm_gmem_inode_cachep, KVM_GMEM_I(inode)); +} + static const struct super_operations kvm_gmem_super_operations = { .statfs = simple_statfs, + .alloc_inode = kvm_gmem_alloc_inode, + .destroy_inode = kvm_gmem_destroy_inode, + .free_inode = kvm_gmem_free_inode, }; static int kvm_gmem_init_fs_context(struct fs_context *fc) @@ -355,16 +390,33 @@ static struct file_operations kvm_gmem_fops = { .fallocate = kvm_gmem_fallocate, }; +static void kvm_gmem_init_inode(void *foo) +{ + struct kvm_gmem_inode_info *info = foo; + + inode_init_once(&info->vfs_inode); +} + +static void kvm_gmem_init_inodecache(void) +{ + kvm_gmem_inode_cachep = kmem_cache_create("kvm_gmem_inode_cache", + sizeof(struct kvm_gmem_inode_info), + 0, SLAB_ACCOUNT, + kvm_gmem_init_inode); +} + void kvm_gmem_init(struct module *module) { kvm_gmem_fops.owner = module; + kvm_gmem_init_inodecache(); kvm_gmem_init_mount(); } void kvm_gmem_exit(void) { kern_unmount(kvm_gmem_mnt); + kmem_cache_destroy(kvm_gmem_inode_cachep); } static int kvm_gmem_migrate_folio(struct address_space *mapping, From patchwork Tue Apr 8 11:24:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042854 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2040.outbound.protection.outlook.com [40.107.95.40]) (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 4025D2690FB; Tue, 8 Apr 2025 11:25:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.95.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111541; cv=fail; b=H00Y5kzQC/hRFwZNrwE2P5UurmjnFtL0B/jjeUOcIxh5Ta90t7hwdwtud6ffrd/H6rgp0fKCirrvtTzG0F1NqJnwWX5pH+gfR1g1lu/e6PPfbe8y4ezRnesOLqv0vgJ5kck3G4uJVuCMGqxIPOU3zEsbbQ38HP0vGldSDUHdr/Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111541; c=relaxed/simple; bh=KlbhwfQj76SQTmFRHL9h0n3H9mi1hP1ugCy/7dctdY0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dMbKPN8ziQjn46P5mtVUZ/oQ9JXEj7eG6hnZedXUf/R/Ljry2y0pP2NVt1sKfOzriT9LYErx9ZFndx+OroGgR1hvxV6bI7gj8Ye9QCYMPTaW5yukZAdh6o0QoYHPce1Ctz6U91JHVydzU4xtMD1KHpdF5X1UXI2hZCT5oxr9hTM= 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=5cgOQipR; arc=fail smtp.client-ip=40.107.95.40 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="5cgOQipR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VyQwAtaHsH7UxbE7pcai05Q0dxLOqCoxXZBQE5TvgczdaNsQ8WRDjHT03pWyCcS5fGQPWPxnxofeSNWJnW0FLw9uPxmdbXkPd/Pbtx6wL/N30WrRIL5XOHC7a+0zo0aKgfcTyU8Y2whavtc5tO6uu9rCcOzYRLSpwhEQ6HhTHZj/39GMCDdWURyarRqffRihWs3RwvofNsbHsbd1oArz8qf5O+oYwDrJzMuOSRPHfLZbes0/QM/wf2e+vQmjMQoOFtPR6KnzhDS9L/d8V8kchrKUYQOS4KhdG87jB+Na/qf+tHxv6sr+4tYv/65j8GyNikWDR32p8xD7YyZeoz3Etw== 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=mhMZrxcjsGJkAgw0vOyTGVNSoY0hcuonKzmboAwMaIE=; b=Jrj73AzbKIcZvHxyRZFHPNytBjBRrb44fmL89R2HnOdV/JRlYHUYM+4lB0Xee9Qwk17oPGzyEsvhiiNoKq2VA1QW4PVz8JP9blka8IIDUKAkN0qIXKMzVy5e6h5P6UeRLydyNFE+GsOlD3YqO4/4TZ1g3egBvT4cCh+7GEbh7IcRGKc+8EsLJiLUmmWHkXuHLCsoCoegBiEWiGt0RlOurHCi6BgkxIKtAyIirm/XFhvLWbOha8JveXQUsT+gBKwDzs5prGDP8qph2fs5GsGs1tMV2q74z3kUAiXWt1Bb0qL00gzmqWUvfwOxGoJaE8+OZGZ1Yf57NKtk2aKOdnhpyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=mhMZrxcjsGJkAgw0vOyTGVNSoY0hcuonKzmboAwMaIE=; b=5cgOQipRjXHDobchQrt4Sf8qzvyJySL72XW/mRzIiBJs1CvgPNys8cAugrhmwY6oOQAdwNIjUcsxBK/InGYI3ugR+ucgyLJdmAkwOqmF7+aauZb2SmKLMAU6sPTc5XxhufTk0iwrWPp6cx1Y8z0+ejsLkmPaqTueP+sXaUOvmzY= Received: from SA1PR02CA0016.namprd02.prod.outlook.com (2603:10b6:806:2cf::22) by DS2PR12MB9616.namprd12.prod.outlook.com (2603:10b6:8:275::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 11:25:37 +0000 Received: from SN1PEPF000397B3.namprd05.prod.outlook.com (2603:10b6:806:2cf:cafe::7f) by SA1PR02CA0016.outlook.office365.com (2603:10b6:806:2cf::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.34 via Frontend Transport; Tue, 8 Apr 2025 11:25:35 +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 SN1PEPF000397B3.mail.protection.outlook.com (10.167.248.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:35 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:25:27 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 7/8] KVM: guest_memfd: Enforce NUMA mempolicy using shared policy Date: Tue, 8 Apr 2025 11:24:01 +0000 Message-ID: <20250408112402.181574-8-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B3:EE_|DS2PR12MB9616:EE_ X-MS-Office365-Filtering-Correlation-Id: 6629e4c2-9548-4e13-9ebb-08dd7690150d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: kPDefmjBQkde96rR+qfs9BtiHpQgIB6VoajxD0Tc0XImDMLQ+x52FuDREEw33Uep88/wuDkfJsmve/njoCgWIVputCD58T4sCgpghDMPlTbG0l8Eeqf31YFUuAVOdcxLkwWfV/sj4478M3p0qdF6zaiKBu2f1SwoL9ufiKLUrcA2bAmOKvrmFE1eRCHCoo5fcH4GQzZ7rBxyIA2tjdIlV4Y71qi6JFOoTPes2sVBoDGxcjyOa32FusZ6Ee+0pr5PEHqCulpi2hod5m+sDXPjqW8dSOWxK4yjbkENf3r5gbrgxMm7a6r9E1KGsI1gqZzFF0F3hoXg4MZ96aBVkk0o4fwzl/kQ/80rBztvP70DWcNQTym4HilEJ+gMKFIQRXSOAB4etyn2jgAcDBVc6yY+DuU3p2gebZIs6kRBHqlkjJ/EjfnqQ6SQrk9zBvR7KGuuKndo2rgnGOMlOCQXe15IpjZv/hrIhF2rFxSgzaZhtfI9Q6onn5tt+Evd2+pvA0PDIQYIa+gioMrJG5Dif0JYAmrEes/pYzfBk1ViM6rbX3jatbCZjLUSfd9Xhb/aTilP7/J3fcYj+3FMIz2G3AvHqi+ycIJhubY55Sr1hiRfhUSzvcZriyRZAjkoghyxv2mBPAdxNNfSWIiuTTxUUAzE7Wn2fwY4zBXz26gguX1JntxdaL9lbIahgNNzPGrWp9Y+xUwdGpaj4Mf6iv3szanPdTbH4A3GhitWofUoSupXbjLa+8Q44nDtlXzFsvdEJ0Mw/67kpkEiQUMrZ0FhHK6VCVZvwMaBZDPVnPnZGxxmfB6EEqZIA4VM4nbFq9aZ8QxtSp4YERDeDCdV9vy9/+5z3nQZ1Fd1bXVC6CtDNoDEJ6pocszuYsrmsEp61jieN9ElXSt4JJz29gRDrEvVE4AnBqnrI5GGd5dq7j+/A06Rgvmi67L10KzVPnlhjt8omWQgzXLY/gK5N62dOiGGr2AyPPnFazHyh/woG0AP8ZtSoF+iP73G6z1ElDZOxBlFnwljLBQF308r+CETECmJPqbBbMrIfAfClKS3a3Yk5N5Dfn7ehPxKSzhGbTWdJzfICuZ3AaYTM84KFErYbxmtgbA2d8AH00VAM0Iz+2kaa/R8mJutfCHxnO9EcfC8EDUSluqrAbbx39Mk6vtyEiklCAjeGdk4vkyfkUwwq4Pjp1KVcAegjkDd3Dn3K20RqHMPVv4XMj4xBlg86nJHJ3Hwl1M+Owvz2UrcDITALkLoUlo7Bo9vR+gCnmwSP5Z7YjKUeRLpR9b5yP5/VShnnm3dRL+zkbh9nYWkVB2oZxcU5VMJl1tajSj6v8LUU1agOl9O3JL7x4SKNiYmvJxEP4gD7cEsnDcZcODgLxBTDFmYS0ZUVtLzpQUH0539ZELprICKr2ilAHazMh/Y0pkiyPu0aGKCH4thhToBqMIIzxUqDpn8xk+0RUeG4/4SvxV6P5+fS7OUIBYWNZdB+oRlkkLBC/2EmubBhloCZ0/NZJ+FRH6ETFg= 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)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:25:35.6435 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6629e4c2-9548-4e13-9ebb-08dd7690150d 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: SN1PEPF000397B3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR12MB9616 Previously, guest-memfd allocations followed local NUMA node id in absence of process mempolicy, resulting in arbitrary memory allocation. Moreover, mbind() couldn't be used since memory wasn't mapped to userspace in the VMM. Enable NUMA policy support by implementing vm_ops for guest-memfd mmap operation. This allows the VMM to map the memory and use mbind() to set the desired NUMA policy. The policy is stored in the inode structure via kvm_gmem_inode_info, as memory policy is a property of the memory (struct inode) itself. The policy is then retrieved via mpol_shared_policy_lookup() and passed to filemap_grab_folio_mpol() to ensure that allocations follow the specified memory policy. This enables the VMM to control guest memory NUMA placement by calling mbind() on the mapped memory regions, providing fine-grained control over guest memory allocation across NUMA nodes. The policy change only affect future allocations and does not migrate existing memory. This matches mbind(2)'s default behavior which affects only new allocations unless overridden with MPOL_MF_MOVE/MPOL_MF_MOVE_ALL flags, which are not supported for guest_memfd as it is unmovable. Suggested-by: David Hildenbrand Signed-off-by: Shivank Garg --- virt/kvm/guest_memfd.c | 75 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 0ccbb152483a..233d3fd5781c 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -19,6 +20,7 @@ struct kvm_gmem { }; struct kvm_gmem_inode_info { + struct shared_policy policy; struct inode vfs_inode; }; @@ -27,6 +29,9 @@ static inline struct kvm_gmem_inode_info *KVM_GMEM_I(struct inode *inode) return container_of(inode, struct kvm_gmem_inode_info, vfs_inode); } +static struct mempolicy *kvm_gmem_get_pgoff_policy(struct kvm_gmem_inode_info *info, + pgoff_t index); + /** * folio_file_pfn - like folio_file_page, but return a pfn. * @folio: The folio which contains this index. @@ -113,7 +118,24 @@ static int kvm_gmem_prepare_folio(struct kvm *kvm, struct kvm_memory_slot *slot, static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index) { /* TODO: Support huge pages. */ - return filemap_grab_folio(inode->i_mapping, index); + struct mempolicy *policy; + struct folio *folio; + + /* + * Fast-path: See if folio is already present in mapping to avoid + * policy_lookup. + */ + folio = __filemap_get_folio(inode->i_mapping, index, + FGP_LOCK | FGP_ACCESSED, 0); + if (!IS_ERR(folio)) + return folio; + + policy = kvm_gmem_get_pgoff_policy(KVM_GMEM_I(inode), index); + folio = filemap_grab_folio_mpol(inode->i_mapping, index, policy, + NO_INTERLEAVE_INDEX); + mpol_cond_put(policy); + + return folio; } static void kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t start, @@ -336,12 +358,14 @@ static struct inode *kvm_gmem_alloc_inode(struct super_block *sb) if (!info) return NULL; + mpol_shared_policy_init(&info->policy, NULL); + return &info->vfs_inode; } static void kvm_gmem_destroy_inode(struct inode *inode) { - + mpol_free_shared_policy(&KVM_GMEM_I(inode)->policy); } static void kvm_gmem_free_inode(struct inode *inode) @@ -384,7 +408,54 @@ static void kvm_gmem_init_mount(void) kvm_gmem_mnt->mnt_flags |= MNT_NOEXEC; } +#ifdef CONFIG_NUMA +static int kvm_gmem_set_policy(struct vm_area_struct *vma, struct mempolicy *mpol) +{ + struct inode *inode = file_inode(vma->vm_file); + + return mpol_set_shared_policy(&KVM_GMEM_I(inode)->policy, vma, mpol); +} + +static struct mempolicy *kvm_gmem_get_policy(struct vm_area_struct *vma, + unsigned long addr, pgoff_t *pgoff) +{ + struct inode *inode = file_inode(vma->vm_file); + + *pgoff = vma->vm_pgoff + ((addr - vma->vm_start) >> PAGE_SHIFT); + return mpol_shared_policy_lookup(&KVM_GMEM_I(inode)->policy, *pgoff); +} + +static struct mempolicy *kvm_gmem_get_pgoff_policy(struct kvm_gmem_inode_info *info, + pgoff_t index) +{ + struct mempolicy *mpol; + + mpol = mpol_shared_policy_lookup(&info->policy, index); + return mpol ? mpol : get_task_policy(current); +} +#else +static struct mempolicy *kvm_gmem_get_pgoff_policy(struct kvm_gmem_inode_info *info, + pgoff_t index) +{ + return NULL; +} +#endif /* CONFIG_NUMA */ + +static const struct vm_operations_struct kvm_gmem_vm_ops = { +#ifdef CONFIG_NUMA + .get_policy = kvm_gmem_get_policy, + .set_policy = kvm_gmem_set_policy, +#endif +}; + +static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma) +{ + vma->vm_ops = &kvm_gmem_vm_ops; + return 0; +} + static struct file_operations kvm_gmem_fops = { + .mmap = kvm_gmem_mmap, .open = generic_file_open, .release = kvm_gmem_release, .fallocate = kvm_gmem_fallocate, From patchwork Tue Apr 8 11:24:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042855 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2060.outbound.protection.outlook.com [40.107.92.60]) (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 07783269830; Tue, 8 Apr 2025 11:25:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111550; cv=fail; b=g+woaMcE7tcfpxAHniUOdXhCd0fZeIUMz+LgcYwCcuL2TICp6iWfRf5VhQ2QVuxUkJZI+DXGeRDOAw/QSyzRzYbqgqksH7du/VV4YpuG9JKdRZscFaRMIcL1fjLhL57Tlip9GYfhLTjZlu0ONH6TsBU349X92mBqtC02NpNA5EM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744111550; c=relaxed/simple; bh=Kz+P/RTCAV+IHH6jfCxgAC+39TqHYY/n/RIXpSndehc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KgPDz2kA49x/ziv1g0HjFB7d6n6AdMJrxVMRtQh2v96uRFP6SX6khVX5XSq8ScRQWnlRqNjieyJHEgh3l8+6osUL95gISpUdrdiHxz5o1Kj5EFPA2yx9/smZvA9Wfej/oxv+h6OPJJ3tam1LdvQKs2hypyhDCp5zBFzetle3mYo= 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=1nGzQi0K; arc=fail smtp.client-ip=40.107.92.60 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="1nGzQi0K" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UArTsph1PsEiFHUjDMC9vtoI7cOmg7RE7d+VPhwzuKHOf4FLoyj6Ajjc9tAWkub2QUJZIQst4P5h6HryZDEDY+qzWDDtRPQ9zftnZUwd9kMxVnDIeUxBP/+D+Oc4kvD6GuhZcNptZKcjBl3ZtyszI1/KeAGcptemx/s/RGlC4QC0BFNiW+bEJ6ujtFCrnRu1P6FC/bkJ5MZzgSOo6+yKEaLFgp8yoWhhohVmfTzx4qp2E5NG7dMLBc8VDPOFlPWls03YUpFZhcykHnYa/PCpARpFgjIx3ioHoT9jVdtVoBJXQZdA8l858MwMJ8A11KEGY6hhGVtyK+V/wZKIi34lCw== 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=AqM4P2Fn56kQQ99zKTO6kLMZqx/0D3d8nce8i2TLu+8=; b=FZlSdZWkdj60FrCNW16FUIwSZMhgpz7NPQVGliQTw8HSWz5FSQKu8HlKlWBniACMMiyZjXsDD61GlM8lizYPhvdYtxaodk12pMp8qLxlpbb71eRGOGIAsIh82Bs1oVtjJdZ4PwpddTm6f22yfsvc0PH/cKmw2v+WqLNuFLN8SdSWWG5PEMGtT/qG3ecP3aTs5L//PdNI+x2gWm5xun5rn5R1teqInz/G+YXa/x4kxnOxvWOwk42VxnR0+lr4HvHpLsJuGKaP7PXS9Wj1V0JQfXXvJH4hAnsqEcqlmlhl22fJb+qJyph0iXG+30sKG+rlGlJol/TCjAhzs8Ao6zG9EQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com 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=AqM4P2Fn56kQQ99zKTO6kLMZqx/0D3d8nce8i2TLu+8=; b=1nGzQi0KAXZsNOf9UuQTsndpC1vMq4naevXca07Ba1jUe/tffoGAu2P6UkekJB1Bsv79c9nfSt35ok7d0dhjo5xsDHYFCxBq0FPHkf/+2z2c2RCLklNIsTFL5FInE9+8Wjw0yA8Nf0dbwF6XiByEs2qVAzUUBopE1N9aPWNVUlE= Received: from PH7PR17CA0007.namprd17.prod.outlook.com (2603:10b6:510:324::18) by CY8PR12MB7220.namprd12.prod.outlook.com (2603:10b6:930:58::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8583.46; Tue, 8 Apr 2025 11:25:44 +0000 Received: from SN1PEPF000397B1.namprd05.prod.outlook.com (2603:10b6:510:324:cafe::4d) by PH7PR17CA0007.outlook.office365.com (2603:10b6:510:324::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.35 via Frontend Transport; Tue, 8 Apr 2025 11:25: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 SN1PEPF000397B1.mail.protection.outlook.com (10.167.248.55) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:44 +0000 Received: from kaveri.amd.com (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; Tue, 8 Apr 2025 06:25:35 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 8/8] KVM: guest_memfd: selftests: Add tests for mmap and NUMA policy support Date: Tue, 8 Apr 2025 11:24:02 +0000 Message-ID: <20250408112402.181574-9-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B1:EE_|CY8PR12MB7220:EE_ X-MS-Office365-Filtering-Correlation-Id: 90159200-b307-4202-552b-08dd76901a12 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|7416014|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: 44SCRYxL9gRlx7xh3pkZTbvLTebxamSVUDncf6nm0aytM2Ntvrtb9373TGIRevym4zNAuN19Sdkh/xTgZVREV2uXobK2nu62HUWmtkwg7/brbsjztqz7mvdnT1obQdETrpbAtbG/j1m8wKtOO4EhCY8Uitz+vQIKrDPuBbEmKTx5ZqzqOvEy0YRetvAzqcEMDGxUFFyygOsfl6EI/nUNgEUzLxQipWQVmuRwq6OQXgmgwpOxQupqi4GlAdnLVEAJtw9D7lSQGLHgZ8D/GbGqcHPujcbNdCJ0uFWDmpg4FbIWSs+K/ETYJEN8vGiuUcJRb8xVt/qKYDLBgEo+GFiirmOXyLLf2fJ14z54DGPGDjLiafsaBkk6tL8VKcMBbjAjBxvydzIYVF1wwT5rarb3Hs6s7p26ZqLZUhYfci+7A0e26oNwNVKwd/L0u2U4qy728yPi3gJrpRfw2e/BiC3K9S219DGlelkD8cKttBAx+t1dKi1UG4dwIsIo7q6UEH5LAdBH3IOQ8Y12mtiuLaW7pUXwuCbki3A2b4qqhVH6+ytcdrzI0X9zRYDjvvxEw0uTFIRl/QOOr/z0xixNqZq5/ZUAXDvzTSRDMdcitqCkGr8Y31FVS7+9quQvkDRoGIrneMjKyRpchcFrRnH1h2NmJnJ9x6bgyHAY06akg79XnikyWPAyEM1m+HMvPLArFeSLW4oYbVqq8fFXr5qRdkWorSaqNdktpBcJagqjEewQ1SwE4uoHMuLZGie28v0rCdlV9QSLfTs1O9KwvKoW+5UdA1ACrA0zAuDCDlZqt8T7YR2x53OzP7Sm00qlS120hDv1IuLKK6jEHWr4owKO2yGvZfOIEBqlEaznlxCGyQspzL2HvMLKMdaG3tV8gROndOYX/cxBzcoKGIsbF7/0JybQcOWkLF2jBXcgiWdcGV4vzgZHLsPt40WQq7VCo/YpBdK7vF3xBmdRsaJzQJG6yk+aVTWMTQRLwfBo0bKmZsir5jwi0/6EwaAdyXO7iHRgkAbj9gMjwsUubW3kQRXPJ92UYyyCy0IkXRO5OtOeDtPKSROsdFO5xnVPemBONesYMlrd8JfLmJclFTM+6X6mvJFrAf6nw7TH/uEMVPTkKffsx8KtRLFlz8wHFBeObNT8QLHbOAoMAlDQ/FKZjXw2erYQMqtgMEmN8V+4aSIaya/Ic/1HQjJaNLiNB4kNz55d0BmBaSvzrGotOV6KVuVQ7Ur4clYWRNa7d4kwj4JXcInPBW/qEliASzr8cvtgJJf7lirmidI59gqpC1NNOE6RExt+2cd+klvmOXqLoSJYvV+ZT2aCVozE/49iGLxrIVnhRGl4EVNURPA5PuwSFIhCmlJbMP3OVCKNaZRY2yPbAkPrCMe2wmegTNsTD3DdjVMsRKpME4YBBGN/YYFlzVH2lwlRR8q+RPSFwIlw/fEBtBbijrAWodolq8P5cq9g9IwLp1VSfo8iGbpa24tN528BEMpQeDPCXHr3GHSpLVmypScd4Z1yW7usowTxzZwqshLHyOFg 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)(7416014)(376014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:25:44.0630 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 90159200-b307-4202-552b-08dd76901a12 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: SN1PEPF000397B1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7220 Add tests for memory mapping and NUMA memory policy binding in guest_memfd. This extends the existing selftests by adding proper validation for: - Basic mmap() functionality - KVM GMEM set_policy and get_policy() vm_ops functionality using mbind() and get_mempolicy() - NUMA policy application before and after memory allocation These tests help ensure NUMA support for guest_memfd works correctly. Signed-off-by: Shivank Garg --- .../testing/selftests/kvm/guest_memfd_test.c | 86 ++++++++++++++++++- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index ce687f8d248f..2af6d0d8f091 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -13,9 +13,11 @@ #include #include +#include #include #include #include +#include #include "kvm_util.h" #include "test_util.h" @@ -34,12 +36,86 @@ static void test_file_read_write(int fd) "pwrite on a guest_mem fd should fail"); } -static void test_mmap(int fd, size_t page_size) +static void test_mmap(int fd, size_t page_size, size_t total_size) { char *mem; - mem = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - TEST_ASSERT_EQ(mem, MAP_FAILED); + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmap should succeed"); + TEST_ASSERT(munmap(mem, total_size) == 0, "munmap should succeed"); +} + +static void test_mbind(int fd, size_t page_size, size_t total_size) +{ + unsigned long nodemask = 1; /* nid: 0 */ + unsigned long maxnode = 8; + unsigned long get_nodemask; + int get_policy; + void *mem; + int ret; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmap for mbind test should succeed"); + + /* Test MPOL_INTERLEAVE policy */ + ret = syscall(__NR_mbind, mem, page_size * 2, MPOL_INTERLEAVE, + &nodemask, maxnode, 0); + TEST_ASSERT(!ret, "mbind with INTERLEAVE to node 0 should succeed"); + ret = syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy == MPOL_INTERLEAVE && get_nodemask == nodemask, + "Policy should be MPOL_INTERLEAVE and nodes match"); + + /* Test basic MPOL_BIND policy */ + ret = syscall(__NR_mbind, mem + page_size * 2, page_size * 2, MPOL_BIND, + &nodemask, maxnode, 0); + TEST_ASSERT(!ret, "mbind with MPOL_BIND to node 0 should succeed"); + ret = syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem + page_size * 2, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy == MPOL_BIND && get_nodemask == nodemask, + "Policy should be MPOL_BIND and nodes match"); + + /* Test MPOL_DEFAULT policy */ + ret = syscall(__NR_mbind, mem, total_size, MPOL_DEFAULT, NULL, 0, 0); + TEST_ASSERT(!ret, "mbind with MPOL_DEFAULT should succeed"); + ret = syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy == MPOL_DEFAULT && get_nodemask == 0, + "Policy should be MPOL_DEFAULT and nodes zero"); + + /* Test with invalid policy */ + ret = syscall(__NR_mbind, mem, page_size, 999, &nodemask, maxnode, 0); + TEST_ASSERT(ret == -1 && errno == EINVAL, + "mbind with invalid policy should fail with EINVAL"); + + TEST_ASSERT(munmap(mem, total_size) == 0, "munmap should succeed"); +} + +static void test_numa_allocation(int fd, size_t page_size, size_t total_size) +{ + unsigned long nodemask = 1; /* Node 0 */ + unsigned long maxnode = 8; + void *mem; + int ret; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmap should succeed"); + + /* Set NUMA policy after allocation */ + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE, 0, page_size * 2); + TEST_ASSERT(!ret, "fallocate with aligned offset and size should succeed"); + ret = syscall(__NR_mbind, mem, page_size * 2, MPOL_BIND, &nodemask, + maxnode, 0); + TEST_ASSERT(!ret, "mbind should succeed"); + + /* Set NUMA policy before allocation */ + ret = syscall(__NR_mbind, mem + page_size * 2, page_size, MPOL_BIND, + &nodemask, maxnode, 0); + TEST_ASSERT(!ret, "mbind should succeed"); + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE, page_size * 2, page_size * 2); + TEST_ASSERT(!ret, "fallocate with aligned offset and size should succeed"); + + TEST_ASSERT(munmap(mem, total_size) == 0, "munmap should succeed"); } static void test_file_size(int fd, size_t page_size, size_t total_size) @@ -190,7 +266,9 @@ int main(int argc, char *argv[]) fd = vm_create_guest_memfd(vm, total_size, 0); test_file_read_write(fd); - test_mmap(fd, page_size); + test_mmap(fd, page_size, total_size); + test_mbind(fd, page_size, total_size); + test_numa_allocation(fd, page_size, total_size); test_file_size(fd, page_size, total_size); test_fallocate(fd, page_size, total_size); test_invalid_punch_hole(fd, page_size, total_size);