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 21BD9C433EF for ; Sun, 6 Feb 2022 14:53:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 23D606B0071; Sun, 6 Feb 2022 09:53:00 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1C6596B0072; Sun, 6 Feb 2022 09:53:00 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 03F1D6B0073; Sun, 6 Feb 2022 09:52:59 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0088.hostedemail.com [216.40.44.88]) by kanga.kvack.org (Postfix) with ESMTP id E720F6B0071 for ; Sun, 6 Feb 2022 09:52:59 -0500 (EST) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 8D3FE94FCB for ; Sun, 6 Feb 2022 14:52:59 +0000 (UTC) X-FDA: 79112647278.16.F4992D9 Received: from mail-ua1-f45.google.com (mail-ua1-f45.google.com [209.85.222.45]) by imf13.hostedemail.com (Postfix) with ESMTP id 408B520003 for ; Sun, 6 Feb 2022 14:52:59 +0000 (UTC) Received: by mail-ua1-f45.google.com with SMTP id w18so15660362uar.8 for ; Sun, 06 Feb 2022 06:52:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=/FqBgKkEp48YXOFOA5wzxrOSHuuh4qZgyEe5RGqRigo=; b=pp7TcDiuO8DE7JxuY9v1mSiV1R7xPDiAjN3tfkfzMturFK7xzBQNPzTZ9RwvbrBl3J nbPOWJ5K34vDFBLoN8aDfRzcejDXVIENcjVL/n5FRMUxE6BgLujzvoR69Nk7iKa6cYJ0 HYYv8OTLXWKq7WTj7RhN0WrUAhuTGJUob4tlwWEBKFhSFNRFHEynoQl8XcOqd66Toh3Q uvR14nze/A8b6Zpaa2ZWrHGbTjX4GcRxzAALZQLqVMBpOXTx1Atn1Tz1sB/Ybvab25Pi X1fZH1tXfpvkX85I4MkMHjbjcpN/PNw3eI+Rb3ZmiJ4/neLm7zXDjJMbsUOwJJB2njz1 8waA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=/FqBgKkEp48YXOFOA5wzxrOSHuuh4qZgyEe5RGqRigo=; b=4NglNHyY5eONK8Fn8qzwh2ukL5g7QZsY7oKHAIdrnz/nREZW6Fks2BNP5v9Hq819R0 FicyVFymdQvtxQWafyHCV9NpiFQJFP871hN3cIgCpB50A1aYsQmVUu8I6kvQMMi8gQzh S5LziP35qibO7GElT8MpRd8g+f1XcmjxyIKL1efm2NjgIOr6ThuWXlV0H8gbONN9IStm pKff9mbsCm09Loy2bpxLbvzi4CwZJmzzfJKTRaiZlZrqE+cYBPSrr9WqiwaE7vlHnaFW NsxlWCmfmqbyGu7iXSLAg36N4Il4BdoBNzZmYHkyYXJK0pZeLcrMZtevdz8X1dxPM0kT qpTw== X-Gm-Message-State: AOAM533wxxG/AYLG7SHIJzeLXC0q+7kbbO44b6QRcdnrXOX97e8InhfO xZ9Y8vLsWCMwtxav5DsSJfvjpoZCQE8OgxgYFGOPni4ifJA= X-Google-Smtp-Source: ABdhPJyZ5aSDW0doLYdRW0LQjO+3o9/9x2Sp/CTv8IDgyPMyomuCKsQpOiyuc4MUjtf0nI+7iR67MSRnKlu+ov+u9vs= X-Received: by 2002:a67:e158:: with SMTP id o24mr3257698vsl.17.1644159178430; Sun, 06 Feb 2022 06:52:58 -0800 (PST) MIME-Version: 1.0 References: <20220204195852.1751729-1-willy@infradead.org> <20220204195852.1751729-21-willy@infradead.org> In-Reply-To: <20220204195852.1751729-21-willy@infradead.org> From: Mark Hemment Date: Sun, 6 Feb 2022 14:52:46 +0000 Message-ID: Subject: Re: [PATCH 20/75] mm/gup: Convert gup_pte_range() to use a folio To: "Matthew Wilcox (Oracle)" Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Christoph Hellwig , John Hubbard , Jason Gunthorpe , William Kucharski Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 408B520003 X-Stat-Signature: ybctz6ybdw9fehu6j1sgtp5a8w69xyms Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=googlemail.com header.s=20210112 header.b=pp7TcDiu; dmarc=pass (policy=quarantine) header.from=googlemail.com; spf=pass (imf13.hostedemail.com: domain of markhemm@googlemail.com designates 209.85.222.45 as permitted sender) smtp.mailfrom=markhemm@googlemail.com X-Rspam-User: nil X-HE-Tag: 1644159179-560425 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 Fri, 4 Feb 2022 at 20:21, Matthew Wilcox (Oracle) wrote: > > We still call try_grab_folio() once per PTE; a future patch could > optimise to just adjust the reference count for each page within > the folio. > > Signed-off-by: Matthew Wilcox (Oracle) > Reviewed-by: Christoph Hellwig > Reviewed-by: John Hubbard > Reviewed-by: Jason Gunthorpe > Reviewed-by: William Kucharski > --- > mm/gup.c | 16 +++++++--------- > 1 file changed, 7 insertions(+), 9 deletions(-) > > diff --git a/mm/gup.c b/mm/gup.c > index 00227b2cb1cf..44281350db1a 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -2252,7 +2252,8 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end, > ptem = ptep = pte_offset_map(&pmd, addr); > do { > pte_t pte = ptep_get_lockless(ptep); > - struct page *head, *page; > + struct page *page; > + struct folio *folio; > > /* > * Similar to the PMD case below, NUMA hinting must take slow > @@ -2279,22 +2280,20 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end, > VM_BUG_ON(!pfn_valid(pte_pfn(pte))); > page = pte_page(pte); > > - head = try_grab_compound_head(page, 1, flags); > - if (!head) > + folio = try_grab_folio(page, 1, flags); > + if (!folio) > goto pte_unmap; > > if (unlikely(page_is_secretmem(page))) { > - put_compound_head(head, 1, flags); > + gup_put_folio(folio, 1, flags); > goto pte_unmap; > } > > if (unlikely(pte_val(pte) != pte_val(*ptep))) { > - put_compound_head(head, 1, flags); > + gup_put_folio(folio, 1, flags); > goto pte_unmap; > } > > - VM_BUG_ON_PAGE(compound_head(page) != head, page); > - > /* > * We need to make the page accessible if and only if we are > * going to access its content (the FOLL_PIN case). Please > @@ -2308,10 +2307,9 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end, > goto pte_unmap; > } V. Minor/nit: Above the "goto pte_unmap;" is the code block; if (flags & FOLL_PIN) { ret = arch_make_page_accessible(page); if (ret) { unpin_user_page(page); goto pte_unmap; } } Other conditions which goto pte_unmap, after successful try_grab_folio(), call gup_put_folio() (rather than unpin_user_page()). No change in functionality, but suggest calling gup_put_folio() here too for consistency. Cheers, Mark