Re: [PATCH] mm: cma: fix accounting of CMA pages placed in high memory

Marek Szyprowski
2013-02-05T08:38:38Z

Hello,

On 2/5/2013 1:40 AM, Minchan Kim wrote:

...

> > Previous time, it's not fully tested and now we checked it with
> > highmem support patches.
>
> I get it. Sigh. then [1] inline attached below wan't good.
> We have to code like this?
>
> [1] 6a6dccba, mm: cma: don't replace lowmem pages with highmem
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index b97cf12..0707e0a 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -5671,11 +5671,10 @@ static struct page *
> __alloc_contig_migrate_alloc(struct page *page, unsigned long private,
> int **resultp)
> {
> - gfp_t gfp_mask = GFP_USER | __GFP_MOVABLE;
> -
> - if (PageHighMem(page))
> - gfp_mask |= __GFP_HIGHMEM;
> -
> + gfp_t gfp_mask = GFP_HIGHUSER_MOVABLE;
> + struct address_space *mapping = page_mapping(page);
> + if (mapping)
> + gfp_mask = mapping_gfp_mask(mapping);
> return alloc_page(gfp_mask);
> }

Am I right that this code will allocate more pages from himem? Old approach
never migrate lowmem page to himem, what is now possible as gfp mask is
always
taken from mapping_gfp flags. I only wonder if forcing GFP_HIGHUSER_MOVABLE
for pages without the mapping is a correct. Shouldn't we use avoid himem in
such case?

Best regards
--
Marek Szyprowski
Samsung Poland R&D Center