Re: [PATCH v3 4/7] mm/thp: Carry over dirty bit when thp splits on pmd

From: Peter Xu
Date: Wed Aug 10 2022 - 11:14:28 EST


On Wed, Aug 10, 2022 at 02:24:33PM +0800, Huang, Ying wrote:
> Peter Xu <peterx@xxxxxxxxxx> writes:
>
> > Carry over the dirty bit from pmd to pte when a huge pmd splits. It
> > shouldn't be a correctness issue since when pmd_dirty() we'll have the page
> > marked dirty anyway, however having dirty bit carried over helps the next
> > initial writes of split ptes on some archs like x86.
> >
> > Signed-off-by: Peter Xu <peterx@xxxxxxxxxx>
> > ---
> > mm/huge_memory.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index 0611b2fd145a..e8e78d1bac5f 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -2005,7 +2005,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
> > pgtable_t pgtable;
> > pmd_t old_pmd, _pmd;
> > bool young, write, soft_dirty, pmd_migration = false, uffd_wp = false;
> > - bool anon_exclusive = false;
> > + bool anon_exclusive = false, dirty = false;
> > unsigned long addr;
> > int i;
> >
> > @@ -2098,6 +2098,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,
> > SetPageDirty(page);
> > write = pmd_write(old_pmd);
> > young = pmd_young(old_pmd);
> > + dirty = pmd_dirty(old_pmd);
>
> Nitpick: This can be put under
>
> if (pmd_dirty(old_pmd))
> SetPageDirty(page);
>
> Not a big deal.
>
> Reviewed-by: "Huang, Ying" <ying.huang@xxxxxxxxx>

Yeah will do, thanks.

--
Peter Xu