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]) by smtp.lore.kernel.org (Postfix) with ESMTP id 953E3C83030 for ; Mon, 7 Jul 2025 05:28:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 374768D0003; Mon, 7 Jul 2025 01:28:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 305918D0002; Mon, 7 Jul 2025 01:28:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 19EF88D0003; Mon, 7 Jul 2025 01:28:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id F411A8D0002 for ; Mon, 7 Jul 2025 01:28:42 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id AB6191A0372 for ; Mon, 7 Jul 2025 05:28:42 +0000 (UTC) X-FDA: 83636338884.09.B113B3C Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2084.outbound.protection.outlook.com [40.107.100.84]) by imf15.hostedemail.com (Postfix) with ESMTP id CF7C1A0004 for ; Mon, 7 Jul 2025 05:28:39 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=fail ("body hash did not verify") header.d=Nvidia.com header.s=selector2 header.b=LgtoWNEd; spf=pass (imf15.hostedemail.com: domain of apopple@nvidia.com designates 40.107.100.84 as permitted sender) smtp.mailfrom=apopple@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751866120; 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=1M/H0MDVaJqVttXhFkirdNkwhrcnlhQaBcdHZlfW5zQ=; b=wMDwruBDFmfmuPPwfEuY3goFSHAfHnn91TmpE4fklzZGw/oADc56+5hZvzCmCI4VYVnfiS EsXvT3A67qOylbPDj4jbbJTUbRB2GZRLt6VknBjnc6ZMR15/S91DMf1BpGrvnTvla+yEzb VoAZdyVo5xF+eW5eKnSPkUaM+GNOTaE= ARC-Authentication-Results: i=2; imf15.hostedemail.com; dkim=fail ("body hash did not verify") header.d=Nvidia.com header.s=selector2 header.b=LgtoWNEd; spf=pass (imf15.hostedemail.com: domain of apopple@nvidia.com designates 40.107.100.84 as permitted sender) smtp.mailfrom=apopple@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1751866120; a=rsa-sha256; cv=fail; b=ERexH3leKLmwTr5+1kggohuwcxdUXdlvZbnEQBaayFINdtjVUlbrPju3cy2eCf/rGHNgJB fagFZI8epOzRrqLfUW2sDCAe48ytxGODgLG2ltVYvISvc3HDAF2CiriBb/5kvOeXKY0jEc DNIAMVeJYkw+ObYDsYmgmKkd2Q3wrV8= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hZtf1NwpglQSlXO3wh3De7odNYVicI8hUqBiehRE6oHDRGdwGW982eLO+FfG2637n0/sZO9ezUUW5pfMDm1ms5ul06Vwtm6Jp4be8ON1Qpy7/IeOB3q4/FzMznOGXDlnERqqE3GzSjHfRPxCXmGoFpjsBrMvA5S8FRSGbwA6B5n7FdsOeC7HidTOjR6AvqJykQVmcgh3xpUkwNQ1D7olrdK8WPseNMYWAnVX0QBRWl0ow4PwKjt2RV/hLgdpfIHGpYU+9MekYbHuz2GsklTqGYyAuuDDsrRH6CYWDr9F69eg1tJc9hCtswtK/sCk8HAN7H4I6y52Gd6ReDf1iJPcQw== 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=lRVu2/2VTOfDNclvFsJ/oVQwSc3bDxFxilInfWqhKf8=; b=c5ZwU9FT+LHDEcAQo5834qxiimYYsdj/mRBunih2n7wPee+x5+mT52+lRsDnTAOPxKcre1S+tn8p4abInJMKFwwktLx38PmNofv7b6Dntzo0hdK2mznrPtPPZf2SnggIEsxOahn8aXDXmF6tTzEDW7+49J/jL/bK/oLQO3OKQB4YOzYz39qXlHJQYcPrasrptJbWWY3k1fQ/K1HYTv4VfztLg0pG8xLd6UKCqbqUK8+WQkVFoWF55SK+QZeucYVlcTHOLfYlpkZYFemNe6u33nhndV121RgEMTYPlBTenXUtBCzusM5YMn0xovd4genRONLc/Os8RYrxYBBKf5sbbA== 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=lRVu2/2VTOfDNclvFsJ/oVQwSc3bDxFxilInfWqhKf8=; b=LgtoWNEdiGvaO0jxVmtInq42q1q12J3EgP1m4Xsp0mfYerGBnz3UFJ2Ud0Ly/D4aMnNiijUpPk/jyBkTA9Z4r100Iz41xv83ASW9mD7Fl/azeLO2cBXqzPep5yoadTEPjX8+wpcpspyOiuCojdN9xDo+OOChrIaNrgFD40pTZpc/dsxVHK60bUKMbkJR+FxwPz8SN0tYrH0AsKkFuG7K84krfoG9U+8hFxsso/QN7n5wEtq7oQNyft09SJACnxd6e18TkzcQoDTsW+oqCUOjQyw0PIBAveFjq2gq+pcJ1G+0Do5xY8GKzpgtOTdsBHCrkmk4v+CRg8dRlHij3lUNRA== Received: from DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) by CH1PPF68E8581EB.namprd12.prod.outlook.com (2603:10b6:61f:fc00::611) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.24; Mon, 7 Jul 2025 05:28:35 +0000 Received: from DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe]) by DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe%3]) with mapi id 15.20.8901.023; Mon, 7 Jul 2025 05:28:34 +0000 Date: Mon, 7 Jul 2025 15:28:29 +1000 From: Alistair Popple To: Balbir Singh Cc: linux-mm@kvack.org, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, Karol Herbst , Lyude Paul , Danilo Krummrich , David Airlie , Simona Vetter , =?utf-8?B?SsOpcsO0bWU=?= Glisse , Shuah Khan , David Hildenbrand , Barry Song , Baolin Wang , Ryan Roberts , Matthew Wilcox , Peter Xu , Zi Yan , Kefeng Wang , Jane Chu , Donet Tom Subject: Re: [v1 resend 01/12] mm/zone_device: support large zone device private folios Message-ID: <2lhuidibe4vn2wvoswvf5s35s6yv5iflgkwo7c6q6uvy3khe3a@qsunrew5l4re> References: <20250703233511.2028395-1-balbirs@nvidia.com> <20250703233511.2028395-2-balbirs@nvidia.com> Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20250703233511.2028395-2-balbirs@nvidia.com> X-ClientProxiedBy: CH0PR13CA0005.namprd13.prod.outlook.com (2603:10b6:610:b1::10) To DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB7726:EE_|CH1PPF68E8581EB:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e564c69-261f-4f51-d180-08ddbd171dd1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|376014; X-Microsoft-Antispam-Message-Info: =?iso-8859-1?Q?66NY9LSph7xTUD61bL0AlrZ7UUiFEEF5RqD0n8iOkq2acXUu7jFRf/SjNW?= =?iso-8859-1?Q?4N6ncY2T9Wiqbi0xS2S/zFiBIoKugrqI3UoSUQvzY1FIUMEUihyt9NP6qy?= =?iso-8859-1?Q?CXhaaKa0mKg34xWHiIhFr6bY+Hy3NJn/OvmKQ9ADZG5jKKMWLOfK9c8iC3?= =?iso-8859-1?Q?XecI8oLGcjilT3WREO/b/sD+C6InNZp7TEcqWO1LUtMNv0mCEBZT0dsCzD?= =?iso-8859-1?Q?x/xgvjLN/LqJZsQVZzLjNUQ8e/uI9QCJ0orxXEvkHSBrERkBkbNdYSPPZf?= =?iso-8859-1?Q?UH/lbYRYDYoG0PhM6zWynD0pV2vP3SYrDn2zJ81rp6+t2Wk8JkKwNMtocK?= =?iso-8859-1?Q?7aI/qjregNd5cZbNOqioHij9P83krZiOzdmnwj4lTY2goEgi6kQ418fci3?= =?iso-8859-1?Q?XLS034jr6QPyVXtxmr3oEn2KRnyM+tjLKIJkGEmi8hNsLyJ5VOdeJI4in2?= =?iso-8859-1?Q?Z+azF6s+1rHribMSuwo/iZaH2u5TPShz8xEfPP4lqapqomtjlSVB2UYnN6?= =?iso-8859-1?Q?4ZnTL0U4QhHOu+m1O8bkhca0BvfGYbCev4MLw3P5uLTMIu1PBfFXCIgnuY?= =?iso-8859-1?Q?hcNyP9uD9+7WvBAKLd+8sWLvufLGHJmm6ZpP6lKyaMRRoJfowOenIFfvjZ?= =?iso-8859-1?Q?67sBvkoCyu4ISmjd4y6wN7E8NaHqW7TqexKnkVAwzQmgF+zSKVYAYq0aqD?= =?iso-8859-1?Q?hs64aznTl/0IN0dmYqBwlwmHl98G+PQe3g+PiLhSFSQOBqoB+xBN2Hhs42?= =?iso-8859-1?Q?2buVo1g3/umgVMougvzMM1mmjFjHdB5brDLYCDK1sI36p781VVVFAICUmN?= =?iso-8859-1?Q?qOdOX1je4km8FL220tK/5OdqBUq0REgDbjK4LcSSCVlor6UCS6txk6z7Jt?= =?iso-8859-1?Q?AqLLDpf+dzWoafVWwFRd3RBB5ZWbKR0b6YVlJOPsFiP/3ouEpaZtRjdA4h?= =?iso-8859-1?Q?u7QLNmSRnXj/dQLDoLvIfAAOaDH3uFD17bDniZ3BSlkfSo76WYaAZYUpgT?= =?iso-8859-1?Q?CBO0Kg5BW04b4yMxz/jOgzXD67WXDYdt6fhxxN1YYQpB4L+F3phAX9vRU7?= =?iso-8859-1?Q?TRR3K0Em8xApgV0cGz43ZFLx+u2HLayo1vSdZNeQv0CMRV1+RwhNrEktIq?= =?iso-8859-1?Q?ti/I06ZmlIAPYSJ7flL251qzPqy6lxDWVjDl+83iypnzeSpBlvVFQnUr1k?= =?iso-8859-1?Q?hdRYGMf7RLgsCuvxMxa6iXqL0ydZAjz+2EZv4ikqmyn1c7t4NiyDG82+1z?= =?iso-8859-1?Q?ob4YM5F/62Q213oVSwnPalVbrO+Uue/iwexftpdcCBB8uBtIfssYE64hq5?= =?iso-8859-1?Q?JhbeNBcF/nSTNv9ZNJipO4ebYQ18bTNE8ydZGMW68RpGaKpieUN/wYVlwd?= =?iso-8859-1?Q?ybJ1Ft61kI7B+P1n/4vJS24O2T8Xnz59/CUniOpnpshV7nOMlHAT6ugq3m?= =?iso-8859-1?Q?WBf1A2TJK9EXXo/i+2a1jC2fCbjZwf8Cm2QfShuXxqb73/kDXUCCYRhuCM?= =?iso-8859-1?Q?o=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB7726.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?iso-8859-1?Q?7O2XcXvy7BGzO1MWF5sOmHGcRTGyi50urtcEZcYP94j7RKzT3/tN34zGaB?= =?iso-8859-1?Q?fk4LaRsnMLzG6BvRDY9V4TTj1N4KFnh0fCDm51Na9gjjqfznUJLX7wtznd?= =?iso-8859-1?Q?iCSVS6FhWvVF4iZULkmQzv3V0LYUrybdyUCHERQZbHgluWCGgANAxXgqmk?= =?iso-8859-1?Q?ukkYoNsHs//ejJggmdGP0PZqrWAZGi808nOQ3nz/RSmD6PnEiZUdLvDxhF?= =?iso-8859-1?Q?l4MK7A0zCJzMTs5chcGnEsysncYUt/1tHgq5ba61Ptw3HlxW0kc1r0OJHJ?= =?iso-8859-1?Q?eTbSKaDQJ0vUJ9VOdzqshVu3K/0rF6La64FgpXVFR7u+X/ZyJQyRDwZieJ?= =?iso-8859-1?Q?Vq9H5gT/E7feuDtP+ffwRaqU2Yo/ib9cYzcfXPy05bzlulQNM1hxBBlVrh?= =?iso-8859-1?Q?gzh8ScOLXNxODQAz7sRaONEG33Ujn6yxDUvhV/FDFB3Zv+bBJO/rfPIZz3?= =?iso-8859-1?Q?sEEbDFIvuKjzpf1czByTK88qbDyhi/pzq/9XuCv+NR0bl7xZaCb9SBBmjd?= =?iso-8859-1?Q?wIy7+AAAEWIJB+b3TPLj4Z5iVwk/AyrPfo7+AEhfREk0xism54rbaa985u?= =?iso-8859-1?Q?ynMjOlQFl00eh3FxU8G0y6EfK38qn5ro7fsYDXz2Opc08CbeCUcC97xJ//?= =?iso-8859-1?Q?0P1W4B+65AoXzKmIsxtgnDtGyt//nriJUImPFVnScgUGP46lz/qeExSmtT?= =?iso-8859-1?Q?NtNsyHGiycqesEJndpi9spSMNMizKK0h7RkKcGXDslrd47RZtK4IU39wUC?= =?iso-8859-1?Q?Km1kt3ml0P7PpkXTKqXBv/HlE5CO1Q2C5upZTMqtmdJ55no9TYdtJ/AvPC?= =?iso-8859-1?Q?D6Ou7gj09EYJPRMx/1WOdoll1vuI3t2ObW1AbR+Oh7NfFAmmeWERfiadlA?= =?iso-8859-1?Q?Y5eUjiMIIYsiUaT+kmSmYaDBrjJB3eC3K6DcRy8JEZEn2dQtv5MBdTuVUc?= =?iso-8859-1?Q?DKIg3g8p20x/LS0743LjYJ4P6nTysPpuKrEAQqSw4IahVhjSA5KoMjshkq?= =?iso-8859-1?Q?R/gjuKlBYstlP4Tb9TyrhE/1f5vbJwkN7xIXSX8Pag+GTf9b4yQtItJis5?= =?iso-8859-1?Q?qcK+nseYW7rhibNqRnzpa7RRsqJwwMxX6NZMVRysvw8r7/94Mo/XsPcz2y?= =?iso-8859-1?Q?p3dnsWitpbtgRIouxu28sugP4k14vfoI8/vrHatqiBQX5lApt/3ACIzapk?= =?iso-8859-1?Q?jXlJFipqwDzE0O8V+swIxAcJhosihiRK7Azx5LyNSHFjwTyWbqzMzX4cDP?= =?iso-8859-1?Q?fnZrfNWGpJ1PcN2pH6SaH+TWtAHRcnDrBrC7RgD9EdEGvcWY7qmRgWUQ+w?= =?iso-8859-1?Q?LIOakHcXFnw3XPQ9ohO/kSQAMuba5fkfdKnBuwYaDEco5ZmwZJ65Msk1wQ?= =?iso-8859-1?Q?2hXyXW8JvNx1QBB+K5riPNVxSoVyB/K9KLl6tHFEuW+O9+T5qIUt9i+0Iq?= =?iso-8859-1?Q?f9cze8OSKtS1hRsjbukoKA2g3tmkTUYqPhPP4EhSd5T04zz0PjJrNmmuHU?= =?iso-8859-1?Q?hmKWV8GpFn+0aDO00ujVlBrPm1P/as0OwBEKNI+XoBZ8r6vKQJRB0E9Eac?= =?iso-8859-1?Q?H8VYf7UpbPhU33nXjZ5bv5v4aNYG9C03LjWTo/XW16JkJNYL7WqU0r4qkX?= =?iso-8859-1?Q?uTvjyiqJkdZ0u8OHXG2nTnfHjUNV5BooA4?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e564c69-261f-4f51-d180-08ddbd171dd1 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB7726.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2025 05:28:34.3929 (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: Rl1as8+xNcCfMLoF972OSuZGToYKgJsUi7X68fq63Lu3ywmveJ1jsj+P37s+D97aDHiFHva/r0GtoComSmIGPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPF68E8581EB X-Rspamd-Queue-Id: CF7C1A0004 X-Stat-Signature: fgtn43m6fsmctgx33sgydas3tyj5h85e X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1751866119-234733 X-HE-Meta: U2FsdGVkX19AgmdiAgx7AbkEAT0wMcPBbAuF1X5nfVNP4IsG/CR4SnSCKWdHvOXm/OU8d7HHbMfB93CqWGW4kFCnCR7Dcwo7TSMwpaJQ9PO3zEQiC7oS8gvjupjelng6EJYCAA9pDth6wAKOVDfZv/ZYntskidIFrp+wc1y7tOjetnKBKAfpfxYhBp0ITZd9zy0D6GqvlhoWVXVMeX8BZebIzGJtrT57YrCDn9ve/KFU521uUI/8e8Jo+G+y+1lbps5L863QPqkV6AqrKR2GN1EbEeOc5YrNPvvwCL+v5tGqeEpjr+nOvC9zKSS3Y+vW+knECg+RWJzIaA8Ez4epIa0y/lXTgcH2eW1BwVJ8NVPakfgiuGAl8i9KsMmkyKfNhKE/gXssXkMyRgXrylsE/QLnKjPApQ1HfIf24b3ioQNrtitYe4tr/AB4QjYjJ+L2XBw4nUWGFsIw1P+jW+cyoYd4YpoQ59KCeYD6+Auvm4XxulacbydqfnJEba0gLWCt1ccpPPCogOedLb/GW0hkvPIhlwkW4Pln8WIf4F1OIJoRV/E3oImDDb974xp3sOK6APDjRP7Vch0bmkr8r4Yx9Mq/H4z94pUEt+ZHX5x53HI2LtFWjXEX0P+zYrEedMGzIo0QN7I2oXsCqRTzzz7WW24JBP0qJcxn+88wONs0xJvAHs9wAJo+/Gxpp6lhn4mojVovKrfqX1N4Iin0p6ZkQ43x6y9EPA4JG5K8za89Vh9V/TCG8KcXsd2fPcklliMCoyey796UEsfYQR92llyIwHPaA3jlz6kAxfpZzpkrMoVDoULPuiAaPqyIAlAY0zoZ/hrIXSgl+1sALt09iyOroyMzUi1BvLmizUL4P4yfYKhpLCUdE6uXazSffY0BQ5jKb7cmXyY1LeAZr+qspNIxsIdEZ+KEf0RJO0jF6zogH4+/7L84nFj6WERrdSEuxXC1bbQgEFs/jgWUTAwRTHD 2O9TO+0O GTAkK/hECAgCl6kpUj9LEXPt/LbtVQwqKAC05wkuwFnSg4RjL2uGxLhpO2zOmqPJXPZmEurCQDQPCCi16nluGD/uaqWYQkK752jk0UZ+CpGQLFaD+aHLdEEYZgnoctBTw3f+pBXRrGzmkmBBAtNL1mvxf/7BIp6aURg/uUuDuGDWcWjFYsXqjNMUe1QaGHpPkJ6vxYAIiWAUaLRFfGS8WkNyRo0KJCwImlEkEwGjEkTpP997yuU+4H1b2dHucuuDsgjdpcNZCuiWZEQTbWQIyYuynF2mE3rWDXYcqOoulFnhQuQVSgxz5xzUtXzHnW6d2kpVg+0R4Eb6PCnTlXPGkCC24tzl/oKMbgJ5F5+O8cLu0T0GhEc+iVZ+RAAEicbpCWOWgBk3ffN1BF6d57CiyecCaeNXA6YFOAd3ufJBOs76zzut9D69s5V+O3wTREcBbSWCkj32FjYT0Gj1ML8kjSnK+ilt0z6Io1UJ73ZYYy5UyiqGEPGhtkazmIfyNeEOBEj5zL3jMiCHOMDprd7JSoXCdiQfAB2H7y8A4OtQttCWQtfo0MwEtxIPTFb/acyk/+ujhRWa2UxA1t5sJTi/+IRRXQRQqv00IGyOPNsQGOvl9nu0iEx0XqGMcAe3YxHLiKJGzPCylAof7x8/l++gwfkXN5SkOOeVczTSTSHcrufEM7rg8mxPtPLOz7ODTd0LdP2T1Q0ApyJsr1cO49TUPIBrRE+W11Z0jK9e7gkghxi+etp4dWsMJRiOvac2wYN5EJgt/bToqLXb0yF+HP/SJWdr7QXZLYRp8hbiu8Uv5mGEVFJn0Ctn0OVXaYp0FsVn7Sozh7asCdubnGqILC7SvsVV26sUzZCmUSBw1ax783sozXdwDKL0cleMJquKGI2UWy7lYnwWGhlrVOcv2re0mxX7bTD2BzzI5mj4xh6JkcHr4WsXD2uRvr8/BKUeGt8LwN+qGewQdF7OedQI= 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 Fri, Jul 04, 2025 at 09:35:00AM +1000, Balbir Singh wrote: > Add routines to support allocation of large order zone device folios > and helper functions for zone device folios, to check if a folio is > device private and helpers for setting zone device data. > > When large folios are used, the existing page_free() callback in > pgmap is called when the folio is freed, this is true for both > PAGE_SIZE and higher order pages. > > Cc: Karol Herbst > Cc: Lyude Paul > Cc: Danilo Krummrich > Cc: David Airlie > Cc: Simona Vetter > Cc: "Jérôme Glisse" > Cc: Shuah Khan > Cc: David Hildenbrand > Cc: Barry Song > Cc: Baolin Wang > Cc: Ryan Roberts > Cc: Matthew Wilcox > Cc: Peter Xu > Cc: Zi Yan > Cc: Kefeng Wang > Cc: Jane Chu > Cc: Alistair Popple > Cc: Donet Tom > > Signed-off-by: Balbir Singh > --- > include/linux/memremap.h | 22 +++++++++++++++++- > mm/memremap.c | 50 +++++++++++++++++++++++++++++----------- > 2 files changed, 58 insertions(+), 14 deletions(-) > > diff --git a/include/linux/memremap.h b/include/linux/memremap.h > index 4aa151914eab..11d586dd8ef1 100644 > --- a/include/linux/memremap.h > +++ b/include/linux/memremap.h > @@ -169,6 +169,18 @@ static inline bool folio_is_device_private(const struct folio *folio) > return is_device_private_page(&folio->page); > } > > +static inline void *folio_zone_device_data(const struct folio *folio) > +{ > + VM_BUG_ON_FOLIO(!folio_is_device_private(folio), folio); > + return folio->page.zone_device_data; > +} > + > +static inline void folio_set_zone_device_data(struct folio *folio, void *data) > +{ > + VM_BUG_ON_FOLIO(!folio_is_device_private(folio), folio); > + folio->page.zone_device_data = data; > +} > + > static inline bool is_pci_p2pdma_page(const struct page *page) > { > return IS_ENABLED(CONFIG_PCI_P2PDMA) && > @@ -199,7 +211,7 @@ static inline bool folio_is_fsdax(const struct folio *folio) > } > > #ifdef CONFIG_ZONE_DEVICE > -void zone_device_page_init(struct page *page); > +void init_zone_device_folio(struct folio *folio, unsigned int order); > void *memremap_pages(struct dev_pagemap *pgmap, int nid); > void memunmap_pages(struct dev_pagemap *pgmap); > void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap); > @@ -209,6 +221,14 @@ struct dev_pagemap *get_dev_pagemap(unsigned long pfn, > bool pgmap_pfn_valid(struct dev_pagemap *pgmap, unsigned long pfn); > > unsigned long memremap_compat_align(void); > + > +static inline void zone_device_page_init(struct page *page) > +{ > + struct folio *folio = page_folio(page); > + > + init_zone_device_folio(folio, 0); Minor nit, but why not call this zone_device_folio_init() to keep the naming consistent with zone_device_page_init()? > +} > + > #else > static inline void *devm_memremap_pages(struct device *dev, > struct dev_pagemap *pgmap) > diff --git a/mm/memremap.c b/mm/memremap.c > index b0ce0d8254bd..4085a3893e64 100644 > --- a/mm/memremap.c > +++ b/mm/memremap.c > @@ -427,20 +427,21 @@ EXPORT_SYMBOL_GPL(get_dev_pagemap); > void free_zone_device_folio(struct folio *folio) > { > struct dev_pagemap *pgmap = folio->pgmap; > + unsigned int nr = folio_nr_pages(folio); > + int i; > + bool anon = folio_test_anon(folio); > + struct page *page = folio_page(folio, 0); > > if (WARN_ON_ONCE(!pgmap)) > return; > > mem_cgroup_uncharge(folio); > > - /* > - * Note: we don't expect anonymous compound pages yet. Once supported > - * and we could PTE-map them similar to THP, we'd have to clear > - * PG_anon_exclusive on all tail pages. > - */ > - if (folio_test_anon(folio)) { > - VM_BUG_ON_FOLIO(folio_test_large(folio), folio); > - __ClearPageAnonExclusive(folio_page(folio, 0)); > + WARN_ON_ONCE(folio_test_large(folio) && !anon); > + > + for (i = 0; i < nr; i++) { The above comment says we should do this for all tail pages, but this appears to do it for the head page as well. Is there a particular reason for that? > + if (anon) > + __ClearPageAnonExclusive(folio_page(folio, i)); > } > > /* > @@ -464,10 +465,19 @@ void free_zone_device_folio(struct folio *folio) > > switch (pgmap->type) { > case MEMORY_DEVICE_PRIVATE: > + if (folio_test_large(folio)) { > + folio_unqueue_deferred_split(folio); > + > + percpu_ref_put_many(&folio->pgmap->ref, nr - 1); > + } > + pgmap->ops->page_free(page); > + put_dev_pagemap(pgmap); Why is this needed/added, and where is the associated get_dev_pagemap()? Note that the whole {get|put}_dev_pagemap() thing is basically unused now. Which reminds me I should send a patch to remove it. > + page->mapping = NULL; > + break; > case MEMORY_DEVICE_COHERENT: > if (WARN_ON_ONCE(!pgmap->ops || !pgmap->ops->page_free)) > break; > - pgmap->ops->page_free(folio_page(folio, 0)); > + pgmap->ops->page_free(page); > put_dev_pagemap(pgmap); > break; > > @@ -491,14 +501,28 @@ void free_zone_device_folio(struct folio *folio) > } > } > > -void zone_device_page_init(struct page *page) > +void init_zone_device_folio(struct folio *folio, unsigned int order) See above for some bike-shedding on the name. > { > + struct page *page = folio_page(folio, 0); > + > + VM_BUG_ON(order > MAX_ORDER_NR_PAGES); > + > + WARN_ON_ONCE(order && order != HPAGE_PMD_ORDER); > + > /* > * Drivers shouldn't be allocating pages after calling > * memunmap_pages(). > */ > - WARN_ON_ONCE(!percpu_ref_tryget_live(&page_pgmap(page)->ref)); > - set_page_count(page, 1); > + WARN_ON_ONCE(!percpu_ref_tryget_many(&page_pgmap(page)->ref, 1 << order)); > + folio_set_count(folio, 1); > lock_page(page); > + > + /* > + * Only PMD level migration is supported for THP migration > + */ > + if (order > 1) { > + prep_compound_page(page, order); Shouldn't this happen for order > 0 not 1? What about calling INIT_LIST_HEAD(&folio->_deferred_list)? Last time I looked prep_compound_page() didn't do that and I see above you are calling folio_unqueue_deferred_split() so I assume you need to do this for DEVICE_PRIVATE pages too. > + folio_set_large_rmappable(folio); > + } > } > -EXPORT_SYMBOL_GPL(zone_device_page_init); > +EXPORT_SYMBOL_GPL(init_zone_device_folio); > -- > 2.49.0 >