All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Andrea Arcangeli <aarcange@redhat.com>,
	Mike Rapoport <rppt@kernel.org>,
	Matthew Wilcox <willy@infradead.org>,
	Vlastimil Babka <vbabka@suse.cz>,
	John Hubbard <jhubbard@nvidia.com>,
	"Kirill A . Shutemov" <kirill@shutemov.name>,
	James Houghton <jthoughton@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Lorenzo Stoakes <lstoakes@gmail.com>,
	Hugh Dickins <hughd@google.com>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	Jason Gunthorpe <jgg@nvidia.com>
Subject: Re: [PATCH v2 3/8] mm/hugetlb: Add page_mask for hugetlb_follow_page_mask()
Date: Tue, 20 Jun 2023 12:28:26 -0400	[thread overview]
Message-ID: <ZJHTqsCsLUAprEPc@x1n> (raw)
In-Reply-To: <d1f6c2c5-07d0-d430-49b3-68e9f5978534@redhat.com>

On Tue, Jun 20, 2023 at 05:23:09PM +0200, David Hildenbrand wrote:
> On 20.06.23 01:10, Peter Xu wrote:
> > follow_page() doesn't need it, but we'll start to need it when unifying gup
> > for hugetlb.
> > 
> > Signed-off-by: Peter Xu <peterx@redhat.com>
> > ---
> >   include/linux/hugetlb.h | 8 +++++---
> >   mm/gup.c                | 3 ++-
> >   mm/hugetlb.c            | 5 ++++-
> >   3 files changed, 11 insertions(+), 5 deletions(-)
> > 
> > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> > index beb7c63d2871..2e2d89e79d6c 100644
> > --- a/include/linux/hugetlb.h
> > +++ b/include/linux/hugetlb.h
> > @@ -131,7 +131,8 @@ int move_hugetlb_page_tables(struct vm_area_struct *vma,
> >   int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *,
> >   			    struct vm_area_struct *, struct vm_area_struct *);
> >   struct page *hugetlb_follow_page_mask(struct vm_area_struct *vma,
> > -				unsigned long address, unsigned int flags);
> > +				      unsigned long address, unsigned int flags,
> > +				      unsigned int *page_mask);
> >   long follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *,
> >   			 struct page **, unsigned long *, unsigned long *,
> >   			 long, unsigned int, int *);
> > @@ -297,8 +298,9 @@ static inline void adjust_range_if_pmd_sharing_possible(
> >   {
> >   }
> > -static inline struct page *hugetlb_follow_page_mask(struct vm_area_struct *vma,
> > -				unsigned long address, unsigned int flags)
> > +static inline struct page *hugetlb_follow_page_mask(
> > +    struct vm_area_struct *vma, unsigned long address, unsigned int flags,
> > +    unsigned int *page_mask)
> >   {
> >   	BUILD_BUG(); /* should never be compiled in if !CONFIG_HUGETLB_PAGE*/
> >   }
> > diff --git a/mm/gup.c b/mm/gup.c
> > index abcd841d94b7..9fc9271cba8d 100644
> > --- a/mm/gup.c
> > +++ b/mm/gup.c
> > @@ -780,7 +780,8 @@ static struct page *follow_page_mask(struct vm_area_struct *vma,
> >   	 * Ordinary GUP uses follow_hugetlb_page for hugetlb processing.
> >   	 */
> >   	if (is_vm_hugetlb_page(vma))
> > -		return hugetlb_follow_page_mask(vma, address, flags);
> > +		return hugetlb_follow_page_mask(vma, address, flags,
> > +						&ctx->page_mask);
> >   	pgd = pgd_offset(mm, address);
> > diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> > index 9a6918c4250a..fbf6a09c0ec4 100644
> > --- a/mm/hugetlb.c
> > +++ b/mm/hugetlb.c
> > @@ -6454,7 +6454,8 @@ static inline bool __follow_hugetlb_must_fault(struct vm_area_struct *vma,
> >   }
> >   struct page *hugetlb_follow_page_mask(struct vm_area_struct *vma,
> > -				unsigned long address, unsigned int flags)
> > +				      unsigned long address, unsigned int flags,
> > +				      unsigned int *page_mask)
> >   {
> >   	struct hstate *h = hstate_vma(vma);
> >   	struct mm_struct *mm = vma->vm_mm;
> > @@ -6499,6 +6500,8 @@ struct page *hugetlb_follow_page_mask(struct vm_area_struct *vma,
> >   			page = NULL;
> >   			goto out;
> >   		}
> > +
> > +		*page_mask = ~huge_page_mask(h) >> PAGE_SHIFT;
> 
> As discussed, can be simplified. But can be done on top (or not at all, but
> it is confusing code).

Since we decided to make this prettier..  At last I decided to go with this:

		*page_mask = (1U << huge_page_order(h)) - 1;

The previous suggestion of PHYS_PFN() will do two shifts over PAGE_SIZE
(the other one in huge_page_size()) which might be unnecessary, also, PHYS_
can be slightly misleading too as prefix.

> 
> Reviewed-by: David Hildenbrand <david@redhat.com>

I'll take this with above change, please shoot if not applicable.  Thanks,

-- 
Peter Xu



  reply	other threads:[~2023-06-20 16:28 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-19 23:10 [PATCH v2 0/8] mm/gup: Unify hugetlb, speed up thp Peter Xu
2023-06-19 23:10 ` [PATCH v2 1/8] mm/hugetlb: Handle FOLL_DUMP well in follow_page_mask() Peter Xu
2023-06-19 23:10 ` [PATCH v2 2/8] mm/hugetlb: Prepare hugetlb_follow_page_mask() for FOLL_PIN Peter Xu
2023-06-20 15:22   ` David Hildenbrand
2023-06-20 16:03     ` Peter Xu
2023-06-20 15:28   ` David Hildenbrand
2023-06-20 16:06     ` Peter Xu
2023-06-19 23:10 ` [PATCH v2 3/8] mm/hugetlb: Add page_mask for hugetlb_follow_page_mask() Peter Xu
2023-06-20 15:23   ` David Hildenbrand
2023-06-20 16:28     ` Peter Xu [this message]
2023-06-20 17:54       ` David Hildenbrand
2023-06-19 23:10 ` [PATCH v2 4/8] mm/gup: Cleanup next_page handling Peter Xu
2023-06-20 15:23   ` David Hildenbrand
2023-06-19 23:10 ` [PATCH v2 5/8] mm/gup: Accelerate thp gup even for "pages != NULL" Peter Xu
2023-06-20 15:43   ` David Hildenbrand
2023-06-20 16:23     ` Peter Xu
2023-06-20 18:02       ` David Hildenbrand
2023-06-20 20:12         ` Peter Xu
2023-06-20 21:43   ` Lorenzo Stoakes
2023-06-19 23:10 ` [PATCH v2 6/8] mm/gup: Retire follow_hugetlb_page() Peter Xu
2023-06-19 23:10 ` [PATCH v2 7/8] selftests/mm: Add -a to run_vmtests.sh Peter Xu
2023-06-19 23:10 ` [PATCH v2 8/8] selftests/mm: Add gup test matrix in run_vmtests.sh Peter Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZJHTqsCsLUAprEPc@x1n \
    --to=peterx@redhat.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=jgg@nvidia.com \
    --cc=jhubbard@nvidia.com \
    --cc=jthoughton@google.com \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lstoakes@gmail.com \
    --cc=mike.kravetz@oracle.com \
    --cc=rppt@kernel.org \
    --cc=vbabka@suse.cz \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.