From patchwork Wed Feb 26 08:25:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 13991767 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6430FC021B8 for ; Wed, 26 Feb 2025 08:27:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E578428000B; Wed, 26 Feb 2025 03:27:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DE005280007; Wed, 26 Feb 2025 03:27:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C0AE928000B; Wed, 26 Feb 2025 03:27:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 9E94E280007 for ; Wed, 26 Feb 2025 03:27:55 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 3039E1A0D33 for ; Wed, 26 Feb 2025 08:27:55 +0000 (UTC) X-FDA: 83161417710.01.503EDAB Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2083.outbound.protection.outlook.com [40.107.243.83]) by imf20.hostedemail.com (Postfix) with ESMTP id 4BD8E1C0006 for ; Wed, 26 Feb 2025 08:27:52 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b="p/jmIbP5"; spf=pass (imf20.hostedemail.com: domain of shivankg@amd.com designates 40.107.243.83 as permitted sender) smtp.mailfrom=shivankg@amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=quarantine) header.from=amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740558472; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6vivwxVzhYXSXRbnUtlPS3+5iB8vM+0LkXpFumT7W7o=; b=wkY/G1Hbhqa59LyPftgn+r7gPxF559je/jTrtTYwEqPazqhdUn3y7S/9GI8YpiOPL8nfWb 32iFvYTQm0kudNaHr/LenSHvOGFzQViT9TXUIWpgS6ezbWNTC3PCTTxXyAFczGxtzoFtJt abkMPoW5Stirn3U0q8CCCvXcJbjd4MM= ARC-Authentication-Results: i=2; imf20.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b="p/jmIbP5"; spf=pass (imf20.hostedemail.com: domain of shivankg@amd.com designates 40.107.243.83 as permitted sender) smtp.mailfrom=shivankg@amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=quarantine) header.from=amd.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740558472; a=rsa-sha256; cv=pass; b=Yy/FQ1kpVHodf1NMDHUN2pih7qJh4tscTsgpw+GtPwvovqFZDePmlbUI0evyp8XfOA+1zl 1ZIs87uFPw7+vSMjM0/AHO+K4yFg/CmduB5S0j/M0VsUXwqMXv21droHJrRQeZr/d21MwS j41zJDztoLmQwMB//LObw7tA1Eoyz7k= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V2v5zHqb079Ix0KiABkynRoWvIVBh1bnAHAkibQNbWkqzyay1lqWsSk9jwXXe8FhQRKQAEm0K7mLDNMYmwI1BEvuwyYLNHrsT6pVp5osebFRC3kU3Frg+f5hWJNuIYvvZfBkgEI9yUyb4VoGm/g+TKSdFjkpCOoc2G+iOf1aBOKzrX1JGHXQayyv1RTCZgsHI2PwjDOU2Z6vpfb3SmiHJ8vQUwJpoNeFVyuw6BhW8xxefng03tuv78CFqpKJv3qN2dNf188QczxYOeb6j1BOhqj8sAJAkPGd6tvUR+pBUeVuPg7PuL90CUEgxxAJqm+nuoRJ+ueMuNKFirbiSsWKOg== 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=6vivwxVzhYXSXRbnUtlPS3+5iB8vM+0LkXpFumT7W7o=; b=pGZfyCnrIkEEn3XFApPhU1Nu8v1ZbH30DLmY2eU8tWwemXbADgjPAaLJHfkPPdarFgJue85O7WbERIOY7OKDsgFioUCHuUdPgpFvOh7CqquML+VrV0rpTMk+TSz5rIE4Aaf4LHX/fbQOrHJodNoWXr1nzky9nfLSacNNyx5OXF6yXci7NP+juZE3vvIdH9XTMoQUyj4H+arzEfyWGRzuINvavhkR2eLkNlJqJAzH6IWA8G9zB/Ji7XyvRUTwmyTaw5NhbFjkML3BMBL2e+dy063SEGzzgZN/RlYl/bOQs5jwrihtJuWC/UOxFaVEIMc7L4znYl/9FiHGLWI8Rdf4Ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux-foundation.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6vivwxVzhYXSXRbnUtlPS3+5iB8vM+0LkXpFumT7W7o=; b=p/jmIbP5yWs7d4BnYQtxShIHVyFhmMUBSAbCC4M6ThkeIfBlVduJD4pZTFHynPTbgRRrOiob8XU6wZba5lITOb+i43F+Dkiev3U5tfvUjzeKS459UDwxpOvuRgGFlYyOocBTS0aSC3rtLfhQFpapjvNEVW3tSg+RIAG21t3sC1g= Received: from PH7P220CA0078.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:32c::34) by CH2PR12MB9518.namprd12.prod.outlook.com (2603:10b6:610:27e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.20; Wed, 26 Feb 2025 08:27:48 +0000 Received: from CO1PEPF000044FA.namprd21.prod.outlook.com (2603:10b6:510:32c:cafe::2d) by PH7P220CA0078.outlook.office365.com (2603:10b6:510:32c::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.21 via Frontend Transport; Wed, 26 Feb 2025 08:27:47 +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 CO1PEPF000044FA.mail.protection.outlook.com (10.167.241.200) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8511.0 via Frontend Transport; Wed, 26 Feb 2025 08:27:47 +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; Wed, 26 Feb 2025 02:27:41 -0600 From: Shivank Garg To: , , CC: , , , , , , , , , , , , , , , , , Subject: [PATCH v6 1/5] mm/filemap: add mempolicy support to the filemap layer Date: Wed, 26 Feb 2025 08:25:45 +0000 Message-ID: <20250226082549.6034-2-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250226082549.6034-1-shivankg@amd.com> References: <20250226082549.6034-1-shivankg@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] 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: CO1PEPF000044FA:EE_|CH2PR12MB9518:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f32f042-c63d-4278-4a76-08dd563f739a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: 9WnNcDWIDLhtB8Ya1QrIVrqIAXyroWG023ehpP1pzUWL9NFldgFANRttGmd7N4mwn0czXOyLsR3lxnKwAgnDoLnc9/bagqgtCXGbaeEy2tTGqRwADLFuUiBwqH2DSDXeWVTGEUXLlJDWv1RVWQnAIdXojsB7t+9/anT4LvmvTM2XgOlUylEYjEywhsh/Tx0v+juXy85havCPLz3k55MGozCtrxBFf9PEQ+kFuyXY3xgBeSIQGyRCP3SxykUrccCKF5KV+7fsrbhzkhTzia4AT6lVz5wBjb8yxpslTxkjrLSx5fOjMKyZr3Z8dpT6Xijszct1mao/Yb7p4YXzKJ22h+K3BKRLUGAVZnb/GFNygxED9FqWMZ8+IXVzknvAXLWiO7BZ+kghtWRP2hslPdrdQ9n9ly6COJuTUnvvXA/JBbMEiJ6XxeEpg8yTmKmxqXYk5ZJRZPrau2v6Mlpkp6BrEi9QJ0XMoberoJ9oKGirif5JAJ0XDWFvboWq06FNrjIgNwqn/ekm1YdZ5xDyUB6WGoJUW5g7xwA2mt+0GEnl2fzv/yBoqtefQRR/cKLJwYSScftyx6Wx5Vt+cLgLbqTK6y2CcIXExuuughEsVpy3If5hYe8xbCrGzKex9ueiV7tmtOAPj+isNYMfaRW2r2oVv9iDc8Dgn+W1OWiHZithwTDZqBfJSBmP+Hzgw0OBtVEerVppeKDnrwVxumh7VoBGZ3MGleZpo2WETHzYVD9idsMNeABJ3IZdfoHdiU9um8lED2oHv15j7DXa+sumgeyt7emkVOOtp9y1uPHzQTo1GjzgSW3lF2s7IrekS1aUELpco4yUOGhdigRqUYrOaGoekGZYtnhruU6+w1+ljk58hAZo7D1k0M7jeTUZNKl8w8Yd1GIFkSpoD2qfkM5PK8VAJk/mlNnWj4hI/RJ3Xgiacb69FtJbAt11Rxlx3b59n82glzf6S4Coxa/ha6Vk3AIzqeMSgzCqwT+A2rjuYuqJY3mcJ0uAtyZzH2sDYavv3l4OpQKZXPJ1Xt60HZhBh5cCIQITi/93v48f+oKCJfE2w+TG+Xys4wy7UT1Siy1CO83W71Cn5sLb6seD1L+P/HBgdu69qUGqj8kcfp9CdsKS4DZ1p5m7XZWB5m1g9DNJPopRWFirRovY/4zE6ySGmB2vD33lYAhlK7iujqjUiXB8svljXr+o582yQE7BeXOOYaymQj2qi+9yNsAOOgLwa39T6GLd5DY0hqgI3W8y1hsZEV9PhjP6V3DMgkz01fGeTEi+nlTOYS2yxCIzs1NW35INSBA7Uzu69qU4MdJ4Ird18d9KtVTPF/mQaNnT0PB8V5ip7uYjR92/SU1VGQJfPEpPHZuQg34pEfWDQSAIQtNk7OQ1Xw+7EDgmiGgGapYVga4IDpR7PknojvkM2ogDSsShhpYriXJb9pk+gxFNZSrJeB2mVLV7cWr3mT/WdsAtBS2gWf8l9lzRgb0i2gsmWopmfB+dxjzfM8VrU+1I6oTonp8= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2025 08:27:47.7335 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0f32f042-c63d-4278-4a76-08dd563f739a 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: CO1PEPF000044FA.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB9518 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 4BD8E1C0006 X-Stat-Signature: a4nhkf1kkyw6h9bwmp9bmucogpf4frpp X-HE-Tag: 1740558472-591764 X-HE-Meta: U2FsdGVkX18DNx6MB0059MW+Nb40HLirfSFeBsU/q4rbeb9KxFFobXkPRQ+tpQvcczRpLsXeJnmr6tUbAZgV/Y2XQgmgsoB+/3E9+dzro+v9/x88YxPS3Fb6ceGmBbZXjKID7mFDTVnZUSm4Dtqp54aL51OQUiLNT871w+kPBjV2uibbrWJXndipOOPgaXzYZ09K8GiFEU3D8akuU93At37V7J12B1EjzysoW8kkTLpan1EX4czYXQqtbwiim5+A8KSichB86Wp0XxyhVL4lChroS4USRTs12BDgFuh3wT1FDW6/6ndULccQ2RGnRl1zd4uyWwT75EJDecsnbExaJdpk7WGvy4/Dp+kkxV1ctM43xawTxDHX4jxJmeh+ZExibd/j6ANngQ3L86WuLFu8hhDh7SvJdW+92+9Rwf0NLtKhDiIXCFz9B97EdsCxU85edxToutzvT7XSo3ZF+pmLqeu5HOyHzX8cDiRB674cdFryj3dkkQUSDRQX2RPrW/d8OVAm5RXQqXHtJx90bH9UIyj+PKN2gmXBDEKycZ9fUg+OX213oDvlQoC7bxWzcXbFRwROyDy9tTv/Xhb5vPq65Ho9hU4xWOsjn8xm2YMqSEnQxp7yKI5DPprUM8LRgT2fvaamST4VMWdxS2L6r+BFyBHVTw9ScNdcDGtPvQrL7q8iYG/p28z6cG9b/jCoY9lChUh2zWqIBySD/pUMN/YWX1EJIJGwhH4CAov/NO9klExSQ6gYCHxaSL4kA5xsJ684mbUrP9xLb4ehTdzTK1SD3BJJl1rR0xxQJ8Ru9k96Bm5Rba3TcJ/V/oN9BOuTZs5cG6Rpfzyw7NnOfl+cYD/OC9ofQke7Bx35w/X2qa5LF0W0GAiMhhhAX0Dz+/fDpZetLkOtx0j7oUAE9bxDpfEtBweU3BO4A8MGrnRjIje5ipE0ft6Rd2odxELDG8DXIxW240i9ZH/QRj26j8cVD5j XZ7pabeX 8AkXcQoLTjs+YiRtanrYn8JeqMWqoh+y5EmtYxF2j4PGye1oy3t2mNyNvLq+gswLnMcsYaQzkNGVII80Vq61bppIcRvAVqlsLhGBt1Z+kzBjPOeW4Fk+BvP5oJ3jhOx6KLh4HZNmXruZLRa31fXPsrCy/URD7NFY7YL9JB04A/D15OpKpLyuGLm3AkPUSCVRhzWb9oCmFXv5QckIEyTg4tCqh/iOEKwWn1ebGwWbOq4A4ZjCh4jqYNDG8B50w+WrIDQzNTXghPWx/7RHzjKIVdYpliYaIX9rIRS7YNMwUxWvKP1kgZEQanA178p3+qIAQ6cclHC11Tg7Nc+XKztz88iV8wI23EhIWL8NXg9ll818MfTgvg8vjtZQ1dHuFEocbue7p2jxpz6WDlHoOGWo7SdxIDt/Mxa5s+bPntaVk5CZ6ehyHOVEQislfJiHF86ObIx6wIU4t0EYXSBEA8BZHJQNJXemmJB82n33EmTelKKh7C/dd/4PtBD2lVA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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 | 39 +++++++++++++++++++++++++++++++++++++++ mm/filemap.c | 30 +++++++++++++++++++++++++----- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 47bfc6b1b632..f480b3b29113 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -662,15 +662,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); #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) +{ + 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) { @@ -762,6 +771,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); struct page *pagecache_get_page(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp); @@ -820,6 +831,34 @@ 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. + * + * 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) +{ + return __filemap_get_folio_mpol(mapping, index, + FGP_LOCK | FGP_ACCESSED | FGP_CREAT, + mapping_gfp_mask(mapping), mpol); +} +#else +static inline struct folio *filemap_grab_folio_mpol(struct address_space *mapping, + pgoff_t index, struct mempolicy *mpol) +{ + 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 804d7365680c..9abb20c4d705 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1001,11 +1001,17 @@ int filemap_add_folio(struct address_space *mapping, struct folio *folio, EXPORT_SYMBOL_GPL(filemap_add_folio); #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) { int n; struct folio *folio; + if (mpol) + return folio_alloc_mpol_noprof(gfp, order, mpol, + NO_INTERLEAVE_INDEX, + numa_node_id()); + if (cpuset_do_page_mem_spread()) { unsigned int cpuset_mems_cookie; do { @@ -1018,6 +1024,12 @@ struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order) } return folio_alloc_noprof(gfp, order); } +EXPORT_SYMBOL(filemap_alloc_folio_mpol_noprof); + +struct folio *filemap_alloc_folio_noprof(gfp_t gfp, unsigned int order) +{ + return filemap_alloc_folio_mpol_noprof(gfp, order, NULL); +} EXPORT_SYMBOL(filemap_alloc_folio_noprof); #endif @@ -1881,11 +1893,12 @@ 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. * * Looks up the page cache entry at @mapping & @index. * @@ -1896,8 +1909,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) { struct folio *folio; @@ -1967,7 +1980,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); if (!folio) continue; @@ -2003,6 +2016,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); +} EXPORT_SYMBOL(__filemap_get_folio); static inline struct folio *find_get_entry(struct xa_state *xas, pgoff_t max, From patchwork Wed Feb 26 08:25:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 13991768 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A68B2C021B8 for ; Wed, 26 Feb 2025 08:28:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 35BC728000C; Wed, 26 Feb 2025 03:28:00 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2E50D280007; Wed, 26 Feb 2025 03:28:00 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 10FF728000C; Wed, 26 Feb 2025 03:28:00 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id E3248280007 for ; Wed, 26 Feb 2025 03:27:59 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9872952915 for ; Wed, 26 Feb 2025 08:27:59 +0000 (UTC) X-FDA: 83161417878.02.C8C76E4 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2082.outbound.protection.outlook.com [40.107.92.82]) by imf15.hostedemail.com (Postfix) with ESMTP id AB553A000A for ; Wed, 26 Feb 2025 08:27:56 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=FAEHjlKB; spf=pass (imf15.hostedemail.com: domain of shivankg@amd.com designates 40.107.92.82 as permitted sender) smtp.mailfrom=shivankg@amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=quarantine) header.from=amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740558476; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Nqb0jtY+YBE8UTi1L4MtyrkH6UifbjkFhzWBlcaw9g8=; b=IO/i10wHNZkv69lgRN6fOVrb1XDLBxIDi4bF6e1rlcf/LilQGmaoWg9f6hqIM/ca4h7W/C jzeIaMGnPnOuV9mdWLJqQ62j+BvGJkZS7B36YPTvLaz39RcL1LhZhvSH8aipcEr7SZh43r dSAlziDeB1TnlSfSyB9hpksCF3g2CsY= ARC-Authentication-Results: i=2; imf15.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=FAEHjlKB; spf=pass (imf15.hostedemail.com: domain of shivankg@amd.com designates 40.107.92.82 as permitted sender) smtp.mailfrom=shivankg@amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=quarantine) header.from=amd.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740558476; a=rsa-sha256; cv=pass; b=Yq+w6QZM5+BuxMDIIkh9E7sLhi8AKiaQt0dZrBVBPgNHhLP2iQztcZQjBBfNFEtba7TEFx heytaMJSnCayLFXabpa4j59+fRHmtaggHG4d8yFYKHBxfPx1ajPs4shbLtqU9v2Woi+dtM KjksJqpQFtUG9LJ8lLSsUK2gQG9HcX4= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XACF9FbezJZarYhSZa0FyrJz9c4AgC5cohR2ZC9f3lWyyYNHg+XGaWEeUh0nRuImV1jZ+6oRM8JQgFFQ5zLwq6kFNhY39tUdAMyJ4lZmWYwUpz2OlE6Md7nlXCPdzuGbMHq6tDS98LTBBzSChRdooS6Qv+Ona/yhF06IyeHFBr20csyBcoBGRPSAeAHGywnBO7D+zG18EHCkgm94Gx3P8DhsgEJUW7PrtI7DdqDB3WkbMciIiOfNhsaiV6eFGkFTxzcruEDAmefxUkdmBZv7KrO8kIDvQlxbN2nTkNl0ZoYUX2YZJG6fMP8SFD2KPXxb3J98POfG3Z5iIDBG4djI2A== 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=Nqb0jtY+YBE8UTi1L4MtyrkH6UifbjkFhzWBlcaw9g8=; b=D7/J6L5i5gLyG5hpjexOiDYl4dz2lUU6JdI4mIs5+WQStxq95y3yBkJ5QEUDsGd+apbm2fyuTFAJGucnYGKDv8l4am14hq9w3096jS8wW5B0eC89F7qkhnGfX025T/0s311rItV4YXYljjDc2gND35PxCDJdlnRbZS//R2zIExGcVLRwbp+4h4zOzQ8IpMWnVaBEEFiiHdAC4CT5VEIUSuWeVPcw2ih6TDgD6EHduKxBFS1zNEs+WgnaXmar8BEGgGRmCITC1Vc8m7deBiuhiiMUji9Ec4lRoWbl/O+lFK6G7kIyClFuulR+uTz1/QfPeDkkdFvTPe8zqiu9v1P8+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux-foundation.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nqb0jtY+YBE8UTi1L4MtyrkH6UifbjkFhzWBlcaw9g8=; b=FAEHjlKB1AwP69pHoIRcRIBdVIXbLZAg2PWYtVDp2IUmCyPk/O31HhZ78K6zBTjrAhhTUQ9fACaoERtbqX97OElAmPcevFTWpuCSgy9sB+Ai7WStn826oAHlps368OR9zGoCZU17DxGf8s9rQLzJu41RgS+OZhNq19QmRaH2JKI= Received: from MW4PR03CA0012.namprd03.prod.outlook.com (2603:10b6:303:8f::17) by IA1PR12MB9522.namprd12.prod.outlook.com (2603:10b6:208:594::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.19; Wed, 26 Feb 2025 08:27:54 +0000 Received: from CO1PEPF000044FD.namprd21.prod.outlook.com (2603:10b6:303:8f:cafe::9b) by MW4PR03CA0012.outlook.office365.com (2603:10b6:303:8f::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.19 via Frontend Transport; Wed, 26 Feb 2025 08:27:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by CO1PEPF000044FD.mail.protection.outlook.com (10.167.241.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8511.0 via Frontend Transport; Wed, 26 Feb 2025 08:27: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; Wed, 26 Feb 2025 02:27:46 -0600 From: Shivank Garg To: , , CC: , , , , , , , , , , , , , , , , , Subject: [PATCH v6 2/5] mm/mempolicy: export memory policy symbols Date: Wed, 26 Feb 2025 08:25:46 +0000 Message-ID: <20250226082549.6034-3-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250226082549.6034-1-shivankg@amd.com> References: <20250226082549.6034-1-shivankg@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] 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: CO1PEPF000044FD:EE_|IA1PR12MB9522:EE_ X-MS-Office365-Filtering-Correlation-Id: 9a3d053b-c0c1-4144-8e24-08dd563f76f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|36860700013|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: vPqJpuzKhP4iUmzxKcQPW2r0kRf12n/4B/ckcwliG9SebnPTf94JNqTcDGnI5UfRXm/JzDjCWax0G7qdRzb1m4KR9+bWnLhi8/lFsWK51VDWKlnPyZ8G6JaZZ6B1JE4vAEVdmqjc6n0ZgrBhOywjTwzzJYUeHrZC4c/INXvC5u50Tjc8jynqpVfFhstFBDwDohV2T+RAAT4I1rZDnfTJ/rWRUtNiim4GUJXIGeVBDVIM7BbdloCRy7NGHHYWOfnYU/r84kaK+tfSZSThnDTYRLT2KRZsIdoBqzmFr6szC5A5uXSMyog+mo8lSJDh+9lXIKaFm8Ygs5ihtzuvvdrzKUwPHp1vX8Kk3EIYfmayoxBDdnnndL9g6qwvmPa4Y4SSXKdbfZ6kw4YoEAHIzUzcjnZnFD2upfruMdrLF3TKWT5d5MoY1/xf6GCM5EX8nPiWmQ3KCaWbzBB7gfSDT01KBo8bK84L5XlEEb7tZMwqGNJpIBhtHdOGfXlWBi3DRJV/A0OLNMlZRDkThnOuJto6Wzw+npEPSXbeOZi3+0dCFxoLXGRhbLgkcWVdeWui3H00kcz77IU/dzM53xolfEJcguOilHXc2271nnJx/f0R0AcSH7d4XqIE6eO3ShK13mlU7adBEVOI0S/PXaLXVKI9WUiJvBOfcv0DVD4S/6UTorN3qGxPNDrt9hMSJElAhyxakZxLLya9peR2zaRBwlwBE8V9C68YojpZhPHo+rKCOq7bBL/UH+sUh95G8GxfyKflzDNfJ+e1tgvwtKlP7FgI+dzoP2Uj3tbAi5jfFp/xQX76IVKWNY2rWiwUt5XbUBfEgjd1kt32jVAtNOr2alzU9R8binVSkjYY3MvQsQXl/Ir8HCat6KdyueDaVTQvy8z9T0s/Ug17bQaCBtVdOngmgw9pYj9rNWvkMFpSdQUfCd3Z6iH/+4ox9ejUge93D/OZ47WAaDotDj3NM8Slt1/wNTkeUUvQ8R47k0KVwzPDlC52fMKle5AD3XgZuFSUez5m1sj02XruugzN+ay6GGmYOlfhij0sFyY48/PUFR/F2xsFmRPpfHWUPVSs5FBH5cmhmSVQvR0B8Q4PSsTUW6tK4t5n13mZ7Kw9oM0YgP7/23BrL42vNeEFO6J/KeZA8WOy19nUaez78aAfkBJHZ0g8OW8ONafUWl/t96ZWzjTkzXCfJJinLgI1pC9pHx86+5ceJ588PkZV86IbHyyz1rrn8XPMVVWFS2qvgFZPH8iiyIt44GymGQaxpMekaFcWAHxXssm/k+7i4HXaYKDd4DKS4UOmp+CpOvrk9w/RIVy3kg0kqIQfHPBKNgYp3dd8hjDAZAhD97+ERwgo0tsVELpklwvF+IpTBz+H8aTkLgKC0HFaGqxzQYkSWKFOxmuIrrUhvF191p+LM3LAa67uVqTjISvn02mqiDhgdN6w9RCuYJcmtF+HSoIPqZwfpvUUWqHCddRNJ+E1+nBcI3D6haeComepGyNHdiW3+HGeHCGonag= 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)(36860700013)(82310400026)(376014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2025 08:27:53.3557 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9a3d053b-c0c1-4144-8e24-08dd563f76f6 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: CO1PEPF000044FD.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB9522 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: AB553A000A X-Stat-Signature: ntuxhyqxqooaec7517e19j7w6t7xr7in X-HE-Tag: 1740558476-28208 X-HE-Meta: U2FsdGVkX1+/PPvNiKSj9tI2h/6+uykn4/scuVMy7n3m8SQze0EIsG3Y1rE7hjab1EbYmgKzTn5As/b1bsm7yV3k+oQ+N6FhJ9mZo2cqp/jW372xmXPDngOgJOnkYdeDMw5/jhj1mfrDCUXOFsru7IyACuYmUEX76zdGa/+WJTLwYHgvKf8FoXIWx+Nw1ZF55YSFuWd7dMIZeEhL2DLvPLcFMkOs7YLDYxjEd9NN4M0JZH4ismPTxkPd8e0WvxaTYrU+v3BpySnEyTJLb7piy7Kr2sttRtXHF561FgQy0O8WWAZYhrYzdicFN4D0oiX75AruT8iklEqMxc5sF+uzIWqnuDg3JMW1HuJW94aczE6NMbWF+fjoaDKYuhY/6xRDW998GNT5T8OF2uxjWu7AxFrobfUCo1TvQn/NuwoQ2jF/b4ATKVedHjJZw822CUN7s9uC/rCEBfnaQ1XDd42COaR2CpsXpZfiJve7PUYREM+BfMFRJmNcX0mP6dkTkJXQTBE/zUF55E1uFW4bzHxP5+hyu4JRTqcuM+K7sv4Pgcs6GXGq/a/c8L+b7MBapfxwfKXovXzseWwgwyCn2rqQ2Cf//9jDeD8424+HeGTzzjosyHUpj59EhPUbyzqDeDt2CMXvpMtipln85XasfCcA4pSpqwfEhQf0/9+bpE5E00njE8mCOYN+eT3VNmM4etn+WZj9k4iVl6tgM5Nsopma+5+MKgR5tL1izqxpkw7BoQOeZ5qceAYBZO9/xfNtLyK/2TFd343k7Ar9bMXJNESXvd+CCku6iFeJhG0bR3l/Z4J77D9iTgy4C9XWQmHpNZ5z3Gu6Q0WqlsJd6fYERjPg3bYRNmvLQj8rvxZQQkJIhqYszCIHYyisexgbwlkGMYsITw72f8AiUuRVnDvWcrLI6kCUw6WOyHqEUA7A8+2qYWuPQW9q/b+m4ZZn5NWeebPtBF36J6UaHYGpPNhpnry sJVsiuAl vZH9KVEFtdOkql9nhBdr8akR+kuII4gnB8sYNqGM8802LA9m8VT5F7LWmSmAfFWPHZkmI4a+wZLps6qpIKSydmCkiVMWeD7ogByGj0xNHS6EaLhA/NyiH567cHkfCjd90/AEo+fDeFoh/IGVs1fXT9a6DgyJvoq6/TKbYXr6bnABsmiTsqxFvCvbfSvh7Zf1IKsyxfLNY4hFS2AuYixc67v/OKEoSKFmfQaB2xNptWdUBrdJmgKIt0gWxjw4yBAmoBcY+VRp7tu74T5YpJ7uLXxUH4iGw0+b0w8jY16MpLb0QSyhEwgDmCZY6ix6UDzeyDYE4DySbw3h7Xi/AS9an4vz2TuIjI9SQTbQpwmfG9xDDwQGRHQjbxLx3TyQ88ykvtpmqKS536f4E+BwLF+/dDghKVA8r7ngE16+BxLqGBFOH65gbHzVct+TperzZUn+WIzyVWTHiGsW1OJZ0gjeyZN6wi0S6eHIfbVFYzXh7VT6NCWddLbC4vdUC5Gh4cRWsxVDhDvFLGH09y88= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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 Signed-off-by: Shivank Garg Acked-by: Vlastimil Babka --- mm/mempolicy.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index bbaadbeeb291..d9c5dcdadcd0 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -214,6 +214,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); @@ -347,6 +348,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) { @@ -2736,6 +2738,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) { @@ -3021,6 +3024,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) @@ -3039,6 +3043,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) @@ -3057,6 +3062,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 Wed Feb 26 08:25:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 13991769 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C1B9AC021BC for ; Wed, 26 Feb 2025 08:28:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3F76628000D; Wed, 26 Feb 2025 03:28:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3828A280007; Wed, 26 Feb 2025 03:28:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1D32E28000D; Wed, 26 Feb 2025 03:28:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id EDE46280007 for ; Wed, 26 Feb 2025 03:28:07 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 710EAB273C for ; Wed, 26 Feb 2025 08:28:07 +0000 (UTC) X-FDA: 83161418214.24.2708453 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2042.outbound.protection.outlook.com [40.107.212.42]) by imf09.hostedemail.com (Postfix) with ESMTP id 7F23B140005 for ; Wed, 26 Feb 2025 08:28:04 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=cgGaffP1; dmarc=pass (policy=quarantine) header.from=amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf09.hostedemail.com: domain of shivankg@amd.com designates 40.107.212.42 as permitted sender) smtp.mailfrom=shivankg@amd.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740558484; a=rsa-sha256; cv=pass; b=0WsYqm3mVn4W57qOiedXghob4G4Cmw73zd22zwiGT070lvBaDVIWa8MKYVr3USsDRUi26k civODWHugpHAaMgjRQAWzbaorq1zKedrYcqm9HJy1bzOqZrsIRFD5YmtUXfCBuYP1jjLzA UwvgVs63aT17a9acRHcI0emLCMQZK9U= ARC-Authentication-Results: i=2; imf09.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=cgGaffP1; dmarc=pass (policy=quarantine) header.from=amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf09.hostedemail.com: domain of shivankg@amd.com designates 40.107.212.42 as permitted sender) smtp.mailfrom=shivankg@amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740558484; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=1WyTv0vp4UZ22UKY0LFCu3N2m2jNLLIInwMWjCShJ00=; b=KBxDc74M+nnLOJyH5YjHgCbQqLfmsvCpwUor+Kc0i7dMqi2u145jM5bpHkH+rEnMLWjNmq pLIKZQmYYaZUxgyJqiHb3DU+D7OpMNLiAdJofrLtBFVMKJbPyFgnlZ6Ia7w+TlMoCYNEdY H9fMWwsmOT6we7ptdTiKSanojqZ8RqE= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BlnKg4aE+C99Q6rbMQ6CpREBlOxbxy2P1jKuIP3mMmK19n6t4mJaVghn55A831N8z60Kra3BsUAWfyAPwxSNv5cLN35Om9MtEEgQLofv6E0r5rS7xKkbkhidFL0BokDRySUxid9lVM3V6wP556Cw1M7TsbIw/9Oa1rUBtIslfxFa+cM8KtH4ioenOsyoTQjNXJsGpQpEJphSrGwWmyNHiW6hIksfXvWffUMGndeAD7xD/rqgAY4x+qdh0PgMu5I6/PyIDHdNbLUv8/ieTgp7lpJQbCGnmkf3hsjGjYD8LF6vxXfINI6phuiBLbFHUdDqpa5UMPyxQyE7DTmrpoIRLA== 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=1WyTv0vp4UZ22UKY0LFCu3N2m2jNLLIInwMWjCShJ00=; b=mBYD2V5s5JUMq+UfpQpRzVRBhbdGUM7+MB9u73AoyXZ/Jj6EkPeqgvISkErvWhHq82xMxLLabBQU5LEaEa5NA3Kj0sY2gNJVk1Oq055iuclPaCUSEGmSel1Rm8VfdAjN/YNhxfWfSuTByQ56Ta52Hg1r0xZIC+MNiq9c1AKTykSJgJiNi2I0y4vomdJamkd35dwbPpjWI2+g41WO6IlouDyvNtiw4mmvg4H5M2MXlrjYyPl5Orw4/2e50EODmcrQSIWkSFWZ9Uca5wasJ8bMAIgkHjWU3QckVuB2V2ou7QTNyg1ORPjPLvyy+FOFZIsbcJYBN8g/8MPPdNYd9ZP66A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux-foundation.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1WyTv0vp4UZ22UKY0LFCu3N2m2jNLLIInwMWjCShJ00=; b=cgGaffP1T7yFmctWa6TRZzVlzZqCbBgK4Oc1JEzJTNmqSRHvZa+2VVky1HKSiSDltVbWPJNNzK9wPl5lTM30Pknb0Wmj9+BnhVyhBEOMt78NpUl30NhQh3PdiEqbcDX6BjWkw52AMnOURqM6lAavZcVl4fmSu5aK6Eg/YcAi4O0= Received: from MW4P221CA0027.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::32) by IA1PR12MB6554.namprd12.prod.outlook.com (2603:10b6:208:3a2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.18; Wed, 26 Feb 2025 08:28:00 +0000 Received: from MWH0EPF000A6732.namprd04.prod.outlook.com (2603:10b6:303:8b:cafe::73) by MW4P221CA0027.outlook.office365.com (2603:10b6:303:8b::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.21 via Frontend Transport; Wed, 26 Feb 2025 08:28:00 +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 MWH0EPF000A6732.mail.protection.outlook.com (10.167.249.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8489.16 via Frontend Transport; Wed, 26 Feb 2025 08:27:59 +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; Wed, 26 Feb 2025 02:27:52 -0600 From: Shivank Garg To: , , CC: , , , , , , , , , , , , , , , , , Subject: [PATCH v6 3/5] KVM: guest_memfd: Pass file pointer instead of inode pointer Date: Wed, 26 Feb 2025 08:25:47 +0000 Message-ID: <20250226082549.6034-4-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250226082549.6034-1-shivankg@amd.com> References: <20250226082549.6034-1-shivankg@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] 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: MWH0EPF000A6732:EE_|IA1PR12MB6554:EE_ X-MS-Office365-Filtering-Correlation-Id: ad1fa95a-32fd-4440-18ba-08dd563f7a5c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|7416014|36860700013; X-Microsoft-Antispam-Message-Info: OSGqGahFyD0sT0ar6t/pUaeyW9elVLCAGqI6U7Tk0IWjFb3PP1pjbX/DsR1NsQUbSx6DpX5H/LQ76FL+3fW5MVjd6oOqqYY+8gKHYGp/YKYgdtq203GfDw2LhZt7h6uYNJWLgFYzIz4gpe2ChCP1qT8WazA/C+EYmKIIjaq2AEoF68ZuK5BdaQNo6tDJyh//AnSDrcm49u5jsvv2LfnG66V/8IXGghGqHzKR8vR/hioo+pzNDSrGgbEmyMCPcm1oBmwYB0I6ilP/bT+7XQKzE7cMrJTDFeMwbycQWlk/TsRVf9diPeX0NaNQXypaVAms9JuNZSlWc2fRI+OWB/lM+6prLq5mWNTd5oxDYsR1WeX1T1mUhXXhuNrWR0WT+cqsrrJwL+98xgAj25Zz6A9AitrItU4G8UMjyzqnBcNSyGf2TdWyK6+0wiUsr1Ccmg1FcVOrvpcM2TgbM7s1GLT7wnLnjemDZ4moP/0QT6zaGiMqLpKuSUpfjabnZhs9N8QL/aZho1WhRVUK0yff8xlmpCu8WgQMmEC9YqY57FrAG7vZ7YD38wxlGVvDdk63mZGnnC6NOtlwo+MaLrZBXG2d+mombHSqvssy+CVuFTx2GsZk+d6vW+75JNSujLoZmZwz4/bEU6pyfSzhX7EjD9ALfKFRcxhSurqkfAbLJVRi9SuFpRyyCpIY3JTiD4vuMDBTOAf74882bTDMUcoqyZ+3f/Iuan1fDRtDZfjSiZPPGVsOOOLnY0TdrTzcA7RZ8T7It5RL/gBdSfPPOelejOQp9qQLIr+M0O7vFPpGTTV7fMBO3aCqyPNrT7Q6R5qoyKqaACq2GLifEH9W0Lz80HC/bDLSHZae1eyMY1YNwPoolcU+3EbahXV+JyUArjNjBzLmkoVPfw8FP3DtEZIgDiKT2uHrFg/7taDbtB0Wd6dZUT5R97bFb7rfjnK9748POCrEX8LXcSn0S9vzsdG/haoc3lFqcXDSbCT53pf/uacf12akTqjQIa4RPwzOpHiQ0tGGmKevCXpQOJ+Q9iKk+dxS4ubFHrsLaBdiHgKe11LaCnqva4mpPQ++pwlrhifDmT8NkNtBPdwMFbSzSh2pPtjs8lopb+JJRzL5oZbrjC5p2AeufOtA8c41pChjODlidrFkxYtFBOmb+OVcG08MfBuHoA1xBkdcg0n6aAgp3s4HjSeMXmr4oLUxG+sxRgHk5pj+2HTMg2nRneswKahkhqif+BOfQagUP7Sq7y9aVIrpAh6u66yu3smRcwCxf/fKR3n9IC30pOjCSfQm1iOvExCHf5DeOMhavRfm/eLH7Oa+ZQJ4Nf24B0rlslQfeOjd3thy/b7nri3hYZsdCVON7/zKARKA+Iq1KAbzn69kMit1XlEBas16cJiySOLFmfB0yDXY5ic4y7LkODNCRqEGobmJfT5V7Tc9W2Lw86D6ufsTqeLBGW1nAshDaZXu0rJevVa4lBI5+MCixfY7A5wamU/I1cs1KE86QUj4Ee/K3x0Oyyw= 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:ErrorRetry;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(7416014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2025 08:27:59.0856 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ad1fa95a-32fd-4440-18ba-08dd563f7a5c 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: MWH0EPF000A6732.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6554 X-Rspam-User: X-Rspamd-Queue-Id: 7F23B140005 X-Rspamd-Server: rspam12 X-Stat-Signature: j8ey7ouaaourunwa17skzh4kw76ffkpa X-HE-Tag: 1740558484-734216 X-HE-Meta: U2FsdGVkX19h5jWn+c84kufADBqe28tm1MU1QxMyExdUYq7Bf69opVtmklo2zgrFkXmkfh5AtdFLAx73+/44GyaKz5iULXQKQrzXZ4XHM6v8cy75q5sspTieLrSBorXdoXdy8VfnjvtbLXhmSkXrThwIwn/pcXRe7tUFpfTCay0nIA21NmMm0CHZ/vdoPvNSlozrXsw1O9sDQ08Trw7lG3l7m45l0tJ1Nhy3svqJEiwy+E5WXKszK4/7dbRcdvod7l5j7NrC3xPkqqLDH/JfN7PoRBPrjhSc5/Fb1+mfQ6T318xokSscve+S/bE4ti/I9OBtwJf5LP8CDfDheFCAgpcn7kA/nNcFeMxIp3xVA3g9RF9PlnJZBFWIuYPUggsd5tNEwQ19s/i5CFt384j2b55l9lFjHPW1OVAy5/1AXYIv/uFgVRFoiIdxljg4wQ7urwCXvEI2zhfY1AVuEevaGzRXD2xYXPorBF3uNuJDPdnEfIh4KGM7Qc/fSagmNkYvMx02ZxuF5Ky8XVIRGXdxxqN9o4XG1uwFoCNyDRIB4wwnDyZI1qa1KufEkU0QNjVxE8iwaNzyYA1yizwcC++sNiL99uxZR2XiQ5klfqdL2xHkPLzzx0tXrzEOrtFla6iYYCs+gW0QL+b4jdoIOlqxhBD5QPHx4QgmHAj4s/LkuWZg+fHuXgqdO0WklYONC/jJNbT+/Yp3aem6QDz0lfDFH5cnP2ExenEtFAk7s5CaPFwF2pF0QWRfxCubJrgAVpWBI+cLLMRw/2QYNOYU+v1CLFAvCcXzMBgjxetHp7QrvgUMY6G0gDJiU/HTLkfxyMAN0olEOPbYu17xB5+8TZmGiL+c883sNrSNYnaVEqvcDzZQercOjwACWK0mTcMvF4NxXayDSIxZ0+kS8+lrcoFggnsWZz7bW/Kiua2Q+MGrgWhJ6p8LZ1XvfC1knDYGvcAXcByRLBbkVEn2Zrj8gay d6YIQ9cU fXis0hcVMIJ3N+EgQQ/4+8maKCw+qbaoeTlFhAw8GVNS0OOBT3XrCZ3mrIIHfNvdfs7hBnZnwmJfXbEZsIhOOxujRUU7OMqUdWqZxgL88N+jBFd+T31Kt0MiMD/GROt3X3JcP08dIo7misqABFuze/VvScvne/nzaRbHNhjsjoQSnYFOQu2mxREgj/x1rX2DXkfCR5DawEL+eV+XDTPir/kea5m99NE7Q8oWZiloJiuZMcohmUyE7NTvZ0cRglp0TwIbV7cPRlDmUSCXE6FlzRwj9xBomW237gy2+W0hWPmylCH54oazNzEqfwmOVpQilatYiHB3eyrWS4k9DR+0Qv9DuAtvp41VggD5bneGUPXjFeqPZZpOKDWSvOTe+GdjVaGVXLlI9pwsOXI2kVPLxdfMnUA5atqumc4QvCU9YzmK+xl/nR+NIETK2svP63e5L0TjYVNIwIdvVd+8JOjk/JcOwf3Fym38sUOjdnnUxIp86D7LkFtm5OSsu9to00gnI7/3cdaObVL0G3HLWV1SpxfPznQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Pass file pointer instead of inode pointer to access struct kvm_gmem stored in file->private_data. This change is needed to access NUMA policy when allocating memory for guest_memfd, which will be added in a following patch. The following functions are modified to use file pointers: - kvm_gmem_get_folio() - kvm_gmem_allocate() Preparatory patch and no functional changes. Signed-off-by: Shivank Garg --- virt/kvm/guest_memfd.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index b2aa6bf24d3a..f18176976ae3 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -96,10 +96,10 @@ static int kvm_gmem_prepare_folio(struct kvm *kvm, struct kvm_memory_slot *slot, * Ignore accessed, referenced, and dirty flags. The memory is * unevictable and there is no storage to write back to. */ -static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index) +static struct folio *kvm_gmem_get_folio(struct file *file, pgoff_t index) { /* TODO: Support huge pages. */ - return filemap_grab_folio(inode->i_mapping, index); + return filemap_grab_folio(file_inode(file)->i_mapping, index); } static void kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t start, @@ -177,8 +177,9 @@ static long kvm_gmem_punch_hole(struct inode *inode, loff_t offset, loff_t len) return 0; } -static long kvm_gmem_allocate(struct inode *inode, loff_t offset, loff_t len) +static long kvm_gmem_allocate(struct file *file, loff_t offset, loff_t len) { + struct inode *inode = file_inode(file); struct address_space *mapping = inode->i_mapping; pgoff_t start, index, end; int r; @@ -201,7 +202,7 @@ static long kvm_gmem_allocate(struct inode *inode, loff_t offset, loff_t len) break; } - folio = kvm_gmem_get_folio(inode, index); + folio = kvm_gmem_get_folio(file, index); if (IS_ERR(folio)) { r = PTR_ERR(folio); break; @@ -241,7 +242,7 @@ static long kvm_gmem_fallocate(struct file *file, int mode, loff_t offset, if (mode & FALLOC_FL_PUNCH_HOLE) ret = kvm_gmem_punch_hole(file_inode(file), offset, len); else - ret = kvm_gmem_allocate(file_inode(file), offset, len); + ret = kvm_gmem_allocate(file, offset, len); if (!ret) file_modified(file); @@ -585,7 +586,7 @@ static struct folio *__kvm_gmem_get_pfn(struct file *file, return ERR_PTR(-EIO); } - folio = kvm_gmem_get_folio(file_inode(file), index); + folio = kvm_gmem_get_folio(file, index); if (IS_ERR(folio)) return folio; From patchwork Wed Feb 26 08:25:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 13991770 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B34BC021B8 for ; Wed, 26 Feb 2025 08:28:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E08AD28000E; Wed, 26 Feb 2025 03:28:10 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D9397280007; Wed, 26 Feb 2025 03:28:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B963328000E; Wed, 26 Feb 2025 03:28:10 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 9754D280007 for ; Wed, 26 Feb 2025 03:28:10 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4048C4B555 for ; Wed, 26 Feb 2025 08:28:10 +0000 (UTC) X-FDA: 83161418340.28.154152D Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2049.outbound.protection.outlook.com [40.107.223.49]) by imf05.hostedemail.com (Postfix) with ESMTP id 69D39100005 for ; Wed, 26 Feb 2025 08:28:07 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=HfSNhfxB; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf05.hostedemail.com: domain of shivankg@amd.com designates 40.107.223.49 as permitted sender) smtp.mailfrom=shivankg@amd.com; dmarc=pass (policy=quarantine) header.from=amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740558487; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6K8XomHJFup4eDpmSplvuSLweqgRZQP8s2KtEa8VxMw=; b=bSk6Rtl2dhuOI+VbSRfsN35YM03NxcL0DsF1KPF3ifUBO63o81QLgChlJrst++kiP2R58+ FbSkqBeIcDJOCs75j/kpjhujHXEz6fYIOSHe81sczl0UH5d13FOpn09ESSEMJ8qkPRdsLB aO+A8oemQ/+MCBquROUFKVFra7mMlH8= ARC-Authentication-Results: i=2; imf05.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=HfSNhfxB; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf05.hostedemail.com: domain of shivankg@amd.com designates 40.107.223.49 as permitted sender) smtp.mailfrom=shivankg@amd.com; dmarc=pass (policy=quarantine) header.from=amd.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740558487; a=rsa-sha256; cv=pass; b=iU2Imrd4AWkEHoKpbrKfnANezbIRyilQ0nMV5VULj0wCFBu/mt3zzKMan+99gqmi9RKxIS VIWOxAzGGOb3wkKgkCWXiLpv25+n87ZgJ/fNjiLC6r8yHYh0LPDOSpVpbMYdnjuhht89UP S+xPTzgNqrb7xw/HQHLPuFZC7w6IZY0= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a7Gr45uUcj+8ujtqbN6CZ2YmjzgplnNsbI0pWAs/0s+NXV3CsQHcjRYr902J8fVl+fV65DG7vK48fvmYEmqaheerUPNNCQYB3J4/qDZq6DVb4Tkt0Af9tqFeltZGTbjKOkimZ9BcGFRoE6LC+lTgXJ9Db45haUmcAlmqIVKpgK8NRc9A1KJqhtGmPZlZeg6uk/N0mjQxNkAOx3R1KppJc4D90PA3GlbOMNxifEvpWuEEAR4MWkHq1nvmwS387V/xVNMjxQfSHBlTM+ut+WuKMS5udKDpzgDF+FyfJ45A0++POzz8Ed+BRGbc9L+P3P24ecz0VDdUF8Tg6WYKInq+IA== 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=6K8XomHJFup4eDpmSplvuSLweqgRZQP8s2KtEa8VxMw=; b=vGvmcHmiAsDLjBD3ya/hLAMGz3Il3TcZj0k9sYBamDcnWpzjn23rfaR6Wnw/1ONMZMGUbAAOsLT7fTv3yDIItrB7UIlfbUhx7hED3M5zu5pbU7/waX7G6SqFY3DiHtH2hpcxIDlyAG9vY6eLkwnf6PQDmlCGrWwp3Ci0v5w+KVSAt3Gm+JhywXAdJQNVs8Relp9mj6kAXWfCG67xqrFXuKJAnS0DjE1ER9wgjm0yeiLagXxg5xUfVm1bmVYQv+7TUMeO3LIfva1zDAIR8Rh2J6z8OoBiQe0q0WB3S+PS+iqxfctxv8A5JWmcMepqH7QmbBGOk+dBwp1daAHsIeFllw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux-foundation.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6K8XomHJFup4eDpmSplvuSLweqgRZQP8s2KtEa8VxMw=; b=HfSNhfxBJKpdbsYrWObRKeOMKBDoq/fggKAitYnFdK1TfzOYiohRHI/bMOqRC2WJABwNPC8lpN/w48/4clW9kTR7bEjKswRdnPNWhmAdPIjOjDoYjaCJPN0G7+xQF2iqOdPfwUwh+6pZWPPaI095LJgIFL/OKZXwObqmECqTuBk= Received: from BYAPR11CA0057.namprd11.prod.outlook.com (2603:10b6:a03:80::34) by DS0PR12MB7825.namprd12.prod.outlook.com (2603:10b6:8:14d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Wed, 26 Feb 2025 08:28:05 +0000 Received: from MWH0EPF000A6731.namprd04.prod.outlook.com (2603:10b6:a03:80:cafe::5a) by BYAPR11CA0057.outlook.office365.com (2603:10b6:a03:80::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Wed, 26 Feb 2025 08:28:04 +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 MWH0EPF000A6731.mail.protection.outlook.com (10.167.249.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8489.16 via Frontend Transport; Wed, 26 Feb 2025 08:28:04 +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; Wed, 26 Feb 2025 02:27:57 -0600 From: Shivank Garg To: , , CC: , , , , , , , , , , , , , , , , , Subject: [PATCH v6 4/5] KVM: guest_memfd: Enforce NUMA mempolicy using shared policy Date: Wed, 26 Feb 2025 08:25:48 +0000 Message-ID: <20250226082549.6034-5-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250226082549.6034-1-shivankg@amd.com> References: <20250226082549.6034-1-shivankg@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] 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: MWH0EPF000A6731:EE_|DS0PR12MB7825:EE_ X-MS-Office365-Filtering-Correlation-Id: 9da0bccf-d93b-4e98-5f64-08dd563f7d81 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: RggYDt4Mtoeh3WLN3hGIM5BY2FlQ6EJuNfqDGH9RhxjWdPhHNmvT8duSdndPbA6hpCxz4XyDvHjqxHu81qmgI7YpI+aZVGHKj8houbfvW05Qx6OH+Wgje8FzmW22UP97pjbbTR5edhm5BAY3VvIAuDYVgFjHqZCyf9FrA9Jm2ZA0iiWM686RKBqQ9+fuRJPVynnulGNBllHCWfMvkIMfgQzezNj6El9oYDy4fCtQ6SWrviz+l9JAZ/ywaTQWxjjMyBLwzgJx80Pjgovcm6HsdKHXliyD7pnuO9/hsEPv4bZorfjISij/QrFFnvEiOgm26VvLEnOr2v/lwx57u5mQXWeGli5h8AmaTcdN8hBvq0LgqzBPudR+jK0kI6mQ39sVXVU8cnL+TahGb5On/Uq1KpJXqRDeGyLhDRpZWpntHFBhw5oa1WujBSghBa2YTNfvslzExgPLoEZHG6agwSIpkxOrIeYFRiJlmfbT875HiHR57+TtVBLDayhJAEdiUzsUml8nUuNCroAJkv1mRLRmBNmipXTrEfaMEuqZU4j0wOn7+Wwx4Il/f11mLBj9on9I5Xbj2ft5XOwzju3Gz0Sai6hw9YRBWlMNe83g/k8oTSlMj/gAGFSVhLND/bsz/+aCmQ8wph81XQdZCpIoq00BOFk6MyWknbJ4RPP2HuNSWvqzGC3wGslUuN+Y2qNQFD8j7SiRuEiGrOwIRQt8jCHJCi4kXgVFCmyz3pEcgcWxs1QkxJ6ksyTx4mVjsk0/oEiSVax4E925gZ6JGPj92I7JCM1CbPqjnEaPYQMwoaZPyr5Nl26ZfyN388YXvtK221D07Fx4x9bmCg27OjeFjtWIXK2+8eV6rI1FkRIFlVMwtuyFvmQjn+Jh1h6mwsypQwiW3uSUX/+v6mrledrpG/47YtihfA/M6+9e1RhLnYzjBGoDyyts10DJFaRXGwegnAh11qaZsTdU0C8UIYak5zwXcSosn07VzB5dLhpZYvbUHnHeWRr2dEEDbzKQ12EfWxPZEgGPbJ6H+0P+AqUCJhWGOxTsAMuI99ojMhrCkFCEAJm5zfOYu6MYGMCFuIn4x94r+HgsTR/dNFiFa/umAa3iFIIwiyY+oVmvUYim/ylEI+GYMxQrpP+NVDukfpt2cqeNuFosikDWHr0A1bBlLfuDvKhhnaIpYc3rE8b419V9+/KeGAkfsFXvH7uAzF2tvMLnjkAvzciow8zO+61Xo0AwcRBoxTk6d8JvZyLJJjSaJq0XUH9ouxEf8inUVuLRa+phGYbCKZ5KPdZkOj5kwMuwnLMC8k5coRyHwzgq1crwVKxLydix5Oi4N/T43yiCo1wbW9lukZ1nHAoMXzSFz6y4r1W/CDogbBJ8GeKzPXSvFG4AHSZksp/WiqTLaArCp/1/oZFy352ZwKrGx9qyTOwyVIlJNvnhZksxpWNplHHaoBDpC+lZX6HscoWQod33cXtdV90AQCBOpzYB3HLMJR/kapOdU8ulUPaaCe6mAItcGIs= 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)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2025 08:28:04.3631 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9da0bccf-d93b-4e98-5f64-08dd563f7d81 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: MWH0EPF000A6731.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7825 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 69D39100005 X-Stat-Signature: 3gnmcd7ey5iax4ote178xjhb5g5jghey X-Rspam-User: X-HE-Tag: 1740558487-463854 X-HE-Meta: U2FsdGVkX1+qmnfHJkpVk4KPlleWksmEQS/bHL5S+GlBZhatQeXH9OfebiBaTLigR2O+F+kWhFaRfeLBQA37H+YEM9RIhuZQY1RP76nSsGiKTheY2MhVL27RQD/XHxElpGGrkuI1Q9LkNlESbiHk6UaVNy+b3Ma1pLdRyISvpHxsz2wGsBbqp2cuEi9Bd+kgXyGOmQYzN1Kz28Hx3vDnZXtdir6bB/qPQfLXvrOCBtq2JU7DdY6M2x2lxGMpXvr/lFy6j74C89LjJd+oBQRE+dfyVlMpu9qxZnPyoemEJow+HDAoce7OKrBbBSroPraiSZmDbSJI3K6POTxm9RmXXnCK/YpQTY6IEFO5lCrS7EuIdGDCH+CNLTPYUpFkbQZLqA6QTZDY3XQ/5qW8Jflr5iv5iHPbbHS1WCKGFgkqMWBvvTUX/juiXl8WKjGVcAhMxiKeV4BpyoDMWJKdbWZ/9GsfMF5yKF9JoMk3Wbtrx/6esHlj1Xppp/g9i72FHenohy+a6CJTk6msU8i8JUDyxwqjGEvG0dXIQQ246/w0wZYOeVcNKLohiTF/BQDGIYR5I8hnmExWcOVW42Is4USX9npfrjICzpqzgbLs99Vkab0TIeyHv6BnC1RQbkbMxWcBe+1hobxdZ4Lr3PiBxg71CKuvL8x6T1IM/wx5+gZQkElGkoww3SpqOB1eZiWseHxv9/Z6xgcR+bXaQ8zcJngRB8e7l6CcOhPtRJW8kG7Fbq2RnWRicsv/Pm2GcdXPw72wpgeVQ6obyAKq1KqncfgdpbLsS8ccXK66QegKMHsPSio22pJCDSpTiteFKV8AGpkJwjUGWxNhTcw7U5iwi3oCrE5zTnVnBxez36X33P1CfdQN7FY9KwSHPIL4em04ldLfrAiG/MUOq5WwUeQKxvs53Cz1ONOW20v7I7daU+32bRLTAkKad0EFIXPESPRiaaU2JWfJs4qWAaNGeSTjQtb uXm3BHL2 LeCKxM1iD15w1TOUu789cGqHKeOHvoJv8kwYetdRFeOpvTDNy1E82GP0e3K51L4VqN/eOK/85V3p4BV1Vuq2UpGn9sptnZkryNZb93fff/ebaVlqkiTBg4iti4CdAODLEoN6dg48NH/boqr2vSAH/9OyjRoXs1026pBxfGv80ooa/XTTocaU6TgMvQpkJ2jfigywrmO896Lht/3mh/CSxqREoueVZ2ZqL5L10U8tTH4KTmrhrI0F9mSyxpBTQct+KS2ipvNEtuJCXx4O417jekYgeawNeZ2HOVtAkYIx+MaosTmwEV1Il8R0SYGpER8CoYpHxSnYkerL9CRXw9V6INWtKDveJMGJJ9Q23MoHPAW5UO8PXGHbFlklctHaAYL4doiy+L9DcLxDZa0k39xDcKejT2hAbNi3u5vZhBfsjTRwYH3E2S86mA3/wghGJ6/6pzfwCsD/ohN48asu799b/qAIx6yhH8By0VgI26A6wiXzPAhNuzUFZfzx8jlcU0Xq6SvA7Tdq+Oy6Qqu+rfEEp+Di9pXKOUMHK5+eaCzbJO/J07+kbTn5Q/xDbGNJGd/QmaDwY X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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 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 | 76 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index f18176976ae3..b3a8819117a0 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -11,8 +12,12 @@ struct kvm_gmem { struct kvm *kvm; struct xarray bindings; struct list_head entry; + struct shared_policy policy; }; +static struct mempolicy *kvm_gmem_get_pgoff_policy(struct kvm_gmem *gmem, + pgoff_t index); + /** * folio_file_pfn - like folio_file_page, but return a pfn. * @folio: The folio which contains this index. @@ -99,7 +104,25 @@ static int kvm_gmem_prepare_folio(struct kvm *kvm, struct kvm_memory_slot *slot, static struct folio *kvm_gmem_get_folio(struct file *file, pgoff_t index) { /* TODO: Support huge pages. */ - return filemap_grab_folio(file_inode(file)->i_mapping, index); + struct kvm_gmem *gmem = file->private_data; + struct inode *inode = file_inode(file); + 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(gmem, index); + folio = filemap_grab_folio_mpol(inode->i_mapping, index, policy); + mpol_cond_put(policy); + + return folio; } static void kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t start, @@ -291,6 +314,7 @@ static int kvm_gmem_release(struct inode *inode, struct file *file) mutex_unlock(&kvm->slots_lock); xa_destroy(&gmem->bindings); + mpol_free_shared_policy(&gmem->policy); kfree(gmem); kvm_put_kvm(kvm); @@ -312,8 +336,57 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) { return gfn - slot->base_gfn + slot->gmem.pgoff; } +#ifdef CONFIG_NUMA +static int kvm_gmem_set_policy(struct vm_area_struct *vma, struct mempolicy *new) +{ + struct file *file = vma->vm_file; + struct kvm_gmem *gmem = file->private_data; + + return mpol_set_shared_policy(&gmem->policy, vma, new); +} + +static struct mempolicy *kvm_gmem_get_policy(struct vm_area_struct *vma, + unsigned long addr, pgoff_t *pgoff) +{ + struct file *file = vma->vm_file; + struct kvm_gmem *gmem = file->private_data; + + *pgoff = vma->vm_pgoff + ((addr - vma->vm_start) >> PAGE_SHIFT); + return mpol_shared_policy_lookup(&gmem->policy, *pgoff); +} + +static struct mempolicy *kvm_gmem_get_pgoff_policy(struct kvm_gmem *gmem, + pgoff_t index) +{ + struct mempolicy *mpol; + + mpol = mpol_shared_policy_lookup(&gmem->policy, index); + return mpol ? mpol : get_task_policy(current); +} +#else +static struct mempolicy *kvm_gmem_get_pgoff_policy(struct kvm_gmem *gmem, + 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) +{ + file_accessed(file); + 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, @@ -446,6 +519,7 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) kvm_get_kvm(kvm); gmem->kvm = kvm; xa_init(&gmem->bindings); + mpol_shared_policy_init(&gmem->policy, NULL); list_add(&gmem->entry, &inode->i_mapping->i_private_list); fd_install(fd, file); From patchwork Wed Feb 26 08:25:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 13991771 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1262CC021B8 for ; Wed, 26 Feb 2025 08:28:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 99B4828000F; Wed, 26 Feb 2025 03:28:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 924A4280007; Wed, 26 Feb 2025 03:28:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7512228000F; Wed, 26 Feb 2025 03:28:16 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 54EEE280007 for ; Wed, 26 Feb 2025 03:28:16 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C88F3160D17 for ; Wed, 26 Feb 2025 08:28:15 +0000 (UTC) X-FDA: 83161418550.24.23CE6E6 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2074.outbound.protection.outlook.com [40.107.94.74]) by imf15.hostedemail.com (Postfix) with ESMTP id CCD84A0006 for ; Wed, 26 Feb 2025 08:28:12 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=VredHeHb; dmarc=pass (policy=quarantine) header.from=amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf15.hostedemail.com: domain of shivankg@amd.com designates 40.107.94.74 as permitted sender) smtp.mailfrom=shivankg@amd.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740558492; a=rsa-sha256; cv=pass; b=Ms0LYx+480f7I0+W2FZw6U7irPkOcOVvCSBefeb1wuWL/gOUJVE6P+8+bK1UEDHw9sLzhH vh5TE1zG5HhAr34U0Cd8kWhEfZQdL0LFtRckGXJjiHTlMFMqodFJYYKUKZ8RBXhom/TSmj JmF/uHjLCwyAqQ3EMYKRWJAg9uB5BCY= ARC-Authentication-Results: i=2; imf15.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=VredHeHb; dmarc=pass (policy=quarantine) header.from=amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf15.hostedemail.com: domain of shivankg@amd.com designates 40.107.94.74 as permitted sender) smtp.mailfrom=shivankg@amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740558492; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6St1b1o4opRrG5+XbMZz9/UVH3Qaez2X854bSxUmZdg=; b=ZAGNo0/SAi7cOSaMscrskM8fEgpkGxABQdFlg5ckw6ouqBfYFESHkFQBMe9SVE42fXkbdn 9po12WDTmSMXh4wbmGXdfhY/izMKqw77gdQvLgGT+5o9MBblk7ajRJG2JhJbvTr+kJYM9H JJ223M0CGevCZouN2HSEdRBxRcZVN0Q= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nxCP4xfOQJQIHRqEhF48vYo1cnOuk4ZHNbz1sjd9oyiavUd78k0VhkSCN7bJ6i1Fv7zQMDkG+aUKMvthi9y6zc5JsAfngClhr3UOqeciHy7a4hToXrBLYJWVkq96EQV5PuU+1HCWsRbasHGsLtC0nutVrchreDZyf+GPMCzX0diaXKhCM5Jr1BEJdLuAD3jkP8wPj7NF4OPkVn6MJj5FB4Dh42BnZ+h5E1GTQ2+lKIAr5HsvHVpOovoosOpJq5wY9UfbEp+2+FrdIP3jzGhHO5i/5qpUc1sCQcFS6mFYe/sl7/Q5XAQKq2rnG3DJCHBR22TiygJmMi7eF6bqEuiYvA== 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=6St1b1o4opRrG5+XbMZz9/UVH3Qaez2X854bSxUmZdg=; b=gWN/1A35Ey/HG/k2TX1T+68nINdaOb9Cd3whh46qjii390WiADYwsfQge2IDzGElG15VquP1CJ69Oqm8artKIamVYe0rqv20zDXy+mtsS8Yeywwv2/6uW70ruvz6XfWQR0G74xWu1fVP9QiK+r3/52EQU1oy7HnrWd8QgtMr6g5UbHWaYgkVc0jiFo8iTNFkbSgLUXG5p1qqAcIQlvjA4gKkouOjBAnfOgpP4ODazl9mFAT1sS68hPNMNihdTmErbdTBn5H5qD2KcOMkioYTgFiBs+/eRRXAgbIj5xz1E3AVaEDr0sXUxKoOhaZXHYQqvXm6cXp3EiPwPxT5r1vK4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux-foundation.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6St1b1o4opRrG5+XbMZz9/UVH3Qaez2X854bSxUmZdg=; b=VredHeHbIBtGfPReY7DACMyYfY8bX0xZ5S7MpGcfs45SQxM0LLv3TJDRPrq1ohlIY/LceJ+EGI8Hd2+yjiTa0ka65VQ7DOuC6IIYjvEnIid3Bj8N700isLZaJzg8KO9peSNrNEXrDHWzHpdHP9oPKvGAekHCRUndMggjwEarrLY= Received: from SJ0PR03CA0203.namprd03.prod.outlook.com (2603:10b6:a03:2ef::28) by PH7PR12MB7257.namprd12.prod.outlook.com (2603:10b6:510:205::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.21; Wed, 26 Feb 2025 08:28:09 +0000 Received: from MWH0EPF000A6730.namprd04.prod.outlook.com (2603:10b6:a03:2ef:cafe::b6) by SJ0PR03CA0203.outlook.office365.com (2603:10b6:a03:2ef::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Wed, 26 Feb 2025 08:28:09 +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 MWH0EPF000A6730.mail.protection.outlook.com (10.167.249.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8489.16 via Frontend Transport; Wed, 26 Feb 2025 08:28:09 +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; Wed, 26 Feb 2025 02:28:03 -0600 From: Shivank Garg To: , , CC: , , , , , , , , , , , , , , , , , Subject: [PATCH v6 5/5] KVM: guest_memfd: selftests: add tests for mmap and NUMA policy support Date: Wed, 26 Feb 2025 08:25:49 +0000 Message-ID: <20250226082549.6034-6-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250226082549.6034-1-shivankg@amd.com> References: <20250226082549.6034-1-shivankg@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] 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: MWH0EPF000A6730:EE_|PH7PR12MB7257:EE_ X-MS-Office365-Filtering-Correlation-Id: 14a7f0b1-5924-4e3c-63cb-08dd563f807d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|82310400026|376014|36860700013; X-Microsoft-Antispam-Message-Info: 5zQan82jIdSJSDC+JD4CjI0VBR61V8Vqc3jXlcV4MiCx9wdNjTAyYQRHJyQlab4DcX8lVhgRwBmrA2I6FNBXRqtjnhO5YFxXn2gyT9qqT52bQceq4KT0llR1JjuC1zuf7CZaHrUe6viBiMlfKwkeWRo0qFQASo6kR1x1xkJQyYpTIJgMAq9BKBGV/5VEOU91rmco+4+jHC4JHrYTmbw2uakMW6OoKBNFm1xL+95W1Cm6osDhHaU85GeLRJ0KAYxPelW7akJjtUCf0A/NLdc8rkxH81d/Ym5RjToXoW8l3zJBQOYJiAhuvI4dDG2R5kW3VPefZxZwEZCZ2YmNQqCqzkLLpASIp1g/TcvPQZW6rwP++4yKMEbjN/h3iji8gw99Kft1G7273Sn/NNVjdS8Pva3+ORXMUV8MBmcZQaLFbrJ3KBdosct6aVKAH/XT+GYh5LPQEZQ0i/VxrXZvC3lO6uDNua3+2J7QYjoKCMOSjMzgkfmoheOeJiG6BMGE5M3ge7gGTphpMdkxL3CulZJtYQgpbxgCtm4IDn8Phnx/iEW7OiQjL3ZsoQzp5XmQw2MQbP/IUMinmqr4tzZduhoPEXb2nNxHeLO83c0iS8e7/fFkP1dAF7yFWBUunvjPqrVOEP4mhlXvRpSsyvj0HV1RUFOk7lz/UnrFPAhLD9+6FW8/vTbNVx1lCo2pfOO+CcjEV3MlH2e1a687sHx595ka/MvBg5nIdmF4srUbljBtnY5oReuaw948rFzOuV/yNjWOPj8JpIx9MuWk/4EhefLRuYKfG92/jE7xel8DlGAj+RuEy+D/c+N23RdMJEPL64t1m6UQP5thBuPn22ijRmhwBAwiQgx3YypCWfty2kLSEqv7lVUe8xoqWex+0w7n1xgAcWTA0UlTgUENRiuo4niXsiZKeEMBtKOXrThOynWwxoyqLVWU/gSwY7SmXJfJhH/p0oJvDbsYc2tYZzblIfOvxdZZDmDVCkZQHH6hOeMcuVaS6UNDUC5m4bP3V9WKuNfx6mFcEL3GrmZARL8GuF5tzUuPPAIvbRf1GvvvtOtnh2ySr1sGAi/SYJnotzOIpnCynqf5jukbJNFe5HAMsDCU5/V9K2lgx9mNTqgfhyOrxHPpqCSe03MJHKwoVJIaYq91uL3u6Jy5IXJZvZyd/p6cHIc0ZL7EzeUDaXat9r5Oa7mworpJ3V+abmh6+y2QVU5cjOZXShU1M8ojodmAFIRRsk2hPyX821BKjf/99arPd4mWLxHDQ55dGEf9nSXAu+/2YmIlsh++qrQAXXos5zIPXzr1sQU3id+hlEOuDGhCYJcnRMl1EzdxClTdwtPALHA1Flzoh4hOJDRt0j1CKh7F7DRYJWHIpUgabV1d/GZxZmgiB+G5khi3QVAgITXBqHLRxU2k3jaFdfoKyDC4hfsAQCCp3sPkJFE23t5T3HV+B+8wpnpVcfibcMkB6BnU6Hn/KbJXsaFxP6OBIqIfwIlbTig0HPT7/JkqpRMSfeAF44w= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(82310400026)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2025 08:28:09.3545 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 14a7f0b1-5924-4e3c-63cb-08dd563f807d 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: MWH0EPF000A6730.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7257 X-Rspam-User: X-Rspamd-Queue-Id: CCD84A0006 X-Rspamd-Server: rspam12 X-Stat-Signature: 7nkkczxidf1brrkh31btacut5deanjqu X-HE-Tag: 1740558492-272222 X-HE-Meta: U2FsdGVkX181A7dXrxv/zIZDpSVmGDre+m6o86QQUx931hHvx0FJFWbEYObYaXvcjPrzBeV+tcVZIvGx0Wo0rpbAgRIsxBR7d2wz7mxAc8L9B6KtclqRNhmkg6+Nyw79pIX8Cfe13MisaKhAbP55LMAuCNvSyGgr9+qRBL4k9o+lHoQUQjurZQp/WPh+ZeS1Kbz4kMJCGfkDU6AXwc/1Sh6gMBMkIzx9Fcs2xXmnoxfXyRhMRPFNTHv+OoHHovlSscVxMJYkLwle81lRRomj0HvxTN2uwTSRZmnTIAut8Yy+r+iWlul5LegtNnSkXuPf0kH7sPXPi4r65ZwkWyOI+Zx58YuaOZGNKUmfBh/8SnS9AYmvuWEoz2UxlS6p9VTmJ9Bcz2LYG23mAANGNJlZcGREpq4T87dYHJBepRtkq35BJsBFZ9qwSRpYd7zJR34FVrLi227d11PwLLkJIpruElYTJzlEWHa/O8Yorq9hLWq0/+0l3MnG61s0pw9PeP11euAzG+dsHWADBZTi4goqO8uMrT74q+1hgBRGU8bEMY6VBY5OzNvOPDNqW+oI0AJHyYtlmwqrRPJmgOQ081xWjMaapNp67vA645LA+tw0ITQspbyvzyfcONROAyhAYOJPwx/V69mKLWZFlZwm+92IUq/41uNyrApvzLMiQxuoFPehZIA24BXY8helfwR6SzkZi1FZdeyZiNjA7OHLGYsbi1d+m7Am6WZ417ChDURi3d47MUGIhktb+R5V/irin7Buc2sJJYO/YNk5nbmbjKjztbJsB0lYd8pTydHswqayS8gPq/+q5s4mSdL9n6hIR467/OfxjiDWrtjlk2zkSTpG03k/Zv07sMi1fhm71kXYjYPTzaq5+rc6e67TwX0UWfudtbKolPx9yAXSrZHMenRsTHWzs+smuaREnLN93gnRpJ8RhV3e32SnMZz3GhvzvKML9k6gGQdNUh2xUdc9KMW jMiKxrkz vEdmnhERw2LCHxM02rqFCpNdFlWpLF+TcY+wWfQP7VXCYSRQvp2otwooDOfAHFaKfPur0h6HCZ7Q/aENdaVsVbZWYkudfQF8JouP0mfoEoiRO1p4e59tH2QwoFktIMaPuh07/1qAWfOAo1yxfS57+5X0Sgfs4Ph+iHA1s9fx14MSEzoQCuZa4K5kwDvCDZKNjSc45G8vzrAJ2UoS868DiiySB6XySEhPKn7TCrnHqlnEe75VDNl4pS99DUjc6gP38cR/JG8zemb9rdBksWqlP9cJfpZhIgduMBn/e3Jief37O8YNMQWutj6ahaJbWiIdSvk88j5t0TKSFybFOqtDqGdmW/TrIVoW0IrQbYaVtaDNEB0O66rE/hrww999WVVNKbCr2dOVcyM2XuJSLC57l3ayXM1KqiEmFBtEwPvPGMc3CSrcMRXCQrlKXdzpn9ZBqDf79tPlZr2prp+2Jn/AFGDJMfGi93oHQUmMmqQLyHemkEXC5LMsMnanwa0e8tmrrJkrxSdbpIJflC7cKYyAk/pd9WdJuMchZ+4M4lTzwltfXPg0= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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..b9c845cc41e0 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);