diff for duplicates of <20181012165012.GD223066@joelaf.mtv.corp.google.com> diff --git a/a/1.txt b/N1/1.txt index 0d24ba6..5380f76 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -36,19 +36,19 @@ On Fri, Oct 12, 2018 at 05:42:24PM +0100, Anton Ivanov wrote: > > > > > doing so is not much compared the improvement, on both > > > > > x86-64 and arm64. > > > > > -> > > > > Cc: minchan at kernel.org -> > > > > Cc: pantin at google.com -> > > > > Cc: hughd at google.com -> > > > > Cc: lokeshgidra at google.com -> > > > > Cc: dancol at google.com -> > > > > Cc: mhocko at kernel.org -> > > > > Cc: kirill at shutemov.name -> > > > > Cc: akpm at linux-foundation.org +> > > > > Cc: minchan@kernel.org +> > > > > Cc: pantin@google.com +> > > > > Cc: hughd@google.com +> > > > > Cc: lokeshgidra@google.com +> > > > > Cc: dancol@google.com +> > > > > Cc: mhocko@kernel.org +> > > > > Cc: kirill@shutemov.name +> > > > > Cc: akpm@linux-foundation.org > > > > > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> > > > > > --- -> > > > > ?? mm/mremap.c | 62 +> > > > > mm/mremap.c | 62 > > > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++ -> > > > > ?? 1 file changed, 62 insertions(+) +> > > > > 1 file changed, 62 insertions(+) > > > > > > > > > > diff --git a/mm/mremap.c b/mm/mremap.c > > > > > index 9e68a02a52b1..d82c485822ef 100644 @@ -56,47 +56,47 @@ On Fri, Oct 12, 2018 at 05:42:24PM +0100, Anton Ivanov wrote: > > > > > +++ b/mm/mremap.c > > > > > @@ -191,6 +191,54 @@ static void move_ptes(struct > > > > > vm_area_struct *vma, pmd_t *old_pmd, -> > > > > ?????????? drop_rmap_locks(vma); -> > > > > ?? } +> > > > > drop_rmap_locks(vma); +> > > > > } > > > > > +static bool move_normal_pmd(struct vm_area_struct *vma, > > > > > unsigned long old_addr, -> > > > > +????????? unsigned long new_addr, unsigned long old_end, -> > > > > +????????? pmd_t *old_pmd, pmd_t *new_pmd, bool *need_flush) +> > > > > + unsigned long new_addr, unsigned long old_end, +> > > > > + pmd_t *old_pmd, pmd_t *new_pmd, bool *need_flush) > > > > > +{ -> > > > > +??? spinlock_t *old_ptl, *new_ptl; -> > > > > +??? struct mm_struct *mm = vma->vm_mm; +> > > > > + spinlock_t *old_ptl, *new_ptl; +> > > > > + struct mm_struct *mm = vma->vm_mm; > > > > > + -> > > > > +??? if ((old_addr & ~PMD_MASK) || (new_addr & ~PMD_MASK) -> > > > > +??????? || old_end - old_addr < PMD_SIZE) -> > > > > +??????? return false; +> > > > > + if ((old_addr & ~PMD_MASK) || (new_addr & ~PMD_MASK) +> > > > > + || old_end - old_addr < PMD_SIZE) +> > > > > + return false; > > > > > + -> > > > > +??? /* -> > > > > +???? * The destination pmd shouldn't be established, free_pgtables() -> > > > > +???? * should have release it. -> > > > > +???? */ -> > > > > +??? if (WARN_ON(!pmd_none(*new_pmd))) -> > > > > +??????? return false; +> > > > > + /* +> > > > > + * The destination pmd shouldn't be established, free_pgtables() +> > > > > + * should have release it. +> > > > > + */ +> > > > > + if (WARN_ON(!pmd_none(*new_pmd))) +> > > > > + return false; > > > > > + -> > > > > +??? /* -> > > > > +???? * We don't have to worry about the ordering of src and dst -> > > > > +???? * ptlocks because exclusive mmap_sem prevents deadlock. -> > > > > +???? */ -> > > > > +??? old_ptl = pmd_lock(vma->vm_mm, old_pmd); -> > > > > +??? if (old_ptl) { -> > > > > +??????? pmd_t pmd; +> > > > > + /* +> > > > > + * We don't have to worry about the ordering of src and dst +> > > > > + * ptlocks because exclusive mmap_sem prevents deadlock. +> > > > > + */ +> > > > > + old_ptl = pmd_lock(vma->vm_mm, old_pmd); +> > > > > + if (old_ptl) { +> > > > > + pmd_t pmd; > > > > > + -> > > > > +??????? new_ptl = pmd_lockptr(mm, new_pmd); -> > > > > +??????? if (new_ptl != old_ptl) -> > > > > +??????????? spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING); +> > > > > + new_ptl = pmd_lockptr(mm, new_pmd); +> > > > > + if (new_ptl != old_ptl) +> > > > > + spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING); > > > > > + -> > > > > +??????? /* Clear the pmd */ -> > > > > +??????? pmd = *old_pmd; -> > > > > +??????? pmd_clear(old_pmd); +> > > > > + /* Clear the pmd */ +> > > > > + pmd = *old_pmd; +> > > > > + pmd_clear(old_pmd); > > > > > + -> > > > > +??????? VM_BUG_ON(!pmd_none(*new_pmd)); +> > > > > + VM_BUG_ON(!pmd_none(*new_pmd)); > > > > > + -> > > > > +??????? /* Set the new pmd */ -> > > > > +??????? set_pmd_at(mm, new_addr, new_pmd, pmd); +> > > > > + /* Set the new pmd */ +> > > > > + set_pmd_at(mm, new_addr, new_pmd, pmd); > > > > UML does not have set_pmd_at at all > > > Every architecture does. :) > > @@ -205,3 +205,9 @@ into a separate patch for my series with you as author. thanks, - Joel + + +_______________________________________________ +linux-riscv mailing list +linux-riscv@lists.infradead.org +http://lists.infradead.org/mailman/listinfo/linux-riscv diff --git a/a/content_digest b/N1/content_digest index ef51aa1..936f866 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -4,10 +4,70 @@ "ref\020181012143728.t42uvr6etg7gp7fh@kshutemo-mobl1\0" "ref\04dd52e22-5b51-9b30-7178-fde603a08f88@kot-begemot.co.uk\0" "ref\097cb3fe1-7bc1-12ff-d602-56c72a5496c5@kot-begemot.co.uk\0" - "From\0joel@joelfernandes.org (Joel Fernandes)\0" - "Subject\0[PATCH v2 2/2] mm: speed up mremap by 500x on large regions\0" + "From\0Joel Fernandes <joel@joelfernandes.org>\0" + "Subject\0Re: [PATCH v2 2/2] mm: speed up mremap by 500x on large regions\0" "Date\0Fri, 12 Oct 2018 09:50:12 -0700\0" - "To\0linux-riscv@lists.infradead.org\0" + "To\0Anton Ivanov <anton.ivanov@kot-begemot.co.uk>\0" + "Cc\0linux-mips@linux-mips.org" + Rich Felker <dalias@libc.org> + linux-ia64@vger.kernel.org + linux-sh@vger.kernel.org + Peter Zijlstra <peterz@infradead.org> + Catalin Marinas <catalin.marinas@arm.com> + Dave Hansen <dave.hansen@linux.intel.com> + Will Deacon <will.deacon@arm.com> + mhocko@kernel.org + linux-mm@kvack.org + lokeshgidra@google.com + sparclinux@vger.kernel.org + linux-riscv@lists.infradead.org + elfring@users.sourceforge.net + Jonas Bonn <jonas@southpole.se> + linux-s390@vger.kernel.org + dancol@google.com + Yoshinori Sato <ysato@users.sourceforge.jp> + Max Filippov <jcmvbkbc@gmail.com> + linux-hexagon@vger.kernel.org + Helge Deller <deller@gmx.de> + maintainer:X86 ARCHITECTURE 32-BIT AND 64-BIT <x86@kernel.org> + hughd@google.com + James E.J. Bottomley <jejb@parisc-linux.org> + kasan-dev@googlegroups.com + kvmarm@lists.cs.columbia.edu + Ingo Molnar <mingo@redhat.com> + Geert Uytterhoeven <geert@linux-m68k.org> + Andrey Ryabinin <aryabinin@virtuozzo.com> + linux-snps-arc@lists.infradead.org + kernel-team@android.com + Sam Creasey <sammy@sammy.net> + linux-xtensa@linux-xtensa.org + Jeff Dike <jdike@addtoit.com> + linux-alpha@vger.kernel.org + linux-um@lists.infradead.org + Stefan Kristiansson <stefan.kristiansson@saunalahti.fi> + Julia Lawall <Julia.Lawall@lip6.fr> + linux-m68k@lists.linux-m68k.org + openrisc@lists.librecores.org + Borislav Petkov <bp@alien8.de> + Andy Lutomirski <luto@kernel.org> + Ley Foon Tan <lftan@altera.com> + Kirill A. Shutemov <kirill@shutemov.name> + Stafford Horne <shorne@gmail.com> + Guan Xuetao <gxt@pku.edu.cn> + linux-arm-kernel@lists.infradead.org + Chris Zankel <chris@zankel.net> + Tony Luck <tony.luck@intel.com> + linux-parisc@vger.kernel.org + pantin@google.com + linux-kernel@vger.kernel.org + Fenghua Yu <fenghua.yu@intel.com> + minchan@kernel.org + Thomas Gleixner <tglx@linutronix.de> + Richard Weinberger <richard@nod.at> + nios2-dev@lists.rocketboards.org + akpm@linux-foundation.org + linuxppc-dev@lists.ozlabs.org + " David S. Miller <davem@davemloft.net>\0" "\00:1\0" "b\0" "On Fri, Oct 12, 2018 at 05:42:24PM +0100, Anton Ivanov wrote:\n" @@ -48,19 +108,19 @@ "> > > > > doing so is not much compared the improvement, on both\n" "> > > > > x86-64 and arm64.\n" "> > > > > \n" - "> > > > > Cc: minchan at kernel.org\n" - "> > > > > Cc: pantin at google.com\n" - "> > > > > Cc: hughd at google.com\n" - "> > > > > Cc: lokeshgidra at google.com\n" - "> > > > > Cc: dancol at google.com\n" - "> > > > > Cc: mhocko at kernel.org\n" - "> > > > > Cc: kirill at shutemov.name\n" - "> > > > > Cc: akpm at linux-foundation.org\n" + "> > > > > Cc: minchan@kernel.org\n" + "> > > > > Cc: pantin@google.com\n" + "> > > > > Cc: hughd@google.com\n" + "> > > > > Cc: lokeshgidra@google.com\n" + "> > > > > Cc: dancol@google.com\n" + "> > > > > Cc: mhocko@kernel.org\n" + "> > > > > Cc: kirill@shutemov.name\n" + "> > > > > Cc: akpm@linux-foundation.org\n" "> > > > > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>\n" "> > > > > ---\n" - "> > > > > ?? mm/mremap.c | 62\n" + "> > > > > \302\240\302\240 mm/mremap.c | 62\n" "> > > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++\n" - "> > > > > ?? 1 file changed, 62 insertions(+)\n" + "> > > > > \302\240\302\240 1 file changed, 62 insertions(+)\n" "> > > > > \n" "> > > > > diff --git a/mm/mremap.c b/mm/mremap.c\n" "> > > > > index 9e68a02a52b1..d82c485822ef 100644\n" @@ -68,47 +128,47 @@ "> > > > > +++ b/mm/mremap.c\n" "> > > > > @@ -191,6 +191,54 @@ static void move_ptes(struct\n" "> > > > > vm_area_struct *vma, pmd_t *old_pmd,\n" - "> > > > > ?????????? drop_rmap_locks(vma);\n" - "> > > > > ?? }\n" + "> > > > > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 drop_rmap_locks(vma);\n" + "> > > > > \302\240\302\240 }\n" "> > > > > +static bool move_normal_pmd(struct vm_area_struct *vma,\n" "> > > > > unsigned long old_addr,\n" - "> > > > > +????????? unsigned long new_addr, unsigned long old_end,\n" - "> > > > > +????????? pmd_t *old_pmd, pmd_t *new_pmd, bool *need_flush)\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 unsigned long new_addr, unsigned long old_end,\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 pmd_t *old_pmd, pmd_t *new_pmd, bool *need_flush)\n" "> > > > > +{\n" - "> > > > > +??? spinlock_t *old_ptl, *new_ptl;\n" - "> > > > > +??? struct mm_struct *mm = vma->vm_mm;\n" + "> > > > > +\302\240\302\240\302\240 spinlock_t *old_ptl, *new_ptl;\n" + "> > > > > +\302\240\302\240\302\240 struct mm_struct *mm = vma->vm_mm;\n" "> > > > > +\n" - "> > > > > +??? if ((old_addr & ~PMD_MASK) || (new_addr & ~PMD_MASK)\n" - "> > > > > +??????? || old_end - old_addr < PMD_SIZE)\n" - "> > > > > +??????? return false;\n" + "> > > > > +\302\240\302\240\302\240 if ((old_addr & ~PMD_MASK) || (new_addr & ~PMD_MASK)\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 || old_end - old_addr < PMD_SIZE)\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 return false;\n" "> > > > > +\n" - "> > > > > +??? /*\n" - "> > > > > +???? * The destination pmd shouldn't be established, free_pgtables()\n" - "> > > > > +???? * should have release it.\n" - "> > > > > +???? */\n" - "> > > > > +??? if (WARN_ON(!pmd_none(*new_pmd)))\n" - "> > > > > +??????? return false;\n" + "> > > > > +\302\240\302\240\302\240 /*\n" + "> > > > > +\302\240\302\240\302\240\302\240 * The destination pmd shouldn't be established, free_pgtables()\n" + "> > > > > +\302\240\302\240\302\240\302\240 * should have release it.\n" + "> > > > > +\302\240\302\240\302\240\302\240 */\n" + "> > > > > +\302\240\302\240\302\240 if (WARN_ON(!pmd_none(*new_pmd)))\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 return false;\n" "> > > > > +\n" - "> > > > > +??? /*\n" - "> > > > > +???? * We don't have to worry about the ordering of src and dst\n" - "> > > > > +???? * ptlocks because exclusive mmap_sem prevents deadlock.\n" - "> > > > > +???? */\n" - "> > > > > +??? old_ptl = pmd_lock(vma->vm_mm, old_pmd);\n" - "> > > > > +??? if (old_ptl) {\n" - "> > > > > +??????? pmd_t pmd;\n" + "> > > > > +\302\240\302\240\302\240 /*\n" + "> > > > > +\302\240\302\240\302\240\302\240 * We don't have to worry about the ordering of src and dst\n" + "> > > > > +\302\240\302\240\302\240\302\240 * ptlocks because exclusive mmap_sem prevents deadlock.\n" + "> > > > > +\302\240\302\240\302\240\302\240 */\n" + "> > > > > +\302\240\302\240\302\240 old_ptl = pmd_lock(vma->vm_mm, old_pmd);\n" + "> > > > > +\302\240\302\240\302\240 if (old_ptl) {\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 pmd_t pmd;\n" "> > > > > +\n" - "> > > > > +??????? new_ptl = pmd_lockptr(mm, new_pmd);\n" - "> > > > > +??????? if (new_ptl != old_ptl)\n" - "> > > > > +??????????? spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING);\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 new_ptl = pmd_lockptr(mm, new_pmd);\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 if (new_ptl != old_ptl)\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240 spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING);\n" "> > > > > +\n" - "> > > > > +??????? /* Clear the pmd */\n" - "> > > > > +??????? pmd = *old_pmd;\n" - "> > > > > +??????? pmd_clear(old_pmd);\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /* Clear the pmd */\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 pmd = *old_pmd;\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 pmd_clear(old_pmd);\n" "> > > > > +\n" - "> > > > > +??????? VM_BUG_ON(!pmd_none(*new_pmd));\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 VM_BUG_ON(!pmd_none(*new_pmd));\n" "> > > > > +\n" - "> > > > > +??????? /* Set the new pmd */\n" - "> > > > > +??????? set_pmd_at(mm, new_addr, new_pmd, pmd);\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 /* Set the new pmd */\n" + "> > > > > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240 set_pmd_at(mm, new_addr, new_pmd, pmd);\n" "> > > > UML does not have set_pmd_at at all\n" "> > > Every architecture does. :)\n" "> > \n" @@ -216,6 +276,12 @@ "\n" "thanks,\n" "\n" - - Joel + "- Joel\n" + "\n" + "\n" + "_______________________________________________\n" + "linux-riscv mailing list\n" + "linux-riscv@lists.infradead.org\n" + http://lists.infradead.org/mailman/listinfo/linux-riscv -65d1ff9a76d921300f98afcb14edc8db44e89cbd17ce4bb003b08d3f5923b29a +2f31ef1c183bbf1974ee6a2898c5a5123605f94535c403ee48ab2a10dde9b474
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox