On Thu, Dec 3, 2020 at 3:17 AM John Hubbard <jhubbard@xxxxxxxxxx> wrote: > > On 12/1/20 9:23 PM, Pavel Tatashin wrote: > > PF_MEMALLOC_NOMOVABLE is only honored for CMA allocations, extend > > this flag to work for any allocations by removing __GFP_MOVABLE from > > gfp_mask when this flag is passed in the current context, thus > > prohibiting allocations from ZONE_MOVABLE. > > > > Signed-off-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> > > --- > > mm/hugetlb.c | 2 +- > > mm/page_alloc.c | 26 ++++++++++++++++---------- > > 2 files changed, 17 insertions(+), 11 deletions(-) > > > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > > index 02213c74ed6b..00e786201d8b 100644 > > --- a/mm/hugetlb.c > > +++ b/mm/hugetlb.c > > @@ -1036,7 +1036,7 @@ static struct page *dequeue_huge_page_node_exact(struct hstate *h, int nid) > > bool nomovable = !!(current->flags & PF_MEMALLOC_NOMOVABLE); > > > > list_for_each_entry(page, &h->hugepage_freelists[nid], lru) { > > - if (nomovable && is_migrate_cma_page(page)) > > + if (nomovable && is_migrate_movable(get_pageblock_migratetype(page))) > > > I wonder if we should add a helper, like is_migrate_cma_page(), that avoids having > to call get_pageblock_migratetype() at all of the callsites? Good idea, I will add it. > > > > continue; > > > > if (PageHWPoison(page)) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 611799c72da5..7a6d86d0bc5f 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -3766,20 +3766,25 @@ alloc_flags_nofragment(struct zone *zone, gfp_t gfp_mask) > > return alloc_flags; > > } > > > > -static inline unsigned int current_alloc_flags(gfp_t gfp_mask, > > - unsigned int alloc_flags) > > +static inline unsigned int cma_alloc_flags(gfp_t gfp_mask, > > + unsigned int alloc_flags) > > Actually, maybe the original name should be left intact. This handles current alloc > flags, which right now happen to only cover CMA flags, so the original name seems > accurate, right? The reason I re-named it is because we do not access current context anymore, only use gfp_mask to get cma flag. >> - unsigned int pflags = current->flags; So, keeping "current" in the function name makes its intent misleading. Thank you, Pasha