[PATCH 0/3] Interface for higher order contiguous allocations

From: Mike Kravetz
Date: Mon Apr 16 2018 - 22:10:48 EST

These patches came out of the "[RFC] mmap(MAP_CONTIG)" discussions at:

One suggestion in that thread was to create a friendlier interface that
could be used by drivers and others outside core mm code to allocate a
contiguous set of pages. The alloc_contig_range() interface is used for
this purpose today by CMA and gigantic page allocation. However, this is
not a general purpose interface. So, wrap alloc_contig_range() in the
more general interface:

struct page *find_alloc_contig_pages(unsigned int order, gfp_t gfp, int nid,
nodemask_t *nodemask)

This interface is essentially the same functionality provided by the
hugetlb specific routine alloc_gigantic_page(). After creating the
interface, change alloc_gigantic_page() to call find_alloc_contig_pages()
and delete all the supporting code in hugetlb.c.

A new use case for allocating contiguous memory has been identified in
Intel(R) Resource Director Technology Cache Pseudo-Locking.

Mike Kravetz (3):
mm: change type of free_contig_range(nr_pages) to unsigned long
mm: add find_alloc_contig_pages() interface
mm/hugetlb: use find_alloc_contig_pages() to allocate gigantic pages

include/linux/gfp.h | 14 +++++++-
mm/cma.c | 2 +-
mm/hugetlb.c | 87 ++++--------------------------------------------
mm/page_alloc.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++---
4 files changed, 110 insertions(+), 88 deletions(-)