From: Alistair Popple <apopple@nvidia.com>
To: Zi Yan <ziy@nvidia.com>
Cc: <linux-mm@kvack.org>, <nouveau@lists.freedesktop.org>,
<bskeggs@redhat.com>, <akpm@linux-foundation.org>,
<linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<dri-devel@lists.freedesktop.org>, <jhubbard@nvidia.com>,
<rcampbell@nvidia.com>, <jglisse@redhat.com>, <jgg@nvidia.com>,
<hch@infradead.org>, <daniel@ffwll.ch>
Subject: Re: [PATCH v3 4/8] mm/rmap: Split migration into its own function
Date: Fri, 5 Mar 2021 10:54:48 +1100 [thread overview]
Message-ID: <84997524.IMQpRet0Aq@nvdebian> (raw)
In-Reply-To: <E93F89E1-3CE2-4CA3-97D9-6BCED78E1001@nvidia.com>
On Wednesday, 3 March 2021 9:08:15 AM AEDT Zi Yan wrote:
> On 26 Feb 2021, at 2:18, Alistair Popple wrote:
> > diff --git a/include/linux/rmap.h b/include/linux/rmap.h
> > index 7f1ee411bd7b..77fa17de51d7 100644
> > --- a/include/linux/rmap.h
> > +++ b/include/linux/rmap.h
> > @@ -86,8 +86,6 @@ struct anon_vma_chain {
> > };
> >
> > enum ttu_flags {
> > - TTU_MIGRATION = 0x1, /* migration mode */
> > -
> > TTU_SPLIT_HUGE_PMD = 0x4, /* split huge PMD if any */
>
> It implies freeze in try_to_migrate() and no freeze in try_to_unmap(). I
think
> we need some comments here, above try_to_migrate(), and above try_to_unmap()
> to clarify the implication.
Sure. This confused me for a bit and I was initially tempted to leave
TTU_SPLIT_FREEZE as a separate mode flag but looking at what freeze actually
does it made sense to remove it because try_to_migrate() is for installing
migration entries (which is what freeze does) and try_to_unmap() just unmaps.
So I'll add some comments to that effect.
> > TTU_IGNORE_MLOCK = 0x8, /* ignore mlock */
> > TTU_IGNORE_HWPOISON = 0x20, /* corrupted page is recoverable */
> > @@ -96,7 +94,6 @@ enum ttu_flags {
> > * do a final flush if necessary */
> > TTU_RMAP_LOCKED = 0x80, /* do not grab rmap lock:
> > * caller holds it */
> > - TTU_SPLIT_FREEZE = 0x100, /* freeze pte under splitting thp */
> > };
> >
> > #ifdef CONFIG_MMU
> > @@ -193,6 +190,7 @@ static inline void page_dup_rmap(struct page *page,
bool compound)
> > int page_referenced(struct page *, int is_locked,
> > struct mem_cgroup *memcg, unsigned long *vm_flags);
> >
> > +bool try_to_migrate(struct page *page, enum ttu_flags flags);
> > bool try_to_unmap(struct page *, enum ttu_flags flags);
> >
> > /* Avoid racy checks */
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index d00b93dc2d9e..357052a4567b 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -2351,16 +2351,16 @@ void vma_adjust_trans_huge(struct vm_area_struct
*vma,
> >
> > static void unmap_page(struct page *page)
> > {
> > - enum ttu_flags ttu_flags = TTU_IGNORE_MLOCK |
> > - TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
> > + enum ttu_flags ttu_flags = TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
> > bool unmap_success;
> >
> > VM_BUG_ON_PAGE(!PageHead(page), page);
> >
> > if (PageAnon(page))
> > - ttu_flags |= TTU_SPLIT_FREEZE;
> > -
> > - unmap_success = try_to_unmap(page, ttu_flags);
> > + unmap_success = try_to_migrate(page, ttu_flags);
> > + else
> > + unmap_success = try_to_unmap(page, ttu_flags |
> > + TTU_IGNORE_MLOCK);
>
> I think we need a comment here about why anonymous pages need
try_to_migrate()
> and others need try_to_unmap().
Historically this comes from baa355fd3314 ("thp: file pages support for
split_huge_page()") which says:
"We don't setup migration entries. Just unmap pages. It helps handling cases
when i_size is in the middle of the page: no need handle unmap pages beyond
i_size manually."
But I'll add a comment here, thanks.
- Alistair
> Thanks.
>
> —
> Best Regards,
> Yan Zi
WARNING: multiple messages have this Message-ID (diff)
From: Alistair Popple <apopple@nvidia.com>
To: Zi Yan <ziy@nvidia.com>
Cc: rcampbell@nvidia.com, daniel@ffwll.ch, linux-doc@vger.kernel.org,
nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org,
dri-devel@lists.freedesktop.org, hch@infradead.org,
linux-mm@kvack.org, bskeggs@redhat.com, jgg@nvidia.com,
akpm@linux-foundation.org
Subject: Re: [Nouveau] [PATCH v3 4/8] mm/rmap: Split migration into its own function
Date: Fri, 5 Mar 2021 10:54:48 +1100 [thread overview]
Message-ID: <84997524.IMQpRet0Aq@nvdebian> (raw)
In-Reply-To: <E93F89E1-3CE2-4CA3-97D9-6BCED78E1001@nvidia.com>
On Wednesday, 3 March 2021 9:08:15 AM AEDT Zi Yan wrote:
> On 26 Feb 2021, at 2:18, Alistair Popple wrote:
> > diff --git a/include/linux/rmap.h b/include/linux/rmap.h
> > index 7f1ee411bd7b..77fa17de51d7 100644
> > --- a/include/linux/rmap.h
> > +++ b/include/linux/rmap.h
> > @@ -86,8 +86,6 @@ struct anon_vma_chain {
> > };
> >
> > enum ttu_flags {
> > - TTU_MIGRATION = 0x1, /* migration mode */
> > -
> > TTU_SPLIT_HUGE_PMD = 0x4, /* split huge PMD if any */
>
> It implies freeze in try_to_migrate() and no freeze in try_to_unmap(). I
think
> we need some comments here, above try_to_migrate(), and above try_to_unmap()
> to clarify the implication.
Sure. This confused me for a bit and I was initially tempted to leave
TTU_SPLIT_FREEZE as a separate mode flag but looking at what freeze actually
does it made sense to remove it because try_to_migrate() is for installing
migration entries (which is what freeze does) and try_to_unmap() just unmaps.
So I'll add some comments to that effect.
> > TTU_IGNORE_MLOCK = 0x8, /* ignore mlock */
> > TTU_IGNORE_HWPOISON = 0x20, /* corrupted page is recoverable */
> > @@ -96,7 +94,6 @@ enum ttu_flags {
> > * do a final flush if necessary */
> > TTU_RMAP_LOCKED = 0x80, /* do not grab rmap lock:
> > * caller holds it */
> > - TTU_SPLIT_FREEZE = 0x100, /* freeze pte under splitting thp */
> > };
> >
> > #ifdef CONFIG_MMU
> > @@ -193,6 +190,7 @@ static inline void page_dup_rmap(struct page *page,
bool compound)
> > int page_referenced(struct page *, int is_locked,
> > struct mem_cgroup *memcg, unsigned long *vm_flags);
> >
> > +bool try_to_migrate(struct page *page, enum ttu_flags flags);
> > bool try_to_unmap(struct page *, enum ttu_flags flags);
> >
> > /* Avoid racy checks */
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index d00b93dc2d9e..357052a4567b 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -2351,16 +2351,16 @@ void vma_adjust_trans_huge(struct vm_area_struct
*vma,
> >
> > static void unmap_page(struct page *page)
> > {
> > - enum ttu_flags ttu_flags = TTU_IGNORE_MLOCK |
> > - TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
> > + enum ttu_flags ttu_flags = TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
> > bool unmap_success;
> >
> > VM_BUG_ON_PAGE(!PageHead(page), page);
> >
> > if (PageAnon(page))
> > - ttu_flags |= TTU_SPLIT_FREEZE;
> > -
> > - unmap_success = try_to_unmap(page, ttu_flags);
> > + unmap_success = try_to_migrate(page, ttu_flags);
> > + else
> > + unmap_success = try_to_unmap(page, ttu_flags |
> > + TTU_IGNORE_MLOCK);
>
> I think we need a comment here about why anonymous pages need
try_to_migrate()
> and others need try_to_unmap().
Historically this comes from baa355fd3314 ("thp: file pages support for
split_huge_page()") which says:
"We don't setup migration entries. Just unmap pages. It helps handling cases
when i_size is in the middle of the page: no need handle unmap pages beyond
i_size manually."
But I'll add a comment here, thanks.
- Alistair
> Thanks.
>
> —
> Best Regards,
> Yan Zi
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau
WARNING: multiple messages have this Message-ID (diff)
From: Alistair Popple <apopple@nvidia.com>
To: Zi Yan <ziy@nvidia.com>
Cc: rcampbell@nvidia.com, linux-doc@vger.kernel.org,
nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org,
dri-devel@lists.freedesktop.org, hch@infradead.org,
linux-mm@kvack.org, jglisse@redhat.com, bskeggs@redhat.com,
jgg@nvidia.com, jhubbard@nvidia.com, akpm@linux-foundation.org
Subject: Re: [PATCH v3 4/8] mm/rmap: Split migration into its own function
Date: Fri, 5 Mar 2021 10:54:48 +1100 [thread overview]
Message-ID: <84997524.IMQpRet0Aq@nvdebian> (raw)
In-Reply-To: <E93F89E1-3CE2-4CA3-97D9-6BCED78E1001@nvidia.com>
On Wednesday, 3 March 2021 9:08:15 AM AEDT Zi Yan wrote:
> On 26 Feb 2021, at 2:18, Alistair Popple wrote:
> > diff --git a/include/linux/rmap.h b/include/linux/rmap.h
> > index 7f1ee411bd7b..77fa17de51d7 100644
> > --- a/include/linux/rmap.h
> > +++ b/include/linux/rmap.h
> > @@ -86,8 +86,6 @@ struct anon_vma_chain {
> > };
> >
> > enum ttu_flags {
> > - TTU_MIGRATION = 0x1, /* migration mode */
> > -
> > TTU_SPLIT_HUGE_PMD = 0x4, /* split huge PMD if any */
>
> It implies freeze in try_to_migrate() and no freeze in try_to_unmap(). I
think
> we need some comments here, above try_to_migrate(), and above try_to_unmap()
> to clarify the implication.
Sure. This confused me for a bit and I was initially tempted to leave
TTU_SPLIT_FREEZE as a separate mode flag but looking at what freeze actually
does it made sense to remove it because try_to_migrate() is for installing
migration entries (which is what freeze does) and try_to_unmap() just unmaps.
So I'll add some comments to that effect.
> > TTU_IGNORE_MLOCK = 0x8, /* ignore mlock */
> > TTU_IGNORE_HWPOISON = 0x20, /* corrupted page is recoverable */
> > @@ -96,7 +94,6 @@ enum ttu_flags {
> > * do a final flush if necessary */
> > TTU_RMAP_LOCKED = 0x80, /* do not grab rmap lock:
> > * caller holds it */
> > - TTU_SPLIT_FREEZE = 0x100, /* freeze pte under splitting thp */
> > };
> >
> > #ifdef CONFIG_MMU
> > @@ -193,6 +190,7 @@ static inline void page_dup_rmap(struct page *page,
bool compound)
> > int page_referenced(struct page *, int is_locked,
> > struct mem_cgroup *memcg, unsigned long *vm_flags);
> >
> > +bool try_to_migrate(struct page *page, enum ttu_flags flags);
> > bool try_to_unmap(struct page *, enum ttu_flags flags);
> >
> > /* Avoid racy checks */
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index d00b93dc2d9e..357052a4567b 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -2351,16 +2351,16 @@ void vma_adjust_trans_huge(struct vm_area_struct
*vma,
> >
> > static void unmap_page(struct page *page)
> > {
> > - enum ttu_flags ttu_flags = TTU_IGNORE_MLOCK |
> > - TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
> > + enum ttu_flags ttu_flags = TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
> > bool unmap_success;
> >
> > VM_BUG_ON_PAGE(!PageHead(page), page);
> >
> > if (PageAnon(page))
> > - ttu_flags |= TTU_SPLIT_FREEZE;
> > -
> > - unmap_success = try_to_unmap(page, ttu_flags);
> > + unmap_success = try_to_migrate(page, ttu_flags);
> > + else
> > + unmap_success = try_to_unmap(page, ttu_flags |
> > + TTU_IGNORE_MLOCK);
>
> I think we need a comment here about why anonymous pages need
try_to_migrate()
> and others need try_to_unmap().
Historically this comes from baa355fd3314 ("thp: file pages support for
split_huge_page()") which says:
"We don't setup migration entries. Just unmap pages. It helps handling cases
when i_size is in the middle of the page: no need handle unmap pages beyond
i_size manually."
But I'll add a comment here, thanks.
- Alistair
> Thanks.
>
> —
> Best Regards,
> Yan Zi
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2021-03-04 23:54 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-26 7:18 [PATCH v3 0/8] Add support for SVM atomics in Nouveau Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-02-26 7:18 ` [PATCH v3 1/8] mm: Remove special swap entry functions Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-02-26 15:59 ` Christoph Hellwig
2021-02-26 15:59 ` [Nouveau] " Christoph Hellwig
2021-03-02 8:52 ` Alistair Popple
2021-03-02 8:52 ` Alistair Popple
2021-03-02 8:52 ` [Nouveau] " Alistair Popple
2021-03-02 12:02 ` Alistair Popple
2021-03-02 12:02 ` Alistair Popple
2021-03-02 12:02 ` [Nouveau] " Alistair Popple
2021-03-01 17:46 ` Jason Gunthorpe
2021-03-01 17:46 ` Jason Gunthorpe
2021-03-01 17:46 ` [Nouveau] " Jason Gunthorpe
2021-03-02 0:21 ` Alistair Popple
2021-03-02 0:21 ` Alistair Popple
2021-03-02 0:21 ` [Nouveau] " Alistair Popple
2021-02-26 7:18 ` [PATCH v3 2/8] mm/swapops: Rework swap entry manipulation code Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-02-26 16:00 ` Christoph Hellwig
2021-02-26 16:00 ` [Nouveau] " Christoph Hellwig
2021-03-01 17:47 ` Jason Gunthorpe
2021-03-01 17:47 ` Jason Gunthorpe
2021-03-01 17:47 ` [Nouveau] " Jason Gunthorpe
2021-02-26 7:18 ` [PATCH v3 3/8] mm/rmap: Split try_to_munlock from try_to_unmap Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-02-26 16:01 ` Christoph Hellwig
2021-02-26 16:01 ` [Nouveau] " Christoph Hellwig
2021-03-01 16:10 ` Jason Gunthorpe
2021-03-01 16:10 ` Jason Gunthorpe
2021-03-01 16:10 ` [Nouveau] " Jason Gunthorpe
2021-03-04 4:27 ` Alistair Popple
2021-03-04 4:27 ` Alistair Popple
2021-03-04 4:27 ` [Nouveau] " Alistair Popple
2021-02-26 7:18 ` [PATCH v3 4/8] mm/rmap: Split migration into its own function Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-02-26 16:03 ` Christoph Hellwig
2021-02-26 16:03 ` [Nouveau] " Christoph Hellwig
2021-03-02 22:08 ` Zi Yan
2021-03-02 22:08 ` Zi Yan
2021-03-02 22:08 ` [Nouveau] " Zi Yan
2021-03-04 23:54 ` Alistair Popple [this message]
2021-03-04 23:54 ` Alistair Popple
2021-03-04 23:54 ` [Nouveau] " Alistair Popple
2021-02-26 7:18 ` [PATCH v3 5/8] mm: Device exclusive memory access Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-03-01 17:54 ` Jason Gunthorpe
2021-03-01 17:54 ` Jason Gunthorpe
2021-03-01 17:54 ` [Nouveau] " Jason Gunthorpe
2021-03-01 22:55 ` Ralph Campbell
2021-03-01 22:55 ` Ralph Campbell
2021-03-01 22:55 ` [Nouveau] " Ralph Campbell
2021-03-02 0:05 ` Jason Gunthorpe
2021-03-02 0:05 ` Jason Gunthorpe
2021-03-02 0:05 ` [Nouveau] " Jason Gunthorpe
2021-03-02 8:57 ` Alistair Popple
2021-03-02 8:57 ` Alistair Popple
2021-03-02 8:57 ` [Nouveau] " Alistair Popple
2021-03-02 12:41 ` Jason Gunthorpe
2021-03-02 12:41 ` Jason Gunthorpe
2021-03-02 12:41 ` [Nouveau] " Jason Gunthorpe
2021-03-04 5:20 ` Alistair Popple
2021-03-04 5:20 ` Alistair Popple
2021-03-04 5:20 ` [Nouveau] " Alistair Popple
2021-02-26 7:18 ` [PATCH v3 6/8] mm: Selftests for exclusive device memory Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-03-01 17:55 ` Jason Gunthorpe
2021-03-01 17:55 ` Jason Gunthorpe
2021-03-01 17:55 ` [Nouveau] " Jason Gunthorpe
2021-03-01 18:07 ` Ralph Campbell
2021-03-01 18:07 ` Ralph Campbell
2021-03-01 18:07 ` [Nouveau] " Ralph Campbell
2021-03-01 23:14 ` Ralph Campbell
2021-03-01 23:14 ` Ralph Campbell
2021-03-01 23:14 ` [Nouveau] " Ralph Campbell
2021-03-02 9:12 ` Alistair Popple
2021-03-02 9:12 ` Alistair Popple
2021-03-02 9:12 ` [Nouveau] " Alistair Popple
2021-02-26 7:18 ` [PATCH v3 7/8] nouveau/svm: Refactor nouveau_range_fault Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
2021-02-26 7:18 ` [PATCH v3 8/8] nouveau/svm: Implement atomic SVM access Alistair Popple
2021-02-26 7:18 ` Alistair Popple
2021-02-26 7:18 ` [Nouveau] " Alistair Popple
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=84997524.IMQpRet0Aq@nvdebian \
--to=apopple@nvidia.com \
--cc=akpm@linux-foundation.org \
--cc=bskeggs@redhat.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=hch@infradead.org \
--cc=jgg@nvidia.com \
--cc=jglisse@redhat.com \
--cc=jhubbard@nvidia.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=nouveau@lists.freedesktop.org \
--cc=rcampbell@nvidia.com \
--cc=ziy@nvidia.com \
/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.