alloc_contig_range() initiates compaction and eventual migration for the purpose of either CMA or HugeTLB allocation. At present, reason code remains the same MR_CMA for either of those cases. Lets add a new reason code which will differentiate the purpose of migration as HugeTLB allocation instead.
Signed-off-by: Anshuman Khandual <khand...@linux.vnet.ibm.com> --- include/linux/migrate.h | 1 + include/trace/events/migrate.h | 3 ++- mm/page_alloc.c | 14 ++++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/linux/migrate.h b/include/linux/migrate.h index a732598fcf83..44381c33a2bd 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -26,6 +26,7 @@ enum migrate_reason { MR_MEMPOLICY_MBIND, MR_NUMA_MISPLACED, MR_CMA, + MR_HUGETLB, MR_TYPES }; diff --git a/include/trace/events/migrate.h b/include/trace/events/migrate.h index bcf4daccd6be..61474c93f8f3 100644 --- a/include/trace/events/migrate.h +++ b/include/trace/events/migrate.h @@ -20,7 +20,8 @@ EM( MR_SYSCALL, "syscall_or_cpuset") \ EM( MR_MEMPOLICY_MBIND, "mempolicy_mbind") \ EM( MR_NUMA_MISPLACED, "numa_misplaced") \ - EMe(MR_CMA, "cma") + EM( MR_CMA, "cma") \ + EMe(MR_HUGETLB, "hugetlb") /* * First define the enums in the above macros to be exported to userspace diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 242565855d05..ce8a2f2d4994 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -7588,13 +7588,14 @@ static unsigned long pfn_max_align_up(unsigned long pfn) /* [start, end) must belong to a single zone. */ static int __alloc_contig_migrate_range(struct compact_control *cc, - unsigned long start, unsigned long end) + unsigned long start, unsigned long end, + unsigned migratetype) { /* This function is based on compact_zone() from compaction.c. */ unsigned long nr_reclaimed; unsigned long pfn = start; unsigned int tries = 0; - int ret = 0; + int ret = 0, migrate_reason = 0; migrate_prep(); @@ -7621,8 +7622,13 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, &cc->migratepages); cc->nr_migratepages -= nr_reclaimed; + if (migratetype == MIGRATE_CMA) + migrate_reason = MR_CMA; + else + migrate_reason = MR_HUGETLB; + ret = migrate_pages(&cc->migratepages, new_page_alloc_contig, - NULL, 0, cc->mode, MR_CMA); + NULL, 0, cc->mode, migrate_reason); } if (ret < 0) { putback_movable_pages(&cc->migratepages); @@ -7710,7 +7716,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, * allocated. So, if we fall through be sure to clear ret so that * -EBUSY is not accidentally used or returned to caller. */ - ret = __alloc_contig_migrate_range(&cc, start, end); + ret = __alloc_contig_migrate_range(&cc, start, end, migratetype); if (ret && ret != -EBUSY) goto done; ret =0; -- 2.11.0