From mboxrd@z Thu Jan 1 00:00:00 1970 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]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 22DEECD13DE for ; Wed, 12 Nov 2025 16:03:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 464618E0005; Wed, 12 Nov 2025 11:03:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3EE9A8E0002; Wed, 12 Nov 2025 11:03:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 268258E0005; Wed, 12 Nov 2025 11:03:42 -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 0B4948E0002 for ; Wed, 12 Nov 2025 11:03:42 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 9D08E1405EC for ; Wed, 12 Nov 2025 16:03:41 +0000 (UTC) X-FDA: 84102425442.17.08D3F65 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013013.outbound.protection.outlook.com [40.93.201.13]) by imf29.hostedemail.com (Postfix) with ESMTP id AF7B2120015 for ; Wed, 12 Nov 2025 16:03:38 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=RUjXcxWm; spf=pass (imf29.hostedemail.com: domain of ziy@nvidia.com designates 40.93.201.13 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1762963418; 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=Sectjm9ynUQYmA+CWCEuq6pUMJlViS7YKlXsPFLkWLY=; b=GSdXsOf9QTDYV1fBFUxk0eaoiZmaZxD4e/2elQJA3MOOq3+5QclHhWy1+vFbzlMc4UzGC5 i8RIIQSqo0H+GgGK2gHyqHoHAla4aVPCuCs9MegrbcIqQkagUDpklAllGaswuwqf2jjcSQ jIa34dDpFknItjubx+ATbNwXn0CSb3o= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1762963418; a=rsa-sha256; cv=pass; b=XQT45U/Ci78mIrAG8YZ1x9y1n0yNiZavhlATyJDwVvpQEeNVF6VypPHmAqjQiO0ekbCL9u inywh2yRxHTd9/FOoC1i3208mPI/QMMzjYSxPtOtLom4WFJQ5XIdOxDaP682vuJ0tfIuB0 4A/4li4j7pu6BGvqTScnz7KfTEJCc8s= ARC-Authentication-Results: i=2; imf29.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=RUjXcxWm; spf=pass (imf29.hostedemail.com: domain of ziy@nvidia.com designates 40.93.201.13 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jIIDEH1OP8W3kw0PPkqIhuTrWFUNb+w8/vFrI3O6qnqy/E1ncDzwRwgSyxqVineqMKYlmPoZQ0CpPu6E1bE6RWiFD+Z2PFHPFV+q7OGpKRhV8R3WcV9S/gvZmzT7EttSSg7zFwGaxOnLoRY4xjqscxM/lomr/6u7KCdLWlyvtL3iUMdvS2RUqwSIYWrR4hZKgvaMfioSjLb03G/hms48fEdd6pK+soZ/di/Gy5ua5kgQC9r6Hwy+jYhYpOax0vdLeZNcD5IqKyJ0Kwgpc1RiMYbBXUQ11ZsY85GPDxSwlcJFZEBsUXG7bbEHYWfucIPrjBNTzIWpy2bYXqohqQ2Pyw== 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=Sectjm9ynUQYmA+CWCEuq6pUMJlViS7YKlXsPFLkWLY=; b=MDMg+xsFiCYG29odf5utnBdWZq/59GmRxP3nuqOG8vpWRUv8jN4PAput3tXqmFDCcGaiuzRIFi0Z3AP1Hbxe0B4/7mgLLGPZnI5xkpOwzqhd/4HkQ1pxXKE5v6b/jhqOWfj4aWv7qS1pom5pm9svu2JiS3k8Q8uOJ5mC2qVc/Gp/RJkNmc7+6VzFk8fat79lAtB33tPdUFexoqxbl3jCJ4g5PSQ+m3i49bcMW9lZ8jbF8R6PpfGrIcGXXYqgyZtr8BzyftvJquWR8scpN4xiqAp0BKBpOX9JgovB4gfIYjsHLUvwRfYq5baFgvsn2wDEsjQS+N0+9scoRll+YDyM2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sectjm9ynUQYmA+CWCEuq6pUMJlViS7YKlXsPFLkWLY=; b=RUjXcxWm4OuKy+F/ONFGEA6WeF1PXhZrXcrG8C3I++SAhlXXBGIWM6prnXd1nSE69NyBUekwi3Et9TE/TWuXVCIHwInl8HGYlO57igLQKunItGdyEOzijzAgt/zE41bmU6X2ujC7rXhzlPSoanTr7M3BHSClsFXtEF+7N5PH2jZK4XFqpYux0HQ1MNYOUGjQ998Hs6i7UbqQHv0+kBtyIFQui5+PdNrsCsOCWgN1S7OMVOzZk3J+0ABl8Fs8d/M9pDJNevnMj2THabklOzwS2LJX2Qpfn9/CHah5Jc6iS6XRZ2JRbRai8xRco5EzCR6H9uSrGVZJZyKjgJ6UEmzWbw== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by DS7PR12MB6359.namprd12.prod.outlook.com (2603:10b6:8:94::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Wed, 12 Nov 2025 16:03:30 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%5]) with mapi id 15.20.9320.013; Wed, 12 Nov 2025 16:03:30 +0000 From: Zi Yan To: Lorenzo Stoakes Cc: Andrew Morton , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , David Hildenbrand , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Sven Schnelle , Peter Xu , Alexander Viro , Christian Brauner , Jan Kara , Arnd Bergmann , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Muchun Song , Oscar Salvador , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Axel Rasmussen , Yuanchu Xie , Wei Xu , Kemeng Shi , Kairui Song , Nhat Pham , Baoquan He , Chris Li , SeongJae Park , Matthew Wilcox , Jason Gunthorpe , Leon Romanovsky , Xu Xin , Chengming Zhou , Jann Horn , Miaohe Lin , Naoya Horiguchi , Pedro Falcato , Pasha Tatashin , Rik van Riel , Harry Yoo , Hugh Dickins , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, damon@lists.linux.dev Subject: Re: [PATCH v3 03/16] mm: avoid unnecessary uses of is_swap_pte() Date: Wed, 12 Nov 2025 11:03:24 -0500 X-Mailer: MailMate (2.0r6283) Message-ID: In-Reply-To: References: <17fd6d7f46a846517fd455fadd640af47fcd7c55.1762812360.git.lorenzo.stoakes@oracle.com> Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0PR02CA0022.namprd02.prod.outlook.com (2603:10b6:208:530::25) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|DS7PR12MB6359:EE_ X-MS-Office365-Filtering-Correlation-Id: 2f682b5e-b267-4fe2-870e-08de220505fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|1800799024|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gQIRL35Pepwr4w08N5BiBpcbB6sVQJCxB6+2lJ2tYx3I8ZvM90Ur/mIxog6L?= =?us-ascii?Q?hCoLbC+OlI6mQZKIayaXvWoDRHtF6QrhFUp/ZvCCjTyj9MQ8a9cOYFR9OzSg?= =?us-ascii?Q?4wcefxmOdZcwExGYlG8p57fxm8TxkZgYknK7b5f4LGJwTmQDCMBzsomTkV2h?= =?us-ascii?Q?KrV7uyjOHe/vo8q7+eWKjykna6AHkvuZ/i69yICZSIWVhFz3O8atOKkje/du?= =?us-ascii?Q?ChlxWhvHoAQZhsZM3evkY9LTSbkI17tusP5PfalQbMNh0Nb7kJlL7VVocF2e?= =?us-ascii?Q?qzM/tm8UhLwhrwOZaWfj8axauA+DlR6QGG42KUOFf9e56VRpj7Rpv61Upk2p?= =?us-ascii?Q?BzVzMcfYdCYyvXPSPA8WkoJ5Ac+nKZJ54LTv+ct9eJhjVvAzJEZWg+7SEpVv?= =?us-ascii?Q?XIZcMZFWfQ+dAYD3HwDxB1v9CHi38AExEX8w2fwSE29B9+r0jjEvlwOvh4Bw?= =?us-ascii?Q?OcZup+ORMs6A4u89XPmZ9DnCPcPmNpvoazADkiv2RJz+DxyGb4davtZ6dJtg?= =?us-ascii?Q?gU7fvBfHBTG6SoWTbLusHUT/Ye1zBSmOSc7HikOlWwQhkZamBPiheMRRWu8K?= =?us-ascii?Q?wa0PmssoqbyW1KIW7nxqpei1t6SHD/+MR/UWzY3vM1Q5JDbU54bt1TYy/+bv?= =?us-ascii?Q?eTEDqLIyx3jw/3cSJY9I7PAxHkgDX7FLZjFZ8fhAwmRPiMp8AJXAsKhgMG8F?= =?us-ascii?Q?QM2fEg8PMoeYi21t0LSUjiIjGeEHjxqGJcgYXOcFLgIJbAQd3YKjkx30+lOZ?= =?us-ascii?Q?6I0CfHpVNtfJbrdbF5/UUhj8d2vA5NAkM9M3XN84Y0rnaHLJ0rmZhg8zDHfr?= =?us-ascii?Q?j73o5rH2Xa/lwEGPpcWjBvOdKwY3Nf4/VlzM/sP0r2MayXhFuQU6vdVplxAs?= =?us-ascii?Q?6lbv4mpl+AO6aE/IT/dm9pb48u6IWd5K1ohbo4FUlv4Vu2BaWRORdS7FzSZC?= =?us-ascii?Q?VULCvGqJD83DfX+M6JPycYBN/jGSMxAOCMakTusx72y0JCfhDlwJhL7OEJH5?= =?us-ascii?Q?0gC4/Y/lVDL2zTkm5oKfqn2+NEJv4P1QvGNeWynhqJ7iCL8Ksnm8BEFoaWcY?= =?us-ascii?Q?kLlsxqQINQ0fHXoU3zwjP/hOb3CAgOF9FzDGMur5f54r1KGxGHZoL0c6Os6W?= =?us-ascii?Q?bm2enr7QGm3TBd6sVbJz3mkeu0lzgjb0c34FAtxJ616ujX0dZXELQnsMfeRk?= =?us-ascii?Q?ct9KyaE57AtXkHp7Zfx2EIqGjOZ1pX/JgD2QasSm6J6GK6OJo2efEbYVuxxb?= =?us-ascii?Q?sJxbJRyFpRAm3u4EcboRRGzukm73COgZW5luEpjT450guVOYCyxDM3ucSZdF?= =?us-ascii?Q?xJhOsG1waFbYdw7nnGRpmIz4UJZNhezkalKeRGRjorG9ukD4N6w+8ofyVfch?= =?us-ascii?Q?+ho5mLd2REJFfWJNfhXNHpH87TP/o06TydgkQCiLHNd2WCNRWK6VVrMhXnhN?= =?us-ascii?Q?57AmrVaYYT2MbUJkZlBHfEbpGqqAD4Jh?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(1800799024)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8Ar6TOuG3IS1ZY5NAiTNcsgfeSqYfi6SDohhRRf+rs+0LE/FPVOytUvuPGRv?= =?us-ascii?Q?Bf+6UfSLnTOr8RTg0n1K5yJ55MNAEwREz0S5X0OBVL0eYNvmEImTmaPOMXsX?= =?us-ascii?Q?SoSUJhnWJ7FXHASSiz7vDO3xJHW3j4dA5/DWaxtNukv+mQ3Ir4NTNshPmMH0?= =?us-ascii?Q?fNxY/PX1CzEXMOUllodsrtw+GhxteOOL8JHTVFodD8sHKRQHZnKCfQgjdB9b?= =?us-ascii?Q?gzG8erOgNEbrkYqodlXMGNO3dEZvxNuxjTLDquYXMUb7P9WlB1j+6dNZoD17?= =?us-ascii?Q?PsmsjzXjfN6YhyFgTr3BDP65kLd41SYGN9iRvyRY1N25ocgt39gE2VasZnoM?= =?us-ascii?Q?EfEAgU5a7if4Cjka7QddPHX4hJpQGwU7L2yVkTkc2iDRBmjugdx3S5G4+vcS?= =?us-ascii?Q?lZaFyYL0y1MyL05xuVqvhXUOd4VG9LaTxQVcKd0K1R5RLJJj0Ucw297VxPUX?= =?us-ascii?Q?qv2epHUsbvadWSW+vVkUmhaOgEUzLwVm2TjbvEQq3t5tmq2OKldWifcUcXQ+?= =?us-ascii?Q?0+Ug1XJRrE5w/UK8Qq0JsIi01V6lF2SCmgKmr7C9Q8hhW7V4UFuwKVwxz5hb?= =?us-ascii?Q?9UdHcrlWd5Ox0sXRDBm4G3WCNXejN27YXvuRN12U9cbkwHOeh+V/Ms5x5wOT?= =?us-ascii?Q?6ItE39rL50jdxjB5ZxwUSCf59aI0h7H7aR+kRHfGYxMufQpuoKzvm4/7gXDo?= =?us-ascii?Q?n3jaLzRzP/erfEnYTldKhFmPTNc2QnzBcMBxor42DniXpd3kHcUXocfj91tx?= =?us-ascii?Q?gJJpghTUMJSa894HRwOqO/PnRoatSaq7iW85koueIOsDJ/+GbTSLBjaDscuC?= =?us-ascii?Q?hz1Cfh75cJ7c/A+fNzbm6tfxuhapjKWvdsxYXyFO4z6bGTm6u+RHz1wJiZQ3?= =?us-ascii?Q?rXU7aXsUCQwDmv0z7HmEzHjQvWXOw04tnSVtePufCabbAcHsFQeZN6OIaZnN?= =?us-ascii?Q?mNrAr+V1bakWEw87ZcJCui8jG/mhUF42zwtTD2w9/fipv1urGQ4grw0kGeS4?= =?us-ascii?Q?vCaMGSMEfmpxiY4gvk0UBgu6SWS0yLGXllvmlH9MUpplSiwyNEYcBKrs+QoH?= =?us-ascii?Q?vqLsGwi/3Mabu8pX2EX077hvOSKrAC7qiseFot+WSPYIhMyfTT0vlORHP8D4?= =?us-ascii?Q?kQ+TWAmmGEIjxG++UkbITM5o7OgQBBCZUi6k8Esw34KtkrOXanFFpF8hj4CQ?= =?us-ascii?Q?n0ORUN8APxvmp0YHxHVygxTh12210JC3/kgYrYWa90T2ZmKJ1qioZINw8RHN?= =?us-ascii?Q?BNdzTHVYWhnaiR7aGJTj3G7w6A3KjqmKQ5kQS4tcD3JDZFM47ONGYH4pYXTg?= =?us-ascii?Q?kv79AKiAE4CCTmf2x75OgpXb5CPfKf2KRBP1SUXLupIDHFWb9TZCjQRVyrgH?= =?us-ascii?Q?ABx+kmFSGm7I8B2+hsKDwBrBFKQGtV89SYsHT+D663cAFxkbxwIONTMpkCoA?= =?us-ascii?Q?RqXGSLgRmHlZnXm7Us54VPXI9Wss09GJ8OTHYfbUunAi73W03jUZWImddLdz?= =?us-ascii?Q?28VDnljaenB+DRXqcUK9czzA3tGQLunSPPYcFUlOWA2SC0scmalog6Xn+HAl?= =?us-ascii?Q?LYO4ziu4UzjTlykl+4QWY/e04YlOAtcNrLQYEAYw?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2f682b5e-b267-4fe2-870e-08de220505fd X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2025 16:03:30.5663 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fdWotTRfQizcDq3G+HAQkUOz4mQZqn4CfoOfum5jRikXSxrd3OW37z3iwHgMp5hW X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6359 X-Stat-Signature: pu758u37uf16na8o6s9zo15ygkdd8j4r X-Rspam-User: X-Rspamd-Queue-Id: AF7B2120015 X-Rspamd-Server: rspam01 X-HE-Tag: 1762963418-898798 X-HE-Meta: U2FsdGVkX18v/J7hxSp5g6wKBeyeyc41iFlFcG2PY2CYFvdBtLRVtK7a5gsq+d++Yyw2sm0Pa3wGjqHfXxGu8TILQDTkNnQ1oeDvgoLMkbhnvkv5V8SZ2wXoET0d388uhQvdl5+vV9hNhlCTt2BRIqMS6SCKXBogjzMNchwl2S5VDg+/lcdoko8G9EJ1v5x8NTadeZsk1tiMU8nA7ATFTV1xYsQ0cE3a3if2Jms9NqIA5Q4jVoJSlCxNPNBm06MGZg+PjGMYzWdM5aprgKd5Wkz9c9orkptX73LGDKk2JC9VKED3lqoaKlXBVkHpqGT7vgG3JHN2bdYUsFx3qTP7JQnbYe6VMeJgM71HlGNHRYtndALyGEh+fx2XKElH3ArMDeLOHxK2kMkxusPxEEU0shYq5tIpjYKXF3u+SggkpXvv9n3FSwEJ/+NHrpObHqWVpyHTKeH57McgpUYXYWoCTmet5NMl5UdbIE3lGpZLo078kH5/EHRtVcR4MCasITAVydLMnxQIL4NtorjGTxomxNLGSUZwW35Pj8F/mxnW72kfk3wfi/YfVgTVZ4UYo5QtOTXsIlPlruge9QKW0AEnyMeaijrurU5rRT+Bx/Is5KhIegklbbIyJbLhiM14o/z/QcrVdTsUaO0zFMAFFKjjHzxpaJ4Av6GhY/gzWl4uE6r+GZFJILx1hsWGXGrbX/UsY5HuRmVNXfZhMBbhIiFUFQO+InIqwaGDLwOCXLDPDNcDPUB0qz7Ubrs6Q7AT6LuwQH00s2K4Enc5KaXwi8JCzYQ5mVNCe/R1lfLIea7QwwkUGIVjtl4AfKHYLupULjTr9S2NBqoKhxTXyk5ZOYDDSCVNxnBAphgKbxuDhBKayh9+4OEOFcDVgEs0Hs9+nCTV5eo4V/8/tdR3jYqm+YWcxxhl3f4fHtPMdNos2AkOL75J5wyQ6SHekbpXfcRzRCuoa7130lu7f4p6zzscsSp VU0vI5GF KqOX+m/rdtUcdgyiUCQf9vEq41JWW7Fmgc3xVOABQRa+vJSLylrjqR52bdiedty5csdIB5Whl6FGSVdpPOtL7JPtu4IlNC4Nr5XOEzHQ+pkcpZW7RYIVNK7TE+GwXGVrOIPIGuHNgb0P5lnUpifhnMoiRHiTXwfpFJPWuHWhZYue5GclJXTKHEDCrM8vFBkNcCEEraoOiU1/eAYmWe2IpuJBtzrcjtEqCy+CaJo1xer7+ws8JPBX3hpRn5Q1erfrjxRr2GFvFuS6dENUG+qiIOLLh0PSZ8Qz9Hozcg9PxXIc2OGXxg2ckaUXGKjAjhkSk0NG3wC8/4y0qU0ce55sfWIEw/M7gEflbPPzUC5PnSgAfoBl/GL5F3Eakf8ckEjJOv7Nw0Z7UyuNoO46RRFZlTN7MXdIiJTrPT2abHk2I1ITKRf6XWPx+HgDKPv6VRnxR//7IWxOKJBus9nEm3kHw3A1D6pRt2+wQyK1b4qlS7RC/3l934QIe284YF5fBRVrSQQ9UmwOaoxuDgl6JdLeoAUbhCA== 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: On 12 Nov 2025, at 10:59, Lorenzo Stoakes wrote: > On Tue, Nov 11, 2025 at 09:58:36PM -0500, Zi Yan wrote: >> On 10 Nov 2025, at 17:21, Lorenzo Stoakes wrote: >> >>> There's an established convention in the kernel that we treat PTEs as= >>> containing swap entries (and the unfortunately named non-swap swap en= tries) >>> should they be neither empty (i.e. pte_none() evaluating true) nor pr= esent >>> (i.e. pte_present() evaluating true). >>> >>> However, there is some inconsistency in how this is applied, as we al= so >>> have the is_swap_pte() helper which explicitly performs this check: >>> >>> /* check whether a pte points to a swap entry */ >>> static inline int is_swap_pte(pte_t pte) >>> { >>> return !pte_none(pte) && !pte_present(pte); >>> } >>> >>> As this represents a predicate, and it's logical to assume that in or= der to >>> establish that a PTE entry can correctly be manipulated as a swap/non= -swap >>> entry, this predicate seems as if it must first be checked. >>> >>> But we instead, we far more often utilise the established convention = of >>> checking pte_none() / pte_present() before operating on entries as if= they >>> were swap/non-swap. >>> >>> This patch works towards correcting this inconsistency by removing al= l uses >>> of is_swap_pte() where we are already in a position where we perform >>> pte_none()/pte_present() checks anyway or otherwise it is clearly log= ical >>> to do so. >>> >>> We also take advantage of the fact that pte_swp_uffd_wp() is only set= on >>> swap entries. >>> >>> Additionally, update comments referencing to is_swap_pte() and >>> non_swap_entry(). >>> >>> No functional change intended. >>> >>> Signed-off-by: Lorenzo Stoakes >>> --- >>> fs/proc/task_mmu.c | 49 ++++++++++++++++++++++++---------= -- >>> include/linux/userfaultfd_k.h | 3 +-- >>> mm/hugetlb.c | 6 ++--- >>> mm/internal.h | 6 ++--- >>> mm/khugepaged.c | 29 +++++++++++---------- >>> mm/migrate.c | 2 +- >>> mm/mprotect.c | 43 ++++++++++++++---------------- >>> mm/mremap.c | 7 +++-- >>> mm/page_table_check.c | 13 ++++++---- >>> mm/page_vma_mapped.c | 31 +++++++++++----------- >>> 10 files changed, 104 insertions(+), 85 deletions(-) >>> >> >> >> >>> diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c >>> index be20468fb5a9..a4e23818f37f 100644 >>> --- a/mm/page_vma_mapped.c >>> +++ b/mm/page_vma_mapped.c >>> @@ -16,6 +16,7 @@ static inline bool not_found(struct page_vma_mapped= _walk *pvmw) >>> static bool map_pte(struct page_vma_mapped_walk *pvmw, pmd_t *pmdval= p, >>> spinlock_t **ptlp) >>> { >>> + bool is_migration; >>> pte_t ptent; >>> >>> if (pvmw->flags & PVMW_SYNC) { >>> @@ -26,6 +27,7 @@ static bool map_pte(struct page_vma_mapped_walk *pv= mw, pmd_t *pmdvalp, >>> return !!pvmw->pte; >>> } >>> >>> + is_migration =3D pvmw->flags & PVMW_MIGRATION; >>> again: >>> /* >>> * It is important to return the ptl corresponding to pte, >>> @@ -41,11 +43,14 @@ static bool map_pte(struct page_vma_mapped_walk *= pvmw, pmd_t *pmdvalp, >>> >>> ptent =3D ptep_get(pvmw->pte); >>> >>> - if (pvmw->flags & PVMW_MIGRATION) { >>> - if (!is_swap_pte(ptent)) >> >> Here, is_migration =3D true and either pte_none() or pte_present() >> would return false, and ... >> >>> + if (pte_none(ptent)) { >>> + return false; >>> + } else if (pte_present(ptent)) { >>> + if (is_migration) >>> return false; >>> - } else if (is_swap_pte(ptent)) { >>> + } else if (!is_migration) { >>> swp_entry_t entry; >>> + >>> /* >>> * Handle un-addressable ZONE_DEVICE memory. >>> * >>> @@ -66,8 +71,6 @@ static bool map_pte(struct page_vma_mapped_walk *pv= mw, pmd_t *pmdvalp, >>> if (!is_device_private_entry(entry) && >>> !is_device_exclusive_entry(entry)) >>> return false; >>> - } else if (!pte_present(ptent)) { >>> - return false; >> >> ... is_migration =3D false and !pte_present() is actually pte_none(), >> because of the is_swap_pte() above the added !is_migration check. >> So pte_none() should return false regardless of is_migration. > > I guess you were working this through :) well I decided to also just to= > double-check I got it right, maybe useful for you also :P - > > Previously: > > if (is_migration) { > if (!is_swap_pte(ptent)) > return false; > } else if (is_swap_pte(ptent)) { > ... ZONE_DEVICE blah ... > } else if (!pte_present(ptent)) { > return false; > } > > But is_swap_pte() is the same as !pte_none() && !pte_present(), so > !is_swap_pte() is pte_none() || pte_present() by De Morgan's law: > > if (is_migration) { > if (pte_none(ptent) || pte_present(ptent)) > return false; > } else if (!pte_none(ptent) && !pte_present(ptent)) { > ... ZONE_DEVICE blah ... > } else if (!pte_present(ptent)) { > return false; > } > > In the last branch, we know (again by De Morgan's law) that either > pte_none(ptent) or pte_present(ptent).. But we explicitly check for > !pte_present(ptent) so this becomes: > > if (is_migration) { > if (pte_none(ptent) || pte_present(ptent)) > return false; > } else if (!pte_none(ptent) && !pte_present(ptent)) { > ... ZONE_DEVICE blah ... > } else if (pte_none(ptent)) { > return false; > } > > So we can generalise - regardless of is_migration, pte_none() returns f= alse: > > if (pte_none(ptent)) { > return false; > } else if (is_migration) { > if (pte_none(ptent) || pte_present(ptent)) > return false; > } else if (!pte_none(ptent) && !pte_present(ptent)) { > ... ZONE_DEVICE blah ... > } > > Since we already check for pte_none() ahead of time, we can simplify ag= ain: > > if (pte_none(ptent)) { > return false; > } else if (is_migration) { > if (pte_present(ptent)) > return false; > } else if (!pte_present(ptent)) { > ... ZONE_DEVICE blah ... > } > > We can then put the pte_present() check in the outer branch: > > if (pte_none(ptent)) { > return false; > } else if (pte_present(ptent)) { > if (is_migration) > return false; > } else if (!is_migration) { > ... ZONE_DEVICE blah ... > } > > Because previously an is_migration && !pte_present() case would result = in no > action here. > > Which is the code in this patch :) Thanks again for spelling out the whole process. > >> >> This is a nice cleanup. Thanks. >> >>> } >>> spin_lock(*ptlp); >>> if (unlikely(!pmd_same(*pmdvalp, pmdp_get_lockless(pvmw->pmd)))) { >>> @@ -113,21 +116,17 @@ static bool check_pte(struct page_vma_mapped_wa= lk *pvmw, unsigned long pte_nr) >>> return false; >>> >>> pfn =3D softleaf_to_pfn(entry); >>> - } else if (is_swap_pte(ptent)) { >>> - swp_entry_t entry; >>> + } else if (pte_present(ptent)) { >>> + pfn =3D pte_pfn(ptent); >>> + } else { >>> + const softleaf_t entry =3D softleaf_from_pte(ptent); >>> >>> /* Handle un-addressable ZONE_DEVICE memory */ >>> - entry =3D pte_to_swp_entry(ptent); >>> - if (!is_device_private_entry(entry) && >>> - !is_device_exclusive_entry(entry)) >>> - return false; >>> - >>> - pfn =3D swp_offset_pfn(entry); >>> - } else { >>> - if (!pte_present(ptent)) >> >> This !pte_present() is pte_none(). It seems that there should be > > Well this should be fine though as: > > const softleaf_t entry =3D softleaf_from_pte(ptent); > > /* Handle un-addressable ZONE_DEVICE memory */ > if (!softleaf_is_device_private(entry) && > !softleaf_is_device_exclusive(entry)) > return false; > > Still correctly handles none - as softleaf_from_pte() in case of pte_no= ne() will > be a none softleaf entry which will fail both of these tests. > > So excluding pte_none() as an explicit test here was part of the rework= - we no > longer have to do that. Got it. Now my RB is yours. :) > >> >> } else if (pte_none(ptent)) { >> return false; >> } >> >> before the above "} else {". >> >>> + if (!softleaf_is_device_private(entry) && >>> + !softleaf_is_device_exclusive(entry)) >>> return false; >>> >>> - pfn =3D pte_pfn(ptent); >>> + pfn =3D softleaf_to_pfn(entry); >>> } >>> >>> if ((pfn + pte_nr - 1) < pvmw->pfn) >>> -- >>> 2.51.0 >> >> Otherwise, LGTM. With the above issue addressed, feel free to >> add Reviewed-by: Zi Yan > > Thanks! > >> >> -- >> Best Regards, >> Yan, Zi > > Cheers, Lorenzo Best Regards, Yan, Zi