mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 15:19:51 +00:00
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.cz Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Acked-by: Mel Gorman <mgorman@techsingularity.net> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b682debd97
commit
d39773a062
@ -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_
|
|||||||
}
|
}
|
||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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 {
|
|||||||
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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user