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 4245BC5ACB3 for ; Thu, 16 Nov 2023 14:52:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9E6E46B0472; Thu, 16 Nov 2023 09:52:03 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 997916B0473; Thu, 16 Nov 2023 09:52:03 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 85EFF6B0474; Thu, 16 Nov 2023 09:52:03 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 76B156B0472 for ; Thu, 16 Nov 2023 09:52:03 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 35DCC1CB926 for ; Thu, 16 Nov 2023 14:52:03 +0000 (UTC) X-FDA: 81464107326.29.7FB5E63 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf08.hostedemail.com (Postfix) with ESMTP id 92E20160009 for ; Thu, 16 Nov 2023 14:52:00 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=hfk9fkdc; spf=none (imf08.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1700146320; 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=2ojEoDQsJbTKNbq6oPAMc3aknQ7lB4yrHDrRikIo44Y=; b=kNxyNhEqXxJsaqCBnHtQgHBOnrprYuDj4TADeP6obeijfoEsl3ebcUeQt2yFMIVopfya6K GJPZcZLtttMSfy1a3Go0cwEwkyG26+YuCrp3k4f4UFrPPCyvgaumk+AsWdeQUtdV+HdQtZ UUA/l9GyweK0A45j6I4ZIBM44LxWLXg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700146320; a=rsa-sha256; cv=none; b=XMebfPyRKJm1YuXTOx6XGTQ6XIuI/fOoQMOGVcgyDMTyR+wg5ttrUaPvVfSWef+Xv1kkP9 w15DxXR8E5MRu88naKwkjN7dQ5vpbrKfCY9hNxnDH/wjVX2wdQBQMtp/nf+G9bZOYmEXC+ 1nI3I7vja9NLTOdPN0Pbh7odmEG0Gqw= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=hfk9fkdc; spf=none (imf08.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none 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=2ojEoDQsJbTKNbq6oPAMc3aknQ7lB4yrHDrRikIo44Y=; b=hfk9fkdc9vO0S2gBsS4PhgF/Hv xo9giUPkBJqOVc9jqbjGwEyrOzKkCmfF6hujr3hTvHFKID6f3Fq503I6juI4QqENzgjAqWGFqSsqQ q4dQSYdXySSSMpRl06w5hMDO5ZUkwD5xI7VVmtyI1iaowUFygHTOFLgNHO9yDAVPMGXeCvu9Gao8n AnFHee7FVHpCS1Vh0ANhbbsv/Xnl5+SFsBHIPSCWTyz9B10vBKv268A5/zbvNpO6p12eKsGmY9kLl WljHM9JeeL6Catj3T5Sj38GRo2nAdgOgE/5wi0tECtxXIpU+2ds9zj32B2EjBGFny5oh7RqJ4jmBP 56LNyPVQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1r3dii-003azA-ES; Thu, 16 Nov 2023 14:51:52 +0000 Date: Thu, 16 Nov 2023 14:51:52 +0000 From: Matthew Wilcox To: Peter Xu Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Mike Kravetz , "Kirill A . Shutemov" , Lorenzo Stoakes , Axel Rasmussen , John Hubbard , Mike Rapoport , Hugh Dickins , David Hildenbrand , Andrea Arcangeli , Rik van Riel , James Houghton , Yang Shi , Jason Gunthorpe , Vlastimil Babka , Andrew Morton Subject: Re: [PATCH RFC 07/12] mm/gup: Refactor record_subpages() to find 1st small page Message-ID: References: <20231116012908.392077-1-peterx@redhat.com> <20231116012908.392077-8-peterx@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231116012908.392077-8-peterx@redhat.com> X-Rspamd-Queue-Id: 92E20160009 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: tupasjmutteey7key9expsgaxc7chucu X-HE-Tag: 1700146320-775252 X-HE-Meta: U2FsdGVkX19GEgqkIohnahBaEPQ+gGIG9xOTx6Wn5BIjtYsT0T5jtCoi2PYYMDsEJ8svId8zxIq0HDWnEIvsCgev1pRxJssirN2nKZ4cak6m5jhIOEZSk+hmPGOhCPdO7EIqafDz/iKIcGshXCNk9RQ+78tDgDeJqfapDcsCh2jCXYXMLGL1BGvFoJzc+5a+CcG/H1VAAAHpYef0Psjjf7lBp97trcc1qBrCWr/6Kt9tpiytrSid+aFFY9iqowmV7lV6cTr4s/zHXcpoJMgyq2Muhe/7NMqq5p6Dj4xG84KD+YB+/JnqS2gLFi8BxXhRyMwEqGULlCn0NaXcw+jeJqHFudfPFolWDTXYoqkfMbUOM+EIaZWtOotba8Ow+L1STAcEADTWTmRe/pqTj/t51mBLhbUzQIxylemRu0NgekuVd70fpCpKORu5ZG6USV4h4dyKefeuAqreNxEEa4Sa3YXVFISBuZOh23SXYVsNhws+TC/ewLAgiavQ+s2rgwG/TexPpsC7aYHt4PHWyjyxbVS10bW+sRuyQGGatCl84FBL2IE8lyjwv9YpQrYs7U7CN5i82yGM96tdzTWDVF7ow3BIh71Wpq3MhPSXlATxSPfeyxgH5lmB0oAWR2BTdkwhNsCzdSo027KuiIf3UE/sSjMQbWW5o9IVAna5meHzD0HYeVzjAY+DMxgt7G65xVFnhfpq4tv3ifJIK92HgeHmnXBtmcHfKHiqXeljhSbOIbVWRJZFUMFBtTxS86gZ6vU5+yx8Cyy9IBJ+n9ORw1Jd25o0qzgotAoN8ZU2rHn546/VC2E3D16AL2LQ80RdQRLcbOsUP6Xmp8tEJ1mh4KBFHdClrcTMDmxTlnBujRyCTEOkq77LAYLG9wi8PYsI4+tdjhk2s98eM712dM11AZnSiAgQW/meEXEQcJYQXS1X+/VRuYWO4k6QztzNX+3cnMy8rVVmOA1OgNEWXuTH2qi ua4NReVR yELN1t8ZDPn+t0LpjSPcBN5YkieKDsdkvlzr7aTiSoZwPH71/7QToxjr4Guf7WDAMVB9pFw0aM/wBc51auKG1OsIHaLLgZ3znf6QxyvvFkbcOSsyclOyjP7nDh2V50gvMWQiA58jhTSMfUY2tlsDm3GiYP2DdGBbqICEJcyX8XmcJrYUgqWSKGoVYfg== 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 Wed, Nov 15, 2023 at 08:29:03PM -0500, Peter Xu wrote: > All the fast-gup functions take a tail page to operate, always need to do > page mask calculations before feeding that into record_subpages(). > > Merge that logic into record_subpages(), so that we always take a head > page, and leave the rest calculation to record_subpages(). This is a bit fragile. You're assuming that pmd_page() always returns a head page, and that's only true today because I looked at the work required vs the reward and decided to cap the large folio size at PMD size. If we allowed 2*PMD_SIZE (eg 4MB on x86), pmd_page() would not return a head page. There is a small amount of demand for > PMD size large folio support, so I suspect we will want to do this eventually. I'm not particularly trying to do these conversions, but it would be good to not add more assumptions that pmd_page() returns a head page. > +static int record_subpages(struct page *head, unsigned long sz, > + unsigned long addr, unsigned long end, > + struct page **pages) > @@ -2870,8 +2873,8 @@ static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, > pages, nr); > } > > - page = nth_page(pmd_page(orig), (addr & ~PMD_MASK) >> PAGE_SHIFT); > - refs = record_subpages(page, addr, end, pages + *nr); > + page = pmd_page(orig); > + refs = record_subpages(page, PMD_SIZE, addr, end, pages + *nr); > > folio = try_grab_folio(page, refs, flags); > if (!folio)