Commit b06eda09 authored by Rik van Riel's avatar Rik van Riel Committed by Linus Torvalds

mm,compaction,cma: add alloc_contig flag to compact_control

Patch series "fix THP migration for CMA allocations", v2.

Transparent huge pages are allocated with __GFP_MOVABLE, and can end up in
CMA memory blocks.  Transparent huge pages also have most of the
infrastructure in place to allow migration.

However, a few pieces were missing, causing THP migration to fail when
attempting to use CMA to allocate 1GB hugepages.

With these patches in place, THP migration from CMA blocks seems to work,
both for anonymous THPs and for tmpfs/shmem THPs.

This patch (of 2):

Add information to struct compact_control to indicate that the allocator
would really like to clear out this specific part of memory, used by for
example CMA.
Signed-off-by: default avatarRik van Riel <riel@surriel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Joonsoo Kim <js1304@gmail.com>
Link: http://lkml.kernel.org/r/20200227213238.1298752-1-riel@surriel.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent eea274d6
...@@ -229,6 +229,7 @@ struct compact_control { ...@@ -229,6 +229,7 @@ struct compact_control {
bool whole_zone; /* Whole zone should/has been scanned */ bool whole_zone; /* Whole zone should/has been scanned */
bool contended; /* Signal lock or sched contention */ bool contended; /* Signal lock or sched contention */
bool rescan; /* Rescanning the same pageblock */ bool rescan; /* Rescanning the same pageblock */
bool alloc_contig; /* alloc_contig_range allocation */
}; };
/* /*
......
...@@ -8400,6 +8400,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, ...@@ -8400,6 +8400,7 @@ int alloc_contig_range(unsigned long start, unsigned long end,
.ignore_skip_hint = true, .ignore_skip_hint = true,
.no_set_skip_hint = true, .no_set_skip_hint = true,
.gfp_mask = current_gfp_context(gfp_mask), .gfp_mask = current_gfp_context(gfp_mask),
.alloc_contig = true,
}; };
INIT_LIST_HEAD(&cc.migratepages); INIT_LIST_HEAD(&cc.migratepages);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment