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 7CD07C25B0E for ; Tue, 16 Aug 2022 21:23:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 905876B0073; Tue, 16 Aug 2022 17:23:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8B4AE8D0001; Tue, 16 Aug 2022 17:23:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 72E9E6B0075; Tue, 16 Aug 2022 17:23:27 -0400 (EDT) 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 6334D6B0073 for ; Tue, 16 Aug 2022 17:23:27 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 1BD19161471 for ; Tue, 16 Aug 2022 21:23:27 +0000 (UTC) X-FDA: 79806732054.04.C58DC9F Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2084.outbound.protection.outlook.com [40.107.243.84]) by imf07.hostedemail.com (Postfix) with ESMTP id 7CF3640054 for ; Tue, 16 Aug 2022 21:23:25 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D+RWvoQoXAs7Vezj1g03g+NFGAeijeEL1zrMR6z1ZXml5qL1TuUQKzUAfAP7s5KFZz+G/P2h4655Ypbf551T3Mmdrq1aEmRk/IwRp7b703UfRUyUG1QCwfvbyG+gDDCR1SBIA0opFlCKUBcfLfxk6ftoL81OP4s9HdO0z44vyZkNBnxGzyU6uXx4uVYMXWfatJ2tXDryc/TGY10w3TkzBZnRLwsjAoXkQghQfzhWDOe2IJXcT7EJbZQV6EtdHjf4Z78Gocs6PxJ/V/y07tzWrO7FqJBniCQM9zHExA1bUmP2jcvLpBXxem7BHmzlC/7V9dlHdyF7BoxXEuYHnoRq2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=QAusdqqvQ2458L49m8JiZxRrajlNR2n3cThVbH6xdK8=; b=anoF8TWJP9MQLFd2ZlrLmKAKfa6Vw/4HzqBhGgvGs6oeo96USmirhE5JR22F+cz4oSrBHMLmIte/5p2uDYaLO+cMxW2F0JoHAYPWnh9stjzKU53RSxbVY5ZZIkf86EdSPnu0p6XxertsYaqkhTYA0GoqvW0y634N4J16Jmq1yFuYtPKTnDX9YgQOVwXzgxTJBPjCeHd1BZ9kjkkdsddYZMNqcGiIXLxiYi3iKxeGw8lHoKS7uyQZmXwIHlb4Q35VgKL00qniH09cLWLHGXofxq6GDXKsvB1tsHXT8QbA5aO5prakX1EM83ggkQJHzn86HVDDoQliZWKKXOUGfF2m7A== 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=QAusdqqvQ2458L49m8JiZxRrajlNR2n3cThVbH6xdK8=; b=ln1VHs7aDgrDTld+r8qQSUl1Y63gvdsGPMGg4pYGbsf4NL+D9E3m7zoEytQTxX2iplJNEJ9RoeUN/XfeNFhSS4UKoYBDwe9hA3LrF0apa2eXe4itu5vKWAauZLdwlOGN57xEHKEJYW9SBqlxGdEa8TQeGS2yD+zjM0Blu6AkaJyjeO6I8AJ8DvGyQH0cdUXP/t+1RQhdMVKA27/YoiPC06XW375tOQjVhB1vtIpKYanb14IyJAsKEPC799UGVLug69+1a2YFt5ZNNas+4jybiU7zqn4dk7thd16ZLoPNCfji4uOO7KN8OodObsHoFefAHCGeaYU6mtN/LoTs4mhHrQ== Received: from BY5PR12MB4130.namprd12.prod.outlook.com (2603:10b6:a03:20b::16) by DM6PR12MB3692.namprd12.prod.outlook.com (2603:10b6:5:14a::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.14; Tue, 16 Aug 2022 21:23:23 +0000 Received: from BY5PR12MB4130.namprd12.prod.outlook.com ([fe80::508d:221c:9c9e:e1a5]) by BY5PR12MB4130.namprd12.prod.outlook.com ([fe80::508d:221c:9c9e:e1a5%9]) with mapi id 15.20.5525.011; Tue, 16 Aug 2022 21:23:23 +0000 Message-ID: Date: Tue, 16 Aug 2022 14:23:20 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Subject: Re: folio_map Content-Language: en-US To: Matthew Wilcox , Thomas Gleixner , Ira Weiny , "Fabio M. De Francesco" , Luis Chamberlain , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Mark Hairgrove References: From: John Hubbard In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SJ0PR03CA0202.namprd03.prod.outlook.com (2603:10b6:a03:2ef::27) To BY5PR12MB4130.namprd12.prod.outlook.com (2603:10b6:a03:20b::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 165157be-8999-46b2-2a4b-08da7fcd8c79 X-MS-TrafficTypeDiagnostic: DM6PR12MB3692:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YcTG+TxUee+Bi0xWJT9WX06hq3ea3Zu8l53xD9miiqJ1sjxV78GqutEFDIjlgkJO2nqiioK1PlUhcKx8vvUUiZon2VG6n5ff9CVM6W02USo83QPta8596ADlDFL6tpL1DhCvQl6ImjtQcW4RMC4EJv6VD3B6Uxxl+1Q6mkvE4XbflkADt9FdMVCWI0oM7nGqvbGBXc3AuNAtIDY0uTRg3ZZn7XV4ugYVcacI5igxue1JV4bK0aXK191Qas+2L/zmqOZTI7Y1ZnyX2FZX75eySQ9LqP8EW9W0bIc8HL4IlRyUvKNibw6iC/IB0A51+toDlOH5JquFkHip2bq2UCPQA5Dgo6d9sTTCmEVS0T+SvPManp5ik6MeWD1mUzJi9b60mJY4ivKVB8GNRoreUuJV9rKq1Y/FPlTvyClfz2lU9XheTqyie66P2a+z3tm3uWXk8m2TndReWVj72lRGR8BPG+kNh72ye7oRW7vB8hiBGGXoOe1KJvREF+GJ0kEyMAnOU3l6IsWz4QoIeG/ysC96cUwSHFqTu+fRuPuZTdnVq95gHkKdBi7lp5DqHX6IOH83hm/OrCPdIMgpkQhhxdbdAFK39AsJZy2nR0VfTx7g6ceGVfO5D3FCCIoZyHLs/zmknN09bSlbqRiUIhTxc8HXhSzzMckQPm84n67sabnE3CxAPgEFMA13mEXsEEFsEKTApXeVUWlI7utbOK6cR1YdXvvKUxXW9El5kz49d91NEUEICTe0wh+Tcn7KtvY2fAKmzbBQQ1fmlLcHTHbSmYh6t0SXRyRvf6hu0tF/Bkbl/ec3xOjgELLAb2evkzit/zATzlAMwxA6kZiyaHFmrF0ISw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR12MB4130.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(366004)(346002)(376002)(39860400002)(136003)(2906002)(8676002)(66476007)(7116003)(110136005)(66946007)(316002)(66556008)(6636002)(8936002)(38100700002)(5660300002)(478600001)(31696002)(86362001)(41300700001)(53546011)(6506007)(36756003)(26005)(83380400001)(6486002)(6512007)(2616005)(186003)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NTlNUHltSzJvUGZwWVFjRGJaZmZQRWZSL1c3MU1LZ3FYWE90SW9QQ1VCNnJ5?= =?utf-8?B?UzF6MGNsNzVtcHBRd3hGR1NJMk9jMGlwNUc0ei8wUy9zYVgrV1hhK0NSWmwr?= =?utf-8?B?dnJMcCtWVVZpM2tGVjZyZitYZXZPa1lhOU5DdHZDbzZpelJFdzhHdzlabUd6?= =?utf-8?B?d3d1YW43Y0RBS0Y0ZjhTSzVqWlVvcmVZUHlET25tMVh6a0sxWnZPczNKb044?= =?utf-8?B?eGlwWEg3SlQwcVlwOFpESXAzcEs1dmVCa2RKVVNja01ZU0F4aGNuVGs0bzhs?= =?utf-8?B?UTA2VWNjejhwUlJabjE2ZWNjUjhJWU8wbGV1cU5GaiszdE4yZGJrWXJpWnVF?= =?utf-8?B?OFhZZ3RUVjhvQUFKazZLbDZ4d3NXWml1ZVBIS1hURTR2SFIxZ0paRjlOQXNG?= =?utf-8?B?SFhPTFBxMUFITEdWeWxUaDlLblVITDNENXVmR0xHemsrU2FNWTc2cU9UaDNL?= =?utf-8?B?c3ZrNnhwd2ZWWlA5U3AwY3h1elhvOU9jdlhLWHZya29RNjNGbGxxUHd5dWox?= =?utf-8?B?Um5xeHUvQzMrVHJsKy9jUytiamN6eWZDbktUZSsyWnlSclp2UklDWmRDN1Nq?= =?utf-8?B?Z0tpb2ovYmdXWlJNbnl1bS9INm02NFpGdTJ4SXJ3R0lTQ1dHUG8yRVRBQVZM?= =?utf-8?B?ekZhdzJhRmcvNGIrMkxFeVZBczZkT3lhNlFGZXhsUDBabTJ2U0laMC9XYnMz?= =?utf-8?B?ckdKY2hhZ3pFWWJNMGkwaVh2UXdKaE5vd2x5S1NVcDBacVVuYTh4bDNmc21D?= =?utf-8?B?WUVmM2E5djkwQ25sazl5blZ5UWdFdzVoQ0lqT21BODBrVEZ3MFBzVndzL2l2?= =?utf-8?B?SUZ0MWI5NGhQWXRFTnU2Zy9DUXhuV3ZIY3dTMkdqSWRDSmJLMGplMm5zQ0hD?= =?utf-8?B?MkpxeG9aMjVhdzl1dy9PT0hCTEgrMm9tckZvK2NGRGZqb0N2emZKNldtNitW?= =?utf-8?B?L05pMGJEVGlTV3NoTjVLbG5xMWxWbVZRaUdqN1JDREdKZ0lGZE9ZckR3RlJy?= =?utf-8?B?SDVYZW1IOC8ybmg1OHNRMVRodHZzMUMwNWlFYklsdDU2M3ZpU0p1TWtLaG8v?= =?utf-8?B?M085WjlaaGMwNWpGZnVUZFp4YTczYlV0azRaY1NnNmVoR2FubXkvM1Z2emRO?= =?utf-8?B?eHluN204Sk9WcjF4amg5Y1hVUS9qTHEvKzVCUVhMcUFsMzdWUUdPK0grZzA5?= =?utf-8?B?aktNaUxobW5yMEVub3JZRGFFWm41WXB1VG9Xb1NGemtnSWJ6bnd0UXdJMnRl?= =?utf-8?B?NjZlY0Frck9Ra0lBQWdWTTlLUkZybWtNbG9Jb1lRYkxvSm5ldGJ3M3NqWUx6?= =?utf-8?B?ckJYN0w2dWJZV04yRy92cTFCaXBKTEpDSWhDRjdWRVlVMGcydTNmOFBIeWJD?= =?utf-8?B?UC8xeGZTamIzaTF4SlZjS2VxTndzYks0M2pyZUJwc3o0TDJwcHRzTXJKalM3?= =?utf-8?B?UW1CSzhBSEdvVW5weVA2NXFGS0tXelVlaEZRNFhsbUcrUDVHa3hUUjBpbWhH?= =?utf-8?B?NGlndWZNZTA1Y0M2TzkvUmRYOXpYcWMxSVpzNytjdzFHUUZFTFdsWVduQTdJ?= =?utf-8?B?OW1KMTRjYmVTakVSbU9ZNlpBeDBkNmFUelZyY1pNeFE1YWJmRUZkVjJSV2gr?= =?utf-8?B?emVqTThHNWZtdkxLM01QZm5DMEtEblVKZk9GVWdEYVpXVXpnMG5uRHdyZFhO?= =?utf-8?B?djJQcDJueElnT1NLL2VRd2pPVHlOTUN1bm04cjZhNXdrMEs1MnVEK1JpcEhr?= =?utf-8?B?eU9RalZJSUlUdU9LdTBnWWpjdVFKa1FudXRVTTdDams5TWg0UWh1bit6aVUz?= =?utf-8?B?YW5BMzRGbWdhM29uTDlPcUdYMW9rc1NlQThUVXpKbTZRZmdFaXNoY09oejIz?= =?utf-8?B?bzZURWp4dHFmTEpvbHZEbC9kK2QzVS8yVWZYM0lUSzd2VGVFZnBtZ1JrUUdi?= =?utf-8?B?WC9xTitkRnFFa1JOZUc1dlptdlpxcTdCd1NCd085M0twL1dJQTJVSFNXQVRq?= =?utf-8?B?aUl5MnMwc2dYcUt6RlMxckl5WHVrQUpCa3paSitrWHlJQTRNZy9HSnlHbFFp?= =?utf-8?B?ZEl0NC9BZXQwK0lDRDB4d2UwUnNZejFabFdGTlRDOEw2bkRLcGYrd09JNW9F?= =?utf-8?Q?IY1O1LU2JT0XTAWZRIUOwasqF?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 165157be-8999-46b2-2a4b-08da7fcd8c79 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB4130.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2022 21:23:22.9526 (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: PCgGYpl1wAcvuDKby8EUqNEbCfX2oroa/AABsyZvU/rco8aKS0OyyxB+BAP9UQgM1EKj1cXBDdjtK9yqjLaY7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3692 ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1660685006; a=rsa-sha256; cv=pass; b=2oLHHYMnmJQwSkjuRU8YAyNxPOkrJOGz8SZeVAu0X7KsQ8d749gyU8BdHfF72eOwF8TjWN tnCeRYMqp1ZRGzB+JB86zbTSL7oWw0K56ZF7cM+ab1UuGodsk+PsviOnYN8M22TwyR+AnF HTno3Iue2DRmMbKR2WA2uD8lF2Tv00s= ARC-Authentication-Results: i=2; imf07.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=ln1VHs7a; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf07.hostedemail.com: domain of jhubbard@nvidia.com designates 40.107.243.84 as permitted sender) smtp.mailfrom=jhubbard@nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1660685006; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=QAusdqqvQ2458L49m8JiZxRrajlNR2n3cThVbH6xdK8=; b=pV55VmyBffqhHTcqBpirC2U9nAHRlMbjMGcYWN9OgPrqFD9V6aaBlvuXZcQriThPrcUV2O JuxihVRH5xcVWwRHc5AxhqALHPfsmFpRGGTVp1B64eQ559EMKYhKzUtMZqK6fKAQybpeFS eOm6H8fzjibtRdKDDDuIhHMmOcEMsks= X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 7CF3640054 X-Rspam-User: Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=ln1VHs7a; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf07.hostedemail.com: domain of jhubbard@nvidia.com designates 40.107.243.84 as permitted sender) smtp.mailfrom=jhubbard@nvidia.com X-Stat-Signature: 6ndqck3gjjs7e57pkmew9mpg8oao1sq8 X-HE-Tag: 1660685005-463659 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: On 8/16/22 11:08, Matthew Wilcox wrote: > Some of you will already know all this, but I'll go into a certain amount > of detail for the peanut gallery. > > One of the problems that people want to solve with multi-page folios > is supporting filesystem block sizes > PAGE_SIZE. Such filesystems > already exist; you can happily create a 64kB block size filesystem on > a PPC/ARM/... today, then fail to mount it on an x86 machine. > > kmap_local_folio() only lets you map a single page from a folio. > This works for the majority of cases (eg ->write_begin() works on a > per-page basis *anyway*, so we can just map a single page from the folio). > But this is somewhat hampering for ext2_get_page(), used for directory > handling. A directory record may cross a page boundary (because it > wasn't a page boundary on the machine which created the filesystem), > and juggling two pages being mapped at once is tricky with the stack > model for kmap_local. > > I don't particularly want to invest heavily in optimising for HIGHMEM. > The number of machines which will use multi-page folios and HIGHMEM is > not going to be large, one hopes, as 64-bit kernels are far more common. > I'm happy for 32-bit to be slow, as long as it works. Some of our kernel driver teams recently expressed precisely the same set of requirements. And at first, I pointed them to folio_map_local(), and then they schooled me by noting that, today, it only does a single page. :) > > For these reasons, I proposing the logical equivalent to this: > > +void *folio_map_local(struct folio *folio) > +{ > + if (!IS_ENABLED(CONFIG_HIGHMEM)) > + return folio_address(folio); > + if (!folio_test_large(folio)) > + return kmap_local_page(&folio->page); > + return vmap_folio(folio); > +} ...which led to a desire for code very much like the above: kmap(), with a fallback to vmap(). Always better to have such things in the kernel, rather than a zillion copies in drivers. Adding Mark Hairgrove in case I've missed any fine points? > + > +void folio_unmap_local(const void *addr) > +{ > + if (!IS_ENABLED(CONFIG_HIGHMEM)) > + return; > + if (is_vmalloc_addr(addr)) > + vunmap(addr); > + else > + kunmap_local(addr); > +} > > (where vmap_folio() is a new function that works a lot like vmap(), > chunks of this get moved out-of-line, etc, etc., but this concept) > > Does anyone have any better ideas? If it'd be easy to map N pages > locally, for example ... looks like we only support up to 16 pages > mapped per CPU at any time, so mapping all of a 64kB folio would > almost always fail, and even mapping a 32kB folio would be unlikely > to succeed. > > thanks, -- John Hubbard NVIDIA