Commit d39773a0 authored by Vlastimil Babka's avatar Vlastimil Babka Committed by Linus Torvalds

mm, compaction: add migratetype to compact_control

Preparation patch.  We are going to need migratetype at lower layers
than compact_zone() and compact_finished().

Link: http://lkml.kernel.org/r/20170307131545.28577-7-vbabka@suse.czSigned-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
Acked-by: default avatarMel Gorman <mgorman@techsingularity.net>
Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: David Rientjes <rientjes@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b682debd
...@@ -1279,10 +1279,11 @@ static inline bool is_via_compact_memory(int order) ...@@ -1279,10 +1279,11 @@ static inline bool is_via_compact_memory(int order)
return order == -1; return order == -1;
} }
static enum compact_result __compact_finished(struct zone *zone, struct compact_control *cc, static enum compact_result __compact_finished(struct zone *zone,
const int migratetype) struct compact_control *cc)
{ {
unsigned int order; unsigned int order;
const int migratetype = cc->migratetype;
if (cc->contended || fatal_signal_pending(current)) if (cc->contended || fatal_signal_pending(current))
return COMPACT_CONTENDED; return COMPACT_CONTENDED;
...@@ -1338,12 +1339,11 @@ static enum compact_result __compact_finished(struct zone *zone, struct compact_ ...@@ -1338,12 +1339,11 @@ static enum compact_result __compact_finished(struct zone *zone, struct compact_
} }
static enum compact_result compact_finished(struct zone *zone, static enum compact_result compact_finished(struct zone *zone,
struct compact_control *cc, struct compact_control *cc)
const int migratetype)
{ {
int ret; int ret;
ret = __compact_finished(zone, cc, migratetype); ret = __compact_finished(zone, cc);
trace_mm_compaction_finished(zone, cc->order, ret); trace_mm_compaction_finished(zone, cc->order, ret);
if (ret == COMPACT_NO_SUITABLE_PAGE) if (ret == COMPACT_NO_SUITABLE_PAGE)
ret = COMPACT_CONTINUE; ret = COMPACT_CONTINUE;
...@@ -1476,9 +1476,9 @@ static enum compact_result compact_zone(struct zone *zone, struct compact_contro ...@@ -1476,9 +1476,9 @@ static enum compact_result compact_zone(struct zone *zone, struct compact_contro
enum compact_result ret; enum compact_result ret;
unsigned long start_pfn = zone->zone_start_pfn; unsigned long start_pfn = zone->zone_start_pfn;
unsigned long end_pfn = zone_end_pfn(zone); unsigned long end_pfn = zone_end_pfn(zone);
const int migratetype = gfpflags_to_migratetype(cc->gfp_mask);
const bool sync = cc->mode != MIGRATE_ASYNC; const bool sync = cc->mode != MIGRATE_ASYNC;
cc->migratetype = gfpflags_to_migratetype(cc->gfp_mask);
ret = compaction_suitable(zone, cc->order, cc->alloc_flags, ret = compaction_suitable(zone, cc->order, cc->alloc_flags,
cc->classzone_idx); cc->classzone_idx);
/* Compaction is likely to fail */ /* Compaction is likely to fail */
...@@ -1528,8 +1528,7 @@ static enum compact_result compact_zone(struct zone *zone, struct compact_contro ...@@ -1528,8 +1528,7 @@ static enum compact_result compact_zone(struct zone *zone, struct compact_contro
migrate_prep_local(); migrate_prep_local();
while ((ret = compact_finished(zone, cc, migratetype)) == while ((ret = compact_finished(zone, cc)) == COMPACT_CONTINUE) {
COMPACT_CONTINUE) {
int err; int err;
switch (isolate_migratepages(zone, cc)) { switch (isolate_migratepages(zone, cc)) {
......
...@@ -193,6 +193,7 @@ struct compact_control { ...@@ -193,6 +193,7 @@ struct compact_control {
unsigned long last_migrated_pfn;/* Not yet flushed page being freed */ unsigned long last_migrated_pfn;/* Not yet flushed page being freed */
const gfp_t gfp_mask; /* gfp mask of a direct compactor */ const gfp_t gfp_mask; /* gfp mask of a direct compactor */
int order; /* order a direct compactor needs */ int order; /* order a direct compactor needs */
int migratetype; /* migratetype of direct compactor */
const unsigned int alloc_flags; /* alloc flags of a direct compactor */ const unsigned int alloc_flags; /* alloc flags of a direct compactor */
const int classzone_idx; /* zone index of a direct compactor */ const int classzone_idx; /* zone index of a direct compactor */
enum migrate_mode mode; /* Async or sync migration mode */ enum migrate_mode mode; /* Async or sync migration mode */
......
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