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 BB1C3C433EF for ; Wed, 5 Jan 2022 08:17:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EFDF76B0078; Wed, 5 Jan 2022 03:17:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EAC876B007B; Wed, 5 Jan 2022 03:17:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D26666B007D; Wed, 5 Jan 2022 03:17:50 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0207.hostedemail.com [216.40.44.207]) by kanga.kvack.org (Postfix) with ESMTP id C44206B0078 for ; Wed, 5 Jan 2022 03:17:50 -0500 (EST) Received: from smtpin31.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 7DD6692EB8 for ; Wed, 5 Jan 2022 08:17:50 +0000 (UTC) X-FDA: 78995529900.31.06EA64A Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2059.outbound.protection.outlook.com [40.107.243.59]) by imf16.hostedemail.com (Postfix) with ESMTP id EE778180004 for ; Wed, 5 Jan 2022 08:17:49 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BF4V/0hAJ5p/qvcPaqUclj78rK2jKx5cShzEiP1pSXxI8E5beVDsW8p85k9/1Mh/4Bj3jmmEzlWKf0xMMq9gCPOU93Np8kxCjGIpQYgzlX0ituO/ZdJpccYST9EusI0TaLMEMXN0sIINcIk7CnFbNsMCenWnKdSqjGX7xY2rsIEh7kpikMxeZGRYbsqzlOZ4Q779EVwSJ/EoBLyPuy9V6R293AVu6QDadS+JDLV4oCN0jDdNiAdQtK6c9eaX5OO5iZquwu6hIjkMAQy3LMd1fP8LzNKjnA1SHttgL+RGj7z0twJJePYO5g7Wca/lyAEmudVB4bM1M2gmJuKbxy/XEA== 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=LSALcuzh9P1+/S2bAZGMoLtNcfJgPQ6WXZoXh9UgEM0=; b=DKmm1O24cdsnv1qgBBfaQV4Bg6S7zuUE5heVYhO4QlXfY35f8ktyprwRhsKkjX4Ic6TW273j1SLAV7O5K82xMKJFcQhVndT1Wor4wsiKekfQxWYuSZF9XzuCZkqCGDwzLU3IUx5EqkJFUU2/O3iUzYVv3EfmkrvE6bOCzv0NzIYkXFwPIIVxzY296zJo1waENYMwH0J4YF7i4VA2/q0mkAPYxfkMM81Rqawmqlhlo+nhJVH2TZgsgM0WWuu4JaKshTh9txjVMnzkG+jP5N05/wailAvRWhUFpQbUoJWTTvDuCk9UB0Bx0b7+PXwQL1Q2wG0x4I1BrF/sYEeMvVc0Pw== 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=LSALcuzh9P1+/S2bAZGMoLtNcfJgPQ6WXZoXh9UgEM0=; b=LQVfoc0gsFjW9g9CSJoFb2zksCOnl24LaJRUnHzgHcK1eQEoQ5NIvs9FpK4uSKx42d3loLHkBMzL7xSpKZpjREUxUq0DRoinA4g+cwSmQwf70v924cFU1CAZkAezANKgu1h+5wu3gxt9VHXCPBg/N6+9qBJL30Hc5jCYGEKlGLn/YnznAvKhe+jgdFOCDBxiJ5EUI0HCFaNtdOqfWMQ58zkAI8Xa7msC3whCw2s89Uhb6LEq32KQAX3ZKCYR6MrdJnTWUV6H03epgstoYnmTEditGNOVKhnq1ykOp8up9rZQv6uYvdFy8clgSR5AT57gFDRVxS8hu86TZIm6I9DFxg== Received: from BY5PR12MB4130.namprd12.prod.outlook.com (2603:10b6:a03:20b::16) by BY5PR12MB4273.namprd12.prod.outlook.com (2603:10b6:a03:212::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Wed, 5 Jan 2022 08:17:48 +0000 Received: from BY5PR12MB4130.namprd12.prod.outlook.com ([fe80::8496:16fd:65c5:4af7]) by BY5PR12MB4130.namprd12.prod.outlook.com ([fe80::8496:16fd:65c5:4af7%4]) with mapi id 15.20.4844.015; Wed, 5 Jan 2022 08:17:48 +0000 Message-ID: Date: Wed, 5 Jan 2022 00:17:46 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH 14/17] gup: Convert for_each_compound_head() to gup_for_each_folio() Content-Language: en-US To: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org Cc: Andrew Morton References: <20220102215729.2943705-1-willy@infradead.org> <20220102215729.2943705-15-willy@infradead.org> From: John Hubbard In-Reply-To: <20220102215729.2943705-15-willy@infradead.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SJ0PR05CA0113.namprd05.prod.outlook.com (2603:10b6:a03:334::28) 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: 0be7fae1-2cb3-4e40-6674-08d9d023dbe2 X-MS-TrafficTypeDiagnostic: BY5PR12MB4273:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3DAoerd4ZGNOSiitCR4QMSt2q4J+sv3QNw/F0aVxE2T+CnAyzyKz8pnoBmoPiTQcEjuhHknwUC4tMQDQnE1aqfPdHamah28i9S3t6nE0CUwQTV3yDgxJ13fh514U7UpPIREq4Wn1XbDAhoNf9z7oR19JURzSzKC/54FwqTy5l1MutMhBf2GBl5yLx4Nxl7m6UubwxNuNNrT0dQpj2F5Iif38fzdgWqBvJeTuPt6Y+anfLEAZ625Sp4y8vK+T/7De2xWiI903VH27/DZkiyVv8tg7Y1KCGOznbWSAtdGqd10apd7lGow1U/YSoKZGAXkGfnQs0/ZUtWl/W6skDVI+V/B2mHalzAHc/vWLEncUiWuHaiZvdpDa+Y4WH0RK9O2GPb5CLh773HxeCk4x0IUnagiy8LbAKjwVwuaJKxAmcolUeRRKUY/lVxitsKw0NhBMBMG9rwHV+hHSokttS1oqI5w1uTnMPEp9F54DDF+0ulcXCnZtXCeYFzrUACuQlz6/wnMdLtSyGMDyCC3QbiieXfqk8QkW7BDUTTB+A7nCVWFYwIq9GRGKONon1nrGTtfpgSBzxQX3gpp2dGilOTx2LqIMT9elFeGZ/qmeIvIhGDlrvfelUmrOsMkJHmpKcRN65zhlsQAuHwc7ArYj1fvKUZFTCQS6uE22eXxlCsdBOv2+MCvj3tBrH6uM6UywUQeYqEZfe2FXTy9bLHbpsicBTwhC+ulx9xiKcqIcdVl58+w= 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:(4636009)(366004)(86362001)(5660300002)(4326008)(316002)(38100700002)(6512007)(6486002)(83380400001)(66476007)(66556008)(31686004)(26005)(186003)(66946007)(508600001)(2616005)(36756003)(8676002)(8936002)(31696002)(2906002)(53546011)(6506007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?KzVqdDA3eXNJd1d3TVJtbmNHWUxIbkNsMFVGZTNOd05HUU9FS09DSUdkUU90?= =?utf-8?B?dGJ0Sk82NVpKWHNlR1FOLzVSUURRKzBIQlVoanlQSnJrOC9ScnkydmZKZlBi?= =?utf-8?B?NWRuaDI3VmRQTE5sUFRlSHBDT2sxSExMa0lKMStZVFlpL0txNm5OYU81bDFM?= =?utf-8?B?MzlWOS9LQ2VROHRiaDRvdllVTzhYb3FOZk1xQmFHVWxrOWN2UGtzY2p6WlhK?= =?utf-8?B?UlFaZTFmNjB6UHhzYnNmcE1tSnROQ3ZIa00xUTkybU5QRmdQNnFCNFhFcHl5?= =?utf-8?B?R2t4bzVGOHh1elkvWmlNNHRacXFjeCt3aEhHSGlVV0REbGx5N0xLOHJ5U0hL?= =?utf-8?B?cVdPZzdvcDUzb0t5M0dtZXljQndWQVk4YUlCc01NVFdscEM5QmkyQkFWSW41?= =?utf-8?B?OXUwcm9Xd0pCL1ZKSkFWQWRTbGhNOE44YUEyUVUveERGeU45d2xka2lSMHRt?= =?utf-8?B?YXNpS0QyT3hqWnpBS3I1emxhMTZPbTIxcHZyZGJXSmlSK3lHcVE0TWdkYlhu?= =?utf-8?B?WFFJUi9Fckh3bUdPZ2MvODBkVVRDQWlTK0hqdklVOE1xMFJObGIrVUY0NGNU?= =?utf-8?B?RjZrOHVRY1h3akM3M3RUWU5DaDJTTmY5dnJBbnRwZmFlMHM2MXZvTHJtVE1O?= =?utf-8?B?YkZVWWJOeTZrR2FTN0lrUUp5RExuTWxxV1ovS1lLQWI4Z3IvelMzNEZwTmt6?= =?utf-8?B?QnNOeXc5aEJTTmNrNURFdVAweWliMjdjd0FEZzJMRnFxZlNhZnJWSGdKTExm?= =?utf-8?B?YVRuYlhKUmttUmVvTnlpcDBMNng5VTgyZ08rQzJ4RFNyREVuWDQwaWpjbVhj?= =?utf-8?B?Q2d5VkE3T3RCV3VRSTVUUjN2ZHcxTlU2SDlhclVOQlNwVEtXVXVMMzF1Q1Rs?= =?utf-8?B?V2Y5UnI1NXJFeTUwOEhSZnV4aVN5Sk91QkxoM1lVMW5aWGZQZ0hsVDIvaHRN?= =?utf-8?B?TEQ4MW9OZjJhZXZBSUZuWTZ0RjJUWmV4K0pFMDY5VXRPdDNTOE5uTEtLWm5O?= =?utf-8?B?NnhsUTBTUGFwSzJwTVR5NE1wUVB3V2ZRSnpweHIxUDhqdVZoTTdOWHlkWmNG?= =?utf-8?B?MGRqSDAycXFKMjNpY3BVOFdQZ0MwMjA2V2g3Ris4R2VxOEgyVUdNcHcxOXNB?= =?utf-8?B?UEdjZVIra1I3WGovYVJCa1RINHpTeXNuZzFmM0orVHlTTXFFTWJFT0JUMy9s?= =?utf-8?B?UVZEZzlkRWFQOG0wZ0FkSHovUjBoNTR1Zy9oc3ZPTjJNa3pNQjFDR0s4RlNF?= =?utf-8?B?a1V1MnlnN2I1c1lRUEhOWVgxc2JWU2lTOHEweFQxaWxhcXoxaHZjTjZjWWtH?= =?utf-8?B?QjVBYm4rS0RNNkEyT0o2eWR2SXp0WFh4MDRkRHVoZjhaNzBDZzBoUHJDN3dW?= =?utf-8?B?Tk8xWkhNOWtpTFhwU0xlRXRoNFkyY0FMSHExQWVIUnBkTGZ6bHI2cytjeXhl?= =?utf-8?B?OGJydzZYQ0YrWmtERXFDZzRuUjArN0RwMkEvU3FnNWJteERyeGROeklHN1FS?= =?utf-8?B?WmI0THNHZk51ZnlCMVMzYUNNcWxmaHVtQTlQUkd0dm9Jdm8yTmRET1ZJc3B5?= =?utf-8?B?bm5PdlRVczFqVXlTdy9uSXlMWXpBTHNNNDljQzF3NGd5dWFPRlphQXFqVDky?= =?utf-8?B?YVhZU0MxcFJpTlhPWGNyK3BuUDl3eHR1V2dUandSVDE2ajEzeTVvTFVXSFN6?= =?utf-8?B?Zk0zUVRQUkZWUXFLbHpucHZ3cG5KSGpPNjdUdW9UaThwSDlWc2VBZ0Z3VHJM?= =?utf-8?B?VGk0VUJOaFFHV2xWc2VoYjRkZStVSld1Y1dyMnhraUFyVVoySkpkNisrSmNl?= =?utf-8?B?c1lNS1ZNVVY4TExUT0hodFE0M1Y0T2ljT0pMamF3SGk2dzUrSWFEbzQyZ0Q0?= =?utf-8?B?M1IrRGZvS285cTBnTXBFLy9TY2RQU2l0Ym9GbGg1N0lraGoycDA1cnRtdS8z?= =?utf-8?B?eU12Qll4YzN3dVRGc09TZzV5RnBJSEVkYy90dmtBN2V2TXRKNzBpdlI3TnJ5?= =?utf-8?B?dG84dWl4VnFGTTlPNDNCTGxPaW9VZlRWcmxka2ZJbko0bFBNZFhSMG5ad2NG?= =?utf-8?B?Q0tod3Fpbjc1UDFsY2pmSjI4eFlGQUNPZHUrY0xZQkxyVmxNWUMvVXVwNTZv?= =?utf-8?B?akZUTzA2MVo2L0g4Y0MxRmJGS3J4dlN0ZkVxd1l6c2t5NDBNaGhnTnBxK08z?= =?utf-8?Q?0EmufoqQ4JWmttpvWrEQanI=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0be7fae1-2cb3-4e40-6674-08d9d023dbe2 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB4130.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2022 08:17:48.2366 (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: dP//bFGNRy+whq+J5Sixmup4Ahlw/wJEjEIZRSxsAPcN2GHn5xb35UxaGDDhMSAGNO04pCnuDOEKjb7gHTzxrw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4273 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: EE778180004 X-Stat-Signature: xhm8eyuj9ohzffo6e37gajsowxjmdg9e Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=LQVfoc0g; dmarc=pass (policy=reject) header.from=nvidia.com; spf=none (imf16.hostedemail.com: domain of jhubbard@nvidia.com has no SPF policy when checking 40.107.243.59) smtp.mailfrom=jhubbard@nvidia.com X-HE-Tag: 1641370669-920977 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 1/2/22 13:57, Matthew Wilcox (Oracle) wrote: > This macro can be considerably simplified by returning the folio from > gup_folio_next() instead of void from compound_next(). Convert both > callers to work on folios instead of pages. > > Signed-off-by: Matthew Wilcox (Oracle) > --- > mm/gup.c | 47 ++++++++++++++++++++++++----------------------- > 1 file changed, 24 insertions(+), 23 deletions(-) > > diff --git a/mm/gup.c b/mm/gup.c > index 7bd1e4a2648a..eaffa6807609 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -239,31 +239,29 @@ static inline void compound_range_next(unsigned long i, unsigned long npages, > __i < __npages; __i += __ntails, \ > compound_range_next(__i, __npages, __list, &(__head), &(__ntails))) > > -static inline void compound_next(unsigned long i, unsigned long npages, > - struct page **list, struct page **head, > - unsigned int *ntails) > +static inline struct folio *gup_folio_next(unsigned long i, > + unsigned long npages, struct page **list, unsigned int *ntails) > { > - struct page *page; > + struct folio *folio; > unsigned int nr; > > if (i >= npages) > - return; > + return NULL; > > - page = compound_head(list[i]); > + folio = page_folio(list[i]); > for (nr = i + 1; nr < npages; nr++) { > - if (compound_head(list[nr]) != page) > + if (page_folio(list[nr]) != folio) > break; > } > > - *head = page; > *ntails = nr - i; > + return folio; > } > > -#define for_each_compound_head(__i, __list, __npages, __head, __ntails) \ > - for (__i = 0, \ > - compound_next(__i, __npages, __list, &(__head), &(__ntails)); \ > - __i < __npages; __i += __ntails, \ > - compound_next(__i, __npages, __list, &(__head), &(__ntails))) > +#define gup_for_each_folio(__i, __list, __npages, __folio, __ntails) \ > + for (__i = 0; \ > + (__folio = gup_folio_next(__i, __npages, __list, &(__ntails))) != NULL; \ > + __i += __ntails) This is nice. I find these pre-existing macros to be really quite horrible, but I was unable to suggest anything better at the time, so it's good to see the simplification. :) > > /** > * unpin_user_pages_dirty_lock() - release and optionally dirty gup-pinned pages > @@ -291,15 +289,15 @@ void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages, > bool make_dirty) > { > unsigned long index; > - struct page *head; > - unsigned int ntails; > + struct folio *folio; > + unsigned int nr; > > if (!make_dirty) { > unpin_user_pages(pages, npages); > return; > } > > - for_each_compound_head(index, pages, npages, head, ntails) { > + gup_for_each_folio(index, pages, npages, folio, nr) { > /* > * Checking PageDirty at this point may race with > * clear_page_dirty_for_io(), but that's OK. Two key > @@ -320,9 +318,12 @@ void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages, > * written back, so it gets written back again in the > * next writeback cycle. This is harmless. > */ > - if (!PageDirty(head)) > - set_page_dirty_lock(head); > - put_compound_head(head, ntails, FOLL_PIN); > + if (!folio_test_dirty(folio)) { > + folio_lock(folio); > + folio_mark_dirty(folio); > + folio_unlock(folio); At some point, maybe even here, I suspect that creating the folio version of set_page_dirty_lock() would help. I'm sure you have a better feel for whether it helps, after doing all of this conversion work, but it just sort of jumped out at me as surprising to see it in this form. In any case, this all looks correct, so Reviewed-by: John Hubbard thanks, -- John Hubbard NVIDIA > + } > + gup_put_folio(folio, nr, FOLL_PIN); > } > } > EXPORT_SYMBOL(unpin_user_pages_dirty_lock); > @@ -375,8 +376,8 @@ EXPORT_SYMBOL(unpin_user_page_range_dirty_lock); > void unpin_user_pages(struct page **pages, unsigned long npages) > { > unsigned long index; > - struct page *head; > - unsigned int ntails; > + struct folio *folio; > + unsigned int nr; > > /* > * If this WARN_ON() fires, then the system *might* be leaking pages (by > @@ -386,8 +387,8 @@ void unpin_user_pages(struct page **pages, unsigned long npages) > if (WARN_ON(IS_ERR_VALUE(npages))) > return; > > - for_each_compound_head(index, pages, npages, head, ntails) > - put_compound_head(head, ntails, FOLL_PIN); > + gup_for_each_folio(index, pages, npages, folio, nr) > + gup_put_folio(folio, nr, FOLL_PIN); > } > EXPORT_SYMBOL(unpin_user_pages); >