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 75321C71133 for ; Fri, 25 Aug 2023 04:09:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D483C28007F; Fri, 25 Aug 2023 00:09:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CF8F68E0011; Fri, 25 Aug 2023 00:09:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE7F628007F; Fri, 25 Aug 2023 00:09:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id ACDA68E0011 for ; Fri, 25 Aug 2023 00:09:53 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 7CF78B26B3 for ; Fri, 25 Aug 2023 04:09:53 +0000 (UTC) X-FDA: 81161298666.26.1213D2C Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf16.hostedemail.com (Postfix) with ESMTP id 5FBC718000D for ; Fri, 25 Aug 2023 04:09:51 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=cAMCZehh; dmarc=none; spf=none (imf16.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692936592; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9AcvZSxbpImY+QilwnlW7s4QTbMInM9uihUNGJjwdrU=; b=FG7h50aiNoH9LJtqAT9H6oP47pfFklTg74yEMaHWR8VniwoYB5Jr7g/WTRnHPO6R1/ioC2 cQe9O47gWRFXOW2C9iU+Pjxpai9gyrpi56IhBOP65e3CRvNac1m3GdjynqMJQdDG5aSAja Fioqx9BGFN//iWLsJomprXEgXqb9gQQ= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=cAMCZehh; dmarc=none; spf=none (imf16.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692936592; a=rsa-sha256; cv=none; b=Xk9IWLY1z8ex7s/hI1sL8FJZ62m49CdxUh6D5saLDsOFtwdC817/nwgW1Sejlcn1ET19vX a+JCPHjN9O6pdeSMHaYr9UgrOr4tVmwSQ2lUnNMVhOvSqb3kHTeSFE+mNdK1UbI5i4OfaT hVeOmfqhTS0aCeENpkjCMdfnjXtEmYM= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=9AcvZSxbpImY+QilwnlW7s4QTbMInM9uihUNGJjwdrU=; b=cAMCZehh5ClWBMQce2ZuCMk8fG e71WxYyp3sgEjdkuiE0zMFtRxqyXix9iEicFES4G9a63BBP3426wWIiCd+Rfx8FpF95iYHdJscLpa /xeqOsiCiMCsTO85X+5h6+0jm2d9FR0XvBnkklyy8V9ph6n9sJ7drtoZjjXvFa/SDmFYKQh1Cirf/ U/vmMElX6LfqEMhBcS/oLgXPBrNv0AOcEdTPq3cJNbiW6NTlhOHgxp6Uiv1becLHj2zdCTh+glVea OkYtiZEyTi3oETlxN8UuyMilBaFrH9Yf9kma97XkhBRWXPIB16RLcAIa8VRBLwmwJuYp6Gkypg7bQ lZFkKhMg==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qZO8N-00Evmw-OC; Fri, 25 Aug 2023 04:09:19 +0000 Date: Fri, 25 Aug 2023 05:09:19 +0100 From: Matthew Wilcox To: Ryan Roberts Cc: Will Deacon , "Aneesh Kumar K.V" , Andrew Morton , Nick Piggin , Peter Zijlstra , Christian Borntraeger , Sven Schnelle , Arnd Bergmann , David Hildenbrand , Yu Zhao , "Kirill A. Shutemov" , Yin Fengwei , Yang Shi , "Huang, Ying" , Zi Yan , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v1 4/4] mm/mmu_gather: Store and process pages in contig ranges Message-ID: References: <20230810103332.3062143-1-ryan.roberts@arm.com> <20230810103332.3062143-5-ryan.roberts@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230810103332.3062143-5-ryan.roberts@arm.com> X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 5FBC718000D X-Stat-Signature: 6rcbtbfrxahwjwso75z1nht3pymgwxr9 X-HE-Tag: 1692936591-970417 X-HE-Meta: U2FsdGVkX1/l75za9QTBL0RjSMHZd2Sxgb8kU06YkYS26kNiNP6dfe9RjPLd4hRFR3kzjN20vC87K93NPCXQJshgBKd5Cz7l0NJIRy2DwjOvqJKC4ZAhz9kHr4W3L2tf8Qnz1Am3dGTyMyvIUJljZViO09BQiF5XeExX1h3xD/6//4PWtsbHNCxAIHbRPyYZhUCiqEvyHwIkYoCfE8hvJxX8p5aGXg8w2S2xKYr2tfQ9z9qPv+PKOxR98e5vE7paT4QxIF50nfVYqbqplR9CZE2V+xrVq/mbSNjNep62qDMeOdSR5hg6BhkOZA6kWwz37Ux9sO9GF7ysql23pttNIXHxzgA993gMlfEh3T5QH/803mkrSGcbTXaWoRZMlCt+NKcBMoLZitRggHziNUq56GmXLIE3FrAl5zs/pXxLxVAYSbFWoOu9m5Y4Vgy06DxkWgUZ0kBBcAs99F/m4ESAwFz5a+Ge8pYDEx5ao09D3YgNwHsIcUIowC8HFzSTc/o0+8HvKylryb7nuSBcORPDfaFlo/7Ndk4XZZHIwFkWDTJH60sOxrm8XYffZkejotAIaE4vKy5oDN+1Ft31NHZ9rjRDq477DnOq6m5uJdmTMNCmfsPB49pckrulr1axwWX2Y5fDlX3FnKtfp+8bGzWZND+TG0Yagum00h3mzEwIhd7SZs2nXWSN8OVGZKrphP8YNwUEqJIAuYzuQbHdr0AxsT1GeexCO+jxR8AhhAQhtrVzthvE/dKrY95bGokgYoLt+d0KIRViwaNQup5/IwAkJelCAKWiTyGmduH2p665Cf0fiwGciQYoU1cIggr7J4uJay9ZAYWhcK1bhG2lIMjFobfSW6BuPuY1rhtEu5LgYFFctvyHRv62F5g7LxpQ2GbqvUSk1wkpTvz6Z+QjvoOZW917QJ9mz0oXvJIle4Js+PespazIlFYbHJfhzUjQpWGh1D5jQz7WOw7bJuTSuNI EZNhCcjm +2fsaKAqVVpujNtsnTlQtJS03xggJzxnPtI5WzGjGLWJh2LfL8UEKD74LaqeyeSup3Jp5JJI4XzUtUhAtP2dmdjBAKv1o8oCq24npTK//YQr8iAb65MLtHUEx41E2kEJukCT8mxeu6P85ALut/YbRp/iVf2oUPQxHmOIpnP380khqxX9/xlOddkvAtw== 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 Thu, Aug 10, 2023 at 11:33:32AM +0100, Ryan Roberts wrote: > +void folios_put_refs(struct folio_range *folios, int nr) > +{ > + int i; > + LIST_HEAD(pages_to_free); > + struct lruvec *lruvec = NULL; > + unsigned long flags = 0; > + unsigned int lock_batch; > + > + for (i = 0; i < nr; i++) { > + struct folio *folio = page_folio(folios[i].start); > + int refs = folios[i].end - folios[i].start; > + > + /* > + * Make sure the IRQ-safe lock-holding time does not get > + * excessive with a continuous string of pages from the > + * same lruvec. The lock is held only if lruvec != NULL. > + */ > + if (lruvec && ++lock_batch == SWAP_CLUSTER_MAX) { > + unlock_page_lruvec_irqrestore(lruvec, flags); > + lruvec = NULL; > + } > + > + if (is_huge_zero_page(&folio->page)) > + continue; > + > + if (folio_is_zone_device(folio)) { > + if (lruvec) { > + unlock_page_lruvec_irqrestore(lruvec, flags); > + lruvec = NULL; > + } > + if (put_devmap_managed_page(&folio->page)) > + continue; > + if (folio_put_testzero(folio)) We're only putting one ref for the zone_device folios? Surely this should be ref_sub_and_test like below? > + free_zone_device_page(&folio->page); > + continue; > + } > + > + if (!folio_ref_sub_and_test(folio, refs)) > + continue; > + > + if (folio_test_large(folio)) { > + if (lruvec) { > + unlock_page_lruvec_irqrestore(lruvec, flags); > + lruvec = NULL; > + } > + __folio_put_large(folio); > + continue; > + } > + > + if (folio_test_lru(folio)) { > + struct lruvec *prev_lruvec = lruvec; > + > + lruvec = folio_lruvec_relock_irqsave(folio, lruvec, > + &flags); > + if (prev_lruvec != lruvec) > + lock_batch = 0; > + > + lruvec_del_folio(lruvec, folio); > + __folio_clear_lru_flags(folio); > + } > + > + /* > + * In rare cases, when truncation or holepunching raced with > + * munlock after VM_LOCKED was cleared, Mlocked may still be > + * found set here. This does not indicate a problem, unless > + * "unevictable_pgs_cleared" appears worryingly large. > + */ > + if (unlikely(folio_test_mlocked(folio))) { > + __folio_clear_mlocked(folio); > + zone_stat_sub_folio(folio, NR_MLOCK); > + count_vm_event(UNEVICTABLE_PGCLEARED); > + } You'll be glad to know I've factored out a nice little helper for that.