On Fri, Feb 17, 2017 at 10:05:41AM -0500, Zi Yan wrote: > From: Zi Yan <ziy@xxxxxxxxxx> > > This change adds a new migration mode called MIGRATE_MT to enable multi > threaded page copy implementation inside copy_huge_page() function by > selectively calling copy_pages_mthread() when requested. But it still > falls back using the regular page copy mechanism instead the previous > multi threaded attempt fails. It also attempts multi threaded copy for > regular pages. > > Signed-off-by: Zi Yan <zi.yan@xxxxxxxxxxxxxx> > Signed-off-by: Anshuman Khandual <khandual@xxxxxxxxxxxxxxxxxx> > --- > include/linux/migrate_mode.h | 1 + > mm/migrate.c | 25 ++++++++++++++++++------- > 2 files changed, 19 insertions(+), 7 deletions(-) > > diff --git a/include/linux/migrate_mode.h b/include/linux/migrate_mode.h > index 89c170060e5b..d344ad60f499 100644 > --- a/include/linux/migrate_mode.h > +++ b/include/linux/migrate_mode.h > @@ -12,6 +12,7 @@ enum migrate_mode { > MIGRATE_SYNC_LIGHT = 1<<1, > MIGRATE_SYNC = 1<<2, > MIGRATE_ST = 1<<3, > + MIGRATE_MT = 1<<4, Could you update the comment above this definition to cover the new flags. Thanks, Naoya Horiguchi > }; > > #endif /* MIGRATE_MODE_H_INCLUDED */ > diff --git a/mm/migrate.c b/mm/migrate.c > index 87253cb9b50a..21307219428d 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -601,6 +601,7 @@ static void copy_huge_page(struct page *dst, struct page *src, > { > int i; > int nr_pages; > + int rc = -EFAULT; > > if (PageHuge(src)) { > /* hugetlbfs page */ > @@ -617,10 +618,14 @@ static void copy_huge_page(struct page *dst, struct page *src, > nr_pages = hpage_nr_pages(src); > } > > - for (i = 0; i < nr_pages; i++) { > - cond_resched(); > - copy_highpage(dst + i, src + i); > - } > + if (mode & MIGRATE_MT) > + rc = copy_pages_mthread(dst, src, nr_pages); > + > + if (rc) > + for (i = 0; i < nr_pages; i++) { > + cond_resched(); > + copy_highpage(dst + i, src + i); > + } > } > > /* > @@ -631,10 +636,16 @@ void migrate_page_copy(struct page *newpage, struct page *page, > { > int cpupid; > > - if (PageHuge(page) || PageTransHuge(page)) > + if (PageHuge(page) || PageTransHuge(page)) { > copy_huge_page(newpage, page, mode); > - else > - copy_highpage(newpage, page); > + } else { > + if (mode & MIGRATE_MT) { > + if (copy_pages_mthread(newpage, page, 1)) > + copy_highpage(newpage, page); > + } else { > + copy_highpage(newpage, page); > + } > + } > > if (PageError(page)) > SetPageError(newpage); > -- > 2.11.0 > > -- > 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> -- 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