On Thu, Mar 03, 2016 at 04:41:52PM +0900, Naoya Horiguchi wrote: > If one of callers of page migration starts to handle thp, memory management code > start to see pmd migration entry, so we need to prepare for it before enabling. > This patch changes various code point which checks the status of given pmds in > order to prevent race between thp migration and the pmd-related works. > > Signed-off-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> > --- > arch/x86/mm/gup.c | 3 +++ > fs/proc/task_mmu.c | 25 +++++++++++++-------- > mm/gup.c | 8 +++++++ > mm/huge_memory.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++------ > mm/memcontrol.c | 2 ++ > mm/memory.c | 5 +++++ > 6 files changed, 93 insertions(+), 16 deletions(-) > > diff --git v4.5-rc5-mmotm-2016-02-24-16-18/arch/x86/mm/gup.c v4.5-rc5-mmotm-2016-02-24-16-18_patched/arch/x86/mm/gup.c > index f8d0b5e..34c3d43 100644 > --- v4.5-rc5-mmotm-2016-02-24-16-18/arch/x86/mm/gup.c > +++ v4.5-rc5-mmotm-2016-02-24-16-18_patched/arch/x86/mm/gup.c > @@ -10,6 +10,7 @@ > #include <linux/highmem.h> > #include <linux/swap.h> > #include <linux/memremap.h> > +#include <linux/swapops.h> > > #include <asm/pgtable.h> > > @@ -210,6 +211,8 @@ static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end, > if (pmd_none(pmd)) > return 0; > if (unlikely(pmd_large(pmd) || !pmd_present(pmd))) { > + if (unlikely(is_pmd_migration_entry(pmd))) > + return 0; Hm. I've expected to see bunch of pmd_none() to pmd_present() conversions. That's seems a right way guard the code. Otherwise we wound need even more checks once PMD-level swap is implemented. I think we need to check for migration entires only if we have something to do with migration. In all other cases pmd_present() should be enough to bail out. -- Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>