On Wed 27-05-20 15:44:53, Joonsoo Kim wrote: > From: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > > It's not performance sensitive function. Move it to .c. > This is a preparation step for future change. > > Acked-by: Mike Kravetz <mike.kravetz@xxxxxxxxxx> > Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Acked-by: Michal Hocko <mhocko@xxxxxxxx> > --- > include/linux/migrate.h | 33 +++++---------------------------- > mm/migrate.c | 29 +++++++++++++++++++++++++++++ > 2 files changed, 34 insertions(+), 28 deletions(-) > > diff --git a/include/linux/migrate.h b/include/linux/migrate.h > index 3e546cb..1d70b4a 100644 > --- a/include/linux/migrate.h > +++ b/include/linux/migrate.h > @@ -31,34 +31,6 @@ enum migrate_reason { > /* In mm/debug.c; also keep sync with include/trace/events/migrate.h */ > extern const char *migrate_reason_names[MR_TYPES]; > > -static inline struct page *new_page_nodemask(struct page *page, > - int preferred_nid, nodemask_t *nodemask) > -{ > - gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL; > - unsigned int order = 0; > - struct page *new_page = NULL; > - > - if (PageHuge(page)) > - return alloc_huge_page_nodemask(page_hstate(compound_head(page)), > - preferred_nid, nodemask); > - > - if (PageTransHuge(page)) { > - gfp_mask |= GFP_TRANSHUGE; > - order = HPAGE_PMD_ORDER; > - } > - > - if (PageHighMem(page) || (zone_idx(page_zone(page)) == ZONE_MOVABLE)) > - gfp_mask |= __GFP_HIGHMEM; > - > - new_page = __alloc_pages_nodemask(gfp_mask, order, > - preferred_nid, nodemask); > - > - if (new_page && PageTransHuge(new_page)) > - prep_transhuge_page(new_page); > - > - return new_page; > -} > - > #ifdef CONFIG_MIGRATION > > extern void putback_movable_pages(struct list_head *l); > @@ -67,6 +39,8 @@ extern int migrate_page(struct address_space *mapping, > enum migrate_mode mode); > extern int migrate_pages(struct list_head *l, new_page_t new, free_page_t free, > unsigned long private, enum migrate_mode mode, int reason); > +extern struct page *new_page_nodemask(struct page *page, > + int preferred_nid, nodemask_t *nodemask); > extern int isolate_movable_page(struct page *page, isolate_mode_t mode); > extern void putback_movable_page(struct page *page); > > @@ -85,6 +59,9 @@ static inline int migrate_pages(struct list_head *l, new_page_t new, > free_page_t free, unsigned long private, enum migrate_mode mode, > int reason) > { return -ENOSYS; } > +static inline struct page *new_page_nodemask(struct page *page, > + int preferred_nid, nodemask_t *nodemask) > + { return NULL; } > static inline int isolate_movable_page(struct page *page, isolate_mode_t mode) > { return -EBUSY; } > > diff --git a/mm/migrate.c b/mm/migrate.c > index 22a26a5..824c22e 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -1537,6 +1537,35 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, > return rc; > } > > +struct page *new_page_nodemask(struct page *page, > + int preferred_nid, nodemask_t *nodemask) > +{ > + gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL; > + unsigned int order = 0; > + struct page *new_page = NULL; > + > + if (PageHuge(page)) > + return alloc_huge_page_nodemask( > + page_hstate(compound_head(page)), > + preferred_nid, nodemask); > + > + if (PageTransHuge(page)) { > + gfp_mask |= GFP_TRANSHUGE; > + order = HPAGE_PMD_ORDER; > + } > + > + if (PageHighMem(page) || (zone_idx(page_zone(page)) == ZONE_MOVABLE)) > + gfp_mask |= __GFP_HIGHMEM; > + > + new_page = __alloc_pages_nodemask(gfp_mask, order, > + preferred_nid, nodemask); > + > + if (new_page && PageTransHuge(new_page)) > + prep_transhuge_page(new_page); > + > + return new_page; > +} > + > #ifdef CONFIG_NUMA > > static int store_status(int __user *status, int start, int value, int nr) > -- > 2.7.4 > -- Michal Hocko SUSE Labs