Re: [RFC 13/16] mm/cma: populate ZONE_CMA and use this zone when GFP_HIGHUSERMOVABLE

From: Aneesh Kumar K.V
Date: Tue Mar 03 2015 - 03:28:59 EST


Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> writes:

> Until now, reserved pages for CMA are managed altogether with normal
> page in the same zone. This approach has numorous problems and fixing
> them isn't easy. To fix this situation, ZONE_CMA is introduced in
> previous patch, but, not yet populated. This patch implement population
> of ZONE_CMA by stealing reserved pages from normal zones. This stealing
> break one uncertain assumption on zone, that is, zone isn't overlapped.
> In the early of this series, some check is inserted to every zone's span
> iterator to handle zone overlap so there would be no problem with
> this assumption break.
>
> To utilize this zone, user should use GFP_HIGHUSERMOVABLE, because
> these pages are only applicable for movable type and ZONE_CMA could
> contain highmem.
>
> Implementation itself is very easy to understand. Do steal when cma
> area is initialized and recalculate values for per zone data structure.
>
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
> ---
> include/linux/gfp.h | 10 ++++++++--
> include/linux/mm.h | 1 +
> mm/cma.c | 23 ++++++++++++++++-------
> mm/page_alloc.c | 42 +++++++++++++++++++++++++++++++++++++++---
> 4 files changed, 64 insertions(+), 12 deletions(-)
>
> diff --git a/include/linux/gfp.h b/include/linux/gfp.h
> index 619eb20..d125440 100644
> --- a/include/linux/gfp.h
> +++ b/include/linux/gfp.h
> @@ -186,6 +186,12 @@ static inline int gfpflags_to_migratetype(const gfp_t gfp_flags)
> #define OPT_ZONE_DMA32 ZONE_NORMAL
> #endif
>
> +#ifdef CONFIG_CMA
> +#define OPT_ZONE_CMA ZONE_CMA
> +#else
> +#define OPT_ZONE_CMA ZONE_MOVABLE
> +#endif
> +

Does that mean with CONFIG_CMA we always try ZONE_CMA first and then
fallback to ZONE_MOVABLE ? If so won't we hit termporary CMA allocation
failures that can result with pinned movable pages ?

-aneesh

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/