On Sat 07-09-19 10:25:28, Alexander Duyck wrote: > From: Alexander Duyck <[email protected]> > > In order to support page reporting it will be necessary to store and > retrieve the migratetype of a page. To enable that I am moving the set and > get operations for pcppage_migratetype into the mm/internal.h header so > that they can be used outside of the page_alloc.c file.
Please describe who is the user and why does it needs this interface. This is really important because migratetype is an MM internal thing and external users shouldn't really care about it at all. We really do not want a random code to call those, especially the set_pcppage_migratetype. > Reviewed-by: Dan Williams <[email protected]> > Signed-off-by: Alexander Duyck <[email protected]> > --- > mm/internal.h | 18 ++++++++++++++++++ > mm/page_alloc.c | 18 ------------------ > 2 files changed, 18 insertions(+), 18 deletions(-) > > diff --git a/mm/internal.h b/mm/internal.h > index 0d5f720c75ab..e4a1a57bbd40 100644 > --- a/mm/internal.h > +++ b/mm/internal.h > @@ -549,6 +549,24 @@ static inline bool is_migrate_highatomic_page(struct > page *page) > return get_pageblock_migratetype(page) == MIGRATE_HIGHATOMIC; > } > > +/* > + * A cached value of the page's pageblock's migratetype, used when the page > is > + * put on a pcplist. Used to avoid the pageblock migratetype lookup when > + * freeing from pcplists in most cases, at the cost of possibly becoming > stale. > + * Also the migratetype set in the page does not necessarily match the > pcplist > + * index, e.g. page might have MIGRATE_CMA set but be on a pcplist with any > + * other index - this ensures that it will be put on the correct CMA > freelist. > + */ > +static inline int get_pcppage_migratetype(struct page *page) > +{ > + return page->index; > +} > + > +static inline void set_pcppage_migratetype(struct page *page, int > migratetype) > +{ > + page->index = migratetype; > +} > + > void setup_zone_pageset(struct zone *zone); > extern struct page *alloc_new_node_page(struct page *page, unsigned long > node); > #endif /* __MM_INTERNAL_H */ > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 4e4356ba66c7..a791f2baeeeb 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -185,24 +185,6 @@ static int __init early_init_on_free(char *buf) > } > early_param("init_on_free", early_init_on_free); > > -/* > - * A cached value of the page's pageblock's migratetype, used when the page > is > - * put on a pcplist. Used to avoid the pageblock migratetype lookup when > - * freeing from pcplists in most cases, at the cost of possibly becoming > stale. > - * Also the migratetype set in the page does not necessarily match the > pcplist > - * index, e.g. page might have MIGRATE_CMA set but be on a pcplist with any > - * other index - this ensures that it will be put on the correct CMA > freelist. > - */ > -static inline int get_pcppage_migratetype(struct page *page) > -{ > - return page->index; > -} > - > -static inline void set_pcppage_migratetype(struct page *page, int > migratetype) > -{ > - page->index = migratetype; > -} > - > #ifdef CONFIG_PM_SLEEP > /* > * The following functions are used by the suspend/hibernate code to > temporarily -- Michal Hocko SUSE Labs

