lkml.org 
[lkml]   [2020]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2 02/12] mm/migrate: move migration helper from .h to .c
    On Wed 27-05-20 15:44:53, Joonsoo Kim wrote:
    > From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    >
    > It's not performance sensitive function. Move it to .c.
    > This is a preparation step for future change.
    >
    > Acked-by: Mike Kravetz <mike.kravetz@oracle.com>
    > Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>

    Acked-by: Michal Hocko <mhocko@suse.com>

    > ---
    > 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

    \
     
     \ /
      Last update: 2020-06-09 14:45    [W:3.187 / U:0.224 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site