* [PATCH 0/2] Get rid of __alloc_pages wrapper @ 2021-01-24 12:03 Matthew Wilcox (Oracle) 2021-01-24 12:03 ` [PATCH 1/2] mm/page-alloc: Rename gfp_mask to gfp Matthew Wilcox (Oracle) ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Matthew Wilcox (Oracle) @ 2021-01-24 12:03 UTC (permalink / raw) To: linux-mm; +Cc: Matthew Wilcox (Oracle) I was poking my way around the __alloc_pages variants trying to understand why they each exist, and couldn't really find a good justification for keeping __alloc_pages and __alloc_pages_nodemask as separate functions. Matthew Wilcox (Oracle) (2): mm/page-alloc: Rename gfp_mask to gfp mm: Combine __alloc_pages and __alloc_pages_nodemask Documentation/admin-guide/mm/transhuge.rst | 2 +- include/linux/gfp.h | 13 +++---------- mm/hugetlb.c | 2 +- mm/internal.h | 4 ++-- mm/mempolicy.c | 6 +++--- mm/migrate.c | 2 +- mm/page_alloc.c | 22 +++++++++++----------- 7 files changed, 22 insertions(+), 29 deletions(-) -- 2.29.2 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] mm/page-alloc: Rename gfp_mask to gfp 2021-01-24 12:03 [PATCH 0/2] Get rid of __alloc_pages wrapper Matthew Wilcox (Oracle) @ 2021-01-24 12:03 ` Matthew Wilcox (Oracle) 2021-01-26 13:43 ` Vlastimil Babka 2021-01-24 12:03 ` [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask Matthew Wilcox (Oracle) 2021-01-24 17:11 ` [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages Matthew Wilcox 2 siblings, 1 reply; 9+ messages in thread From: Matthew Wilcox (Oracle) @ 2021-01-24 12:03 UTC (permalink / raw) To: linux-mm; +Cc: Matthew Wilcox (Oracle) Shorten some overly-long lines by renaming this identifier. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- mm/page_alloc.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b031a5ae0bd5..d72ef706f6e6 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4963,7 +4963,7 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order, * This is the 'heart' of the zoned buddy allocator. */ struct page * -__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, +__alloc_pages_nodemask(gfp_t gfp, unsigned int order, int preferred_nid, nodemask_t *nodemask) { struct page *page; @@ -4976,20 +4976,21 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, * so bail out early if the request is out of bound. */ if (unlikely(order >= MAX_ORDER)) { - WARN_ON_ONCE(!(gfp_mask & __GFP_NOWARN)); + WARN_ON_ONCE(!(gfp & __GFP_NOWARN)); return NULL; } - gfp_mask &= gfp_allowed_mask; - alloc_mask = gfp_mask; - if (!prepare_alloc_pages(gfp_mask, order, preferred_nid, nodemask, &ac, &alloc_mask, &alloc_flags)) + gfp &= gfp_allowed_mask; + alloc_mask = gfp; + if (!prepare_alloc_pages(gfp, order, preferred_nid, nodemask, &ac, + &alloc_mask, &alloc_flags)) return NULL; /* * Forbid the first pass from falling back to types that fragment * memory until all local zones are considered. */ - alloc_flags |= alloc_flags_nofragment(ac.preferred_zoneref->zone, gfp_mask); + alloc_flags |= alloc_flags_nofragment(ac.preferred_zoneref->zone, gfp); /* First allocation attempt */ page = get_page_from_freelist(alloc_mask, order, alloc_flags, &ac); @@ -5002,7 +5003,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, * from a particular context which has been marked by * memalloc_no{fs,io}_{save,restore}. */ - alloc_mask = current_gfp_context(gfp_mask); + alloc_mask = current_gfp_context(gfp); ac.spread_dirty_pages = false; /* @@ -5014,8 +5015,8 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, page = __alloc_pages_slowpath(alloc_mask, order, &ac); out: - if (memcg_kmem_enabled() && (gfp_mask & __GFP_ACCOUNT) && page && - unlikely(__memcg_kmem_charge_page(page, gfp_mask, order) != 0)) { + if (memcg_kmem_enabled() && (gfp & __GFP_ACCOUNT) && page && + unlikely(__memcg_kmem_charge_page(page, gfp, order) != 0)) { __free_pages(page, order); page = NULL; } -- 2.29.2 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] mm/page-alloc: Rename gfp_mask to gfp 2021-01-24 12:03 ` [PATCH 1/2] mm/page-alloc: Rename gfp_mask to gfp Matthew Wilcox (Oracle) @ 2021-01-26 13:43 ` Vlastimil Babka 0 siblings, 0 replies; 9+ messages in thread From: Vlastimil Babka @ 2021-01-26 13:43 UTC (permalink / raw) To: Matthew Wilcox (Oracle), linux-mm On 1/24/21 1:03 PM, Matthew Wilcox (Oracle) wrote: > Shorten some overly-long lines by renaming this identifier. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Vlastimil Babka <vbabka@suse.cz> > --- > mm/page_alloc.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index b031a5ae0bd5..d72ef706f6e6 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -4963,7 +4963,7 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order, > * This is the 'heart' of the zoned buddy allocator. > */ > struct page * > -__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, > +__alloc_pages_nodemask(gfp_t gfp, unsigned int order, int preferred_nid, > nodemask_t *nodemask) > { > struct page *page; > @@ -4976,20 +4976,21 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, > * so bail out early if the request is out of bound. > */ > if (unlikely(order >= MAX_ORDER)) { > - WARN_ON_ONCE(!(gfp_mask & __GFP_NOWARN)); > + WARN_ON_ONCE(!(gfp & __GFP_NOWARN)); > return NULL; > } > > - gfp_mask &= gfp_allowed_mask; > - alloc_mask = gfp_mask; > - if (!prepare_alloc_pages(gfp_mask, order, preferred_nid, nodemask, &ac, &alloc_mask, &alloc_flags)) > + gfp &= gfp_allowed_mask; > + alloc_mask = gfp; > + if (!prepare_alloc_pages(gfp, order, preferred_nid, nodemask, &ac, > + &alloc_mask, &alloc_flags)) > return NULL; > > /* > * Forbid the first pass from falling back to types that fragment > * memory until all local zones are considered. > */ > - alloc_flags |= alloc_flags_nofragment(ac.preferred_zoneref->zone, gfp_mask); > + alloc_flags |= alloc_flags_nofragment(ac.preferred_zoneref->zone, gfp); > > /* First allocation attempt */ > page = get_page_from_freelist(alloc_mask, order, alloc_flags, &ac); > @@ -5002,7 +5003,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, > * from a particular context which has been marked by > * memalloc_no{fs,io}_{save,restore}. > */ > - alloc_mask = current_gfp_context(gfp_mask); > + alloc_mask = current_gfp_context(gfp); > ac.spread_dirty_pages = false; > > /* > @@ -5014,8 +5015,8 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, > page = __alloc_pages_slowpath(alloc_mask, order, &ac); > > out: > - if (memcg_kmem_enabled() && (gfp_mask & __GFP_ACCOUNT) && page && > - unlikely(__memcg_kmem_charge_page(page, gfp_mask, order) != 0)) { > + if (memcg_kmem_enabled() && (gfp & __GFP_ACCOUNT) && page && > + unlikely(__memcg_kmem_charge_page(page, gfp, order) != 0)) { > __free_pages(page, order); > page = NULL; > } > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask 2021-01-24 12:03 [PATCH 0/2] Get rid of __alloc_pages wrapper Matthew Wilcox (Oracle) 2021-01-24 12:03 ` [PATCH 1/2] mm/page-alloc: Rename gfp_mask to gfp Matthew Wilcox (Oracle) @ 2021-01-24 12:03 ` Matthew Wilcox (Oracle) 2021-01-26 13:47 ` Vlastimil Babka 2021-01-27 9:34 ` Michal Hocko 2021-01-24 17:11 ` [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages Matthew Wilcox 2 siblings, 2 replies; 9+ messages in thread From: Matthew Wilcox (Oracle) @ 2021-01-24 12:03 UTC (permalink / raw) To: linux-mm; +Cc: Matthew Wilcox (Oracle) There are only two callers of __alloc_pages() so prune the thicket of alloc_pages variants by combining the two functions together. Current callers of __alloc_pages() simply add an extra 'NULL' parameter and current callers of __alloc_pages_nodemask() call __alloc_pages() instead. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- Documentation/admin-guide/mm/transhuge.rst | 2 +- include/linux/gfp.h | 13 +++---------- mm/hugetlb.c | 2 +- mm/internal.h | 4 ++-- mm/mempolicy.c | 6 +++--- mm/migrate.c | 2 +- mm/page_alloc.c | 5 ++--- 7 files changed, 13 insertions(+), 21 deletions(-) diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst index 3b8a336511a4..c9c37f16eef8 100644 --- a/Documentation/admin-guide/mm/transhuge.rst +++ b/Documentation/admin-guide/mm/transhuge.rst @@ -402,7 +402,7 @@ compact_fail but failed. It is possible to establish how long the stalls were using the function -tracer to record how long was spent in __alloc_pages_nodemask and +tracer to record how long was spent in __alloc_pages() and using the mm_page_alloc tracepoint to identify which allocations were for huge pages. diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 53caa9846854..acca2c487da8 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -501,15 +501,8 @@ static inline int arch_make_page_accessible(struct page *page) } #endif -struct page * -__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, - nodemask_t *nodemask); - -static inline struct page * -__alloc_pages(gfp_t gfp_mask, unsigned int order, int preferred_nid) -{ - return __alloc_pages_nodemask(gfp_mask, order, preferred_nid, NULL); -} +struct page *__alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid, + nodemask_t *nodemask); /* * Allocate pages, preferring the node given as nid. The node must be valid and @@ -521,7 +514,7 @@ __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order) VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES); VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid)); - return __alloc_pages(gfp_mask, order, nid); + return __alloc_pages(gfp_mask, order, nid, NULL); } /* diff --git a/mm/hugetlb.c b/mm/hugetlb.c index a6bad1f686c5..604857289e02 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1644,7 +1644,7 @@ static struct page *alloc_buddy_huge_page(struct hstate *h, gfp_mask |= __GFP_RETRY_MAYFAIL; if (nid == NUMA_NO_NODE) nid = numa_mem_id(); - page = __alloc_pages_nodemask(gfp_mask, order, nid, nmask); + page = __alloc_pages(gfp_mask, order, nid, nmask); if (page) __count_vm_event(HTLB_BUDDY_PGALLOC); else diff --git a/mm/internal.h b/mm/internal.h index 8e9c660f33ca..19aee773f6a8 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -126,10 +126,10 @@ extern pmd_t *mm_find_pmd(struct mm_struct *mm, unsigned long address); * family of functions. * * nodemask, migratetype and highest_zoneidx are initialized only once in - * __alloc_pages_nodemask() and then never change. + * __alloc_pages() and then never change. * * zonelist, preferred_zone and highest_zoneidx are set first in - * __alloc_pages_nodemask() for the fast path, and might be later changed + * __alloc_pages() for the fast path, and might be later changed * in __alloc_pages_slowpath(). All other functions pass the whole structure * by a const pointer. */ diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 6961238c7ef5..addf0854d693 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -2140,7 +2140,7 @@ static struct page *alloc_page_interleave(gfp_t gfp, unsigned order, { struct page *page; - page = __alloc_pages(gfp, order, nid); + page = __alloc_pages(gfp, order, nid, NULL); /* skip NUMA_INTERLEAVE_HIT counter update if numa stats is disabled */ if (!static_branch_likely(&vm_numa_stat_key)) return page; @@ -2237,7 +2237,7 @@ alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma, nmask = policy_nodemask(gfp, pol); preferred_nid = policy_node(gfp, pol, node); - page = __alloc_pages_nodemask(gfp, order, preferred_nid, nmask); + page = __alloc_pages(gfp, order, preferred_nid, nmask); mpol_cond_put(pol); out: return page; @@ -2274,7 +2274,7 @@ struct page *alloc_pages_current(gfp_t gfp, unsigned order) if (pol->mode == MPOL_INTERLEAVE) page = alloc_page_interleave(gfp, order, interleave_nodes(pol)); else - page = __alloc_pages_nodemask(gfp, order, + page = __alloc_pages(gfp, order, policy_node(gfp, pol, numa_node_id()), policy_nodemask(gfp, pol)); diff --git a/mm/migrate.c b/mm/migrate.c index a3e1acc72ad7..f1ca50febfbe 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1617,7 +1617,7 @@ struct page *alloc_migration_target(struct page *page, unsigned long private) if (is_highmem_idx(zidx) || zidx == ZONE_MOVABLE) gfp_mask |= __GFP_HIGHMEM; - new_page = __alloc_pages_nodemask(gfp_mask, order, nid, mtc->nmask); + new_page = __alloc_pages(gfp_mask, order, nid, mtc->nmask); if (new_page && PageTransHuge(new_page)) prep_transhuge_page(new_page); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d72ef706f6e6..90a1eb06c11b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4962,8 +4962,7 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order, /* * This is the 'heart' of the zoned buddy allocator. */ -struct page * -__alloc_pages_nodemask(gfp_t gfp, unsigned int order, int preferred_nid, +struct page *__alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid, nodemask_t *nodemask) { struct page *page; @@ -5025,7 +5024,7 @@ __alloc_pages_nodemask(gfp_t gfp, unsigned int order, int preferred_nid, return page; } -EXPORT_SYMBOL(__alloc_pages_nodemask); +EXPORT_SYMBOL(__alloc_pages); /* * Common helper functions. Never use with __GFP_HIGHMEM because the returned -- 2.29.2 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask 2021-01-24 12:03 ` [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask Matthew Wilcox (Oracle) @ 2021-01-26 13:47 ` Vlastimil Babka 2021-01-27 9:34 ` Michal Hocko 1 sibling, 0 replies; 9+ messages in thread From: Vlastimil Babka @ 2021-01-26 13:47 UTC (permalink / raw) To: Matthew Wilcox (Oracle), linux-mm On 1/24/21 1:03 PM, Matthew Wilcox (Oracle) wrote: > There are only two callers of __alloc_pages() so prune the thicket of > alloc_pages variants by combining the two functions together. Current > callers of __alloc_pages() simply add an extra 'NULL' parameter and > current callers of __alloc_pages_nodemask() call __alloc_pages() instead. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Vlastimil Babka <vbabka@suse.cz> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask 2021-01-24 12:03 ` [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask Matthew Wilcox (Oracle) 2021-01-26 13:47 ` Vlastimil Babka @ 2021-01-27 9:34 ` Michal Hocko 1 sibling, 0 replies; 9+ messages in thread From: Michal Hocko @ 2021-01-27 9:34 UTC (permalink / raw) To: Matthew Wilcox (Oracle); +Cc: linux-mm On Sun 24-01-21 12:03:57, Matthew Wilcox wrote: > There are only two callers of __alloc_pages() so prune the thicket of > alloc_pages variants by combining the two functions together. Current > callers of __alloc_pages() simply add an extra 'NULL' parameter and > current callers of __alloc_pages_nodemask() call __alloc_pages() instead. Thanks this is indeed a simplification. The allocation API zoo is a real maze. This will simplify it a bit. __alloc_pages_nodemask is also quite a verbatim name. > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Michal Hocko <mhocko@suse.com> > --- > Documentation/admin-guide/mm/transhuge.rst | 2 +- > include/linux/gfp.h | 13 +++---------- > mm/hugetlb.c | 2 +- > mm/internal.h | 4 ++-- > mm/mempolicy.c | 6 +++--- > mm/migrate.c | 2 +- > mm/page_alloc.c | 5 ++--- > 7 files changed, 13 insertions(+), 21 deletions(-) > > diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst > index 3b8a336511a4..c9c37f16eef8 100644 > --- a/Documentation/admin-guide/mm/transhuge.rst > +++ b/Documentation/admin-guide/mm/transhuge.rst > @@ -402,7 +402,7 @@ compact_fail > but failed. > > It is possible to establish how long the stalls were using the function > -tracer to record how long was spent in __alloc_pages_nodemask and > +tracer to record how long was spent in __alloc_pages() and > using the mm_page_alloc tracepoint to identify which allocations were > for huge pages. > > diff --git a/include/linux/gfp.h b/include/linux/gfp.h > index 53caa9846854..acca2c487da8 100644 > --- a/include/linux/gfp.h > +++ b/include/linux/gfp.h > @@ -501,15 +501,8 @@ static inline int arch_make_page_accessible(struct page *page) > } > #endif > > -struct page * > -__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid, > - nodemask_t *nodemask); > - > -static inline struct page * > -__alloc_pages(gfp_t gfp_mask, unsigned int order, int preferred_nid) > -{ > - return __alloc_pages_nodemask(gfp_mask, order, preferred_nid, NULL); > -} > +struct page *__alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid, > + nodemask_t *nodemask); > > /* > * Allocate pages, preferring the node given as nid. The node must be valid and > @@ -521,7 +514,7 @@ __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order) > VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES); > VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid)); > > - return __alloc_pages(gfp_mask, order, nid); > + return __alloc_pages(gfp_mask, order, nid, NULL); > } > > /* > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index a6bad1f686c5..604857289e02 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -1644,7 +1644,7 @@ static struct page *alloc_buddy_huge_page(struct hstate *h, > gfp_mask |= __GFP_RETRY_MAYFAIL; > if (nid == NUMA_NO_NODE) > nid = numa_mem_id(); > - page = __alloc_pages_nodemask(gfp_mask, order, nid, nmask); > + page = __alloc_pages(gfp_mask, order, nid, nmask); > if (page) > __count_vm_event(HTLB_BUDDY_PGALLOC); > else > diff --git a/mm/internal.h b/mm/internal.h > index 8e9c660f33ca..19aee773f6a8 100644 > --- a/mm/internal.h > +++ b/mm/internal.h > @@ -126,10 +126,10 @@ extern pmd_t *mm_find_pmd(struct mm_struct *mm, unsigned long address); > * family of functions. > * > * nodemask, migratetype and highest_zoneidx are initialized only once in > - * __alloc_pages_nodemask() and then never change. > + * __alloc_pages() and then never change. > * > * zonelist, preferred_zone and highest_zoneidx are set first in > - * __alloc_pages_nodemask() for the fast path, and might be later changed > + * __alloc_pages() for the fast path, and might be later changed > * in __alloc_pages_slowpath(). All other functions pass the whole structure > * by a const pointer. > */ > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index 6961238c7ef5..addf0854d693 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -2140,7 +2140,7 @@ static struct page *alloc_page_interleave(gfp_t gfp, unsigned order, > { > struct page *page; > > - page = __alloc_pages(gfp, order, nid); > + page = __alloc_pages(gfp, order, nid, NULL); > /* skip NUMA_INTERLEAVE_HIT counter update if numa stats is disabled */ > if (!static_branch_likely(&vm_numa_stat_key)) > return page; > @@ -2237,7 +2237,7 @@ alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma, > > nmask = policy_nodemask(gfp, pol); > preferred_nid = policy_node(gfp, pol, node); > - page = __alloc_pages_nodemask(gfp, order, preferred_nid, nmask); > + page = __alloc_pages(gfp, order, preferred_nid, nmask); > mpol_cond_put(pol); > out: > return page; > @@ -2274,7 +2274,7 @@ struct page *alloc_pages_current(gfp_t gfp, unsigned order) > if (pol->mode == MPOL_INTERLEAVE) > page = alloc_page_interleave(gfp, order, interleave_nodes(pol)); > else > - page = __alloc_pages_nodemask(gfp, order, > + page = __alloc_pages(gfp, order, > policy_node(gfp, pol, numa_node_id()), > policy_nodemask(gfp, pol)); > > diff --git a/mm/migrate.c b/mm/migrate.c > index a3e1acc72ad7..f1ca50febfbe 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -1617,7 +1617,7 @@ struct page *alloc_migration_target(struct page *page, unsigned long private) > if (is_highmem_idx(zidx) || zidx == ZONE_MOVABLE) > gfp_mask |= __GFP_HIGHMEM; > > - new_page = __alloc_pages_nodemask(gfp_mask, order, nid, mtc->nmask); > + new_page = __alloc_pages(gfp_mask, order, nid, mtc->nmask); > > if (new_page && PageTransHuge(new_page)) > prep_transhuge_page(new_page); > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index d72ef706f6e6..90a1eb06c11b 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -4962,8 +4962,7 @@ static inline bool prepare_alloc_pages(gfp_t gfp_mask, unsigned int order, > /* > * This is the 'heart' of the zoned buddy allocator. > */ > -struct page * > -__alloc_pages_nodemask(gfp_t gfp, unsigned int order, int preferred_nid, > +struct page *__alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid, > nodemask_t *nodemask) > { > struct page *page; > @@ -5025,7 +5024,7 @@ __alloc_pages_nodemask(gfp_t gfp, unsigned int order, int preferred_nid, > > return page; > } > -EXPORT_SYMBOL(__alloc_pages_nodemask); > +EXPORT_SYMBOL(__alloc_pages); > > /* > * Common helper functions. Never use with __GFP_HIGHMEM because the returned > -- > 2.29.2 > -- Michal Hocko SUSE Labs ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages 2021-01-24 12:03 [PATCH 0/2] Get rid of __alloc_pages wrapper Matthew Wilcox (Oracle) 2021-01-24 12:03 ` [PATCH 1/2] mm/page-alloc: Rename gfp_mask to gfp Matthew Wilcox (Oracle) 2021-01-24 12:03 ` [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask Matthew Wilcox (Oracle) @ 2021-01-24 17:11 ` Matthew Wilcox 2021-01-26 16:05 ` Vlastimil Babka 2021-01-27 9:39 ` Michal Hocko 2 siblings, 2 replies; 9+ messages in thread From: Matthew Wilcox @ 2021-01-24 17:11 UTC (permalink / raw) To: linux-mm When CONFIG_NUMA is enabled, alloc_pages() is a wrapper around alloc_pages_current(). This is pointless, just implement alloc_pages() directly. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- include/linux/gfp.h | 8 +------- mm/mempolicy.c | 27 +++++++++++++-------------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index acca2c487da8..44978b35ce1a 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -532,13 +532,7 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask, } #ifdef CONFIG_NUMA -extern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order); - -static inline struct page * -alloc_pages(gfp_t gfp_mask, unsigned int order) -{ - return alloc_pages_current(gfp_mask, order); -} +struct page *alloc_pages(gfp_t gfp, unsigned int order); extern struct page *alloc_pages_vma(gfp_t gfp_mask, int order, struct vm_area_struct *vma, unsigned long addr, int node, bool hugepage); diff --git a/mm/mempolicy.c b/mm/mempolicy.c index addf0854d693..0cf54aa5a2f0 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -2245,21 +2245,20 @@ alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma, EXPORT_SYMBOL(alloc_pages_vma); /** - * alloc_pages_current - Allocate pages. + * alloc_pages - Allocate pages. + * @gfp: + * %GFP_USER user allocation, + * %GFP_KERNEL kernel allocation, + * %GFP_HIGHMEM highmem allocation, + * %GFP_FS don't call back into a file system. + * %GFP_ATOMIC don't sleep. + * @order: Power of two of allocation size in pages. 0 is a single page. * - * @gfp: - * %GFP_USER user allocation, - * %GFP_KERNEL kernel allocation, - * %GFP_HIGHMEM highmem allocation, - * %GFP_FS don't call back into a file system. - * %GFP_ATOMIC don't sleep. - * @order: Power of two of allocation size in pages. 0 is a single page. - * - * Allocate a page from the kernel page pool. When not in - * interrupt context and apply the current process NUMA policy. - * Returns NULL when no page can be allocated. + * Allocate a page from the kernel page pool. When in + * process context apply the current process NUMA policy. + * Returns NULL when no page can be allocated. */ -struct page *alloc_pages_current(gfp_t gfp, unsigned order) +struct page *alloc_pages(gfp_t gfp, unsigned order) { struct mempolicy *pol = &default_policy; struct page *page; @@ -2280,7 +2279,7 @@ struct page *alloc_pages_current(gfp_t gfp, unsigned order) return page; } -EXPORT_SYMBOL(alloc_pages_current); +EXPORT_SYMBOL(alloc_pages); int vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst) { -- 2.29.2 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages 2021-01-24 17:11 ` [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages Matthew Wilcox @ 2021-01-26 16:05 ` Vlastimil Babka 2021-01-27 9:39 ` Michal Hocko 1 sibling, 0 replies; 9+ messages in thread From: Vlastimil Babka @ 2021-01-26 16:05 UTC (permalink / raw) To: Matthew Wilcox, linux-mm On 1/24/21 6:11 PM, Matthew Wilcox wrote: > When CONFIG_NUMA is enabled, alloc_pages() is a wrapper around > alloc_pages_current(). This is pointless, just implement alloc_pages() > directly. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Vlastimil Babka <vbabka@suse.cz> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages 2021-01-24 17:11 ` [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages Matthew Wilcox 2021-01-26 16:05 ` Vlastimil Babka @ 2021-01-27 9:39 ` Michal Hocko 1 sibling, 0 replies; 9+ messages in thread From: Michal Hocko @ 2021-01-27 9:39 UTC (permalink / raw) To: Matthew Wilcox; +Cc: linux-mm On Sun 24-01-21 17:11:07, Matthew Wilcox wrote: > When CONFIG_NUMA is enabled, alloc_pages() is a wrapper around > alloc_pages_current(). This is pointless, just implement alloc_pages() > directly. alloc_pages_current was a bit of a misnomer anyway as it implements memory policy as well (e.g. interleave). > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Michal Hocko <mhocko@suse.com> Thanks! > --- > include/linux/gfp.h | 8 +------- > mm/mempolicy.c | 27 +++++++++++++-------------- > 2 files changed, 14 insertions(+), 21 deletions(-) > > diff --git a/include/linux/gfp.h b/include/linux/gfp.h > index acca2c487da8..44978b35ce1a 100644 > --- a/include/linux/gfp.h > +++ b/include/linux/gfp.h > @@ -532,13 +532,7 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask, > } > > #ifdef CONFIG_NUMA > -extern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order); > - > -static inline struct page * > -alloc_pages(gfp_t gfp_mask, unsigned int order) > -{ > - return alloc_pages_current(gfp_mask, order); > -} > +struct page *alloc_pages(gfp_t gfp, unsigned int order); > extern struct page *alloc_pages_vma(gfp_t gfp_mask, int order, > struct vm_area_struct *vma, unsigned long addr, > int node, bool hugepage); > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index addf0854d693..0cf54aa5a2f0 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -2245,21 +2245,20 @@ alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma, > EXPORT_SYMBOL(alloc_pages_vma); > > /** > - * alloc_pages_current - Allocate pages. > + * alloc_pages - Allocate pages. > + * @gfp: > + * %GFP_USER user allocation, > + * %GFP_KERNEL kernel allocation, > + * %GFP_HIGHMEM highmem allocation, > + * %GFP_FS don't call back into a file system. > + * %GFP_ATOMIC don't sleep. > + * @order: Power of two of allocation size in pages. 0 is a single page. > * > - * @gfp: > - * %GFP_USER user allocation, > - * %GFP_KERNEL kernel allocation, > - * %GFP_HIGHMEM highmem allocation, > - * %GFP_FS don't call back into a file system. > - * %GFP_ATOMIC don't sleep. > - * @order: Power of two of allocation size in pages. 0 is a single page. > - * > - * Allocate a page from the kernel page pool. When not in > - * interrupt context and apply the current process NUMA policy. > - * Returns NULL when no page can be allocated. > + * Allocate a page from the kernel page pool. When in > + * process context apply the current process NUMA policy. > + * Returns NULL when no page can be allocated. > */ > -struct page *alloc_pages_current(gfp_t gfp, unsigned order) > +struct page *alloc_pages(gfp_t gfp, unsigned order) > { > struct mempolicy *pol = &default_policy; > struct page *page; > @@ -2280,7 +2279,7 @@ struct page *alloc_pages_current(gfp_t gfp, unsigned order) > > return page; > } > -EXPORT_SYMBOL(alloc_pages_current); > +EXPORT_SYMBOL(alloc_pages); > > int vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst) > { > -- > 2.29.2 > -- Michal Hocko SUSE Labs ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-01-27 9:40 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-01-24 12:03 [PATCH 0/2] Get rid of __alloc_pages wrapper Matthew Wilcox (Oracle) 2021-01-24 12:03 ` [PATCH 1/2] mm/page-alloc: Rename gfp_mask to gfp Matthew Wilcox (Oracle) 2021-01-26 13:43 ` Vlastimil Babka 2021-01-24 12:03 ` [PATCH 2/2] mm: Combine __alloc_pages and __alloc_pages_nodemask Matthew Wilcox (Oracle) 2021-01-26 13:47 ` Vlastimil Babka 2021-01-27 9:34 ` Michal Hocko 2021-01-24 17:11 ` [PATCH 3/2] mm: Rename alloc_pages_current to alloc_pages Matthew Wilcox 2021-01-26 16:05 ` Vlastimil Babka 2021-01-27 9:39 ` Michal Hocko
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.