migratetype
struct vmem_altmap *altmap, int migratetype,
# define is_migrate_cma(migratetype) false
# define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
static inline bool is_migrate_isolate(int migratetype)
return migratetype == MIGRATE_ISOLATE;
static inline bool is_migrate_isolate(int migratetype)
enum migratetype migratetype,
enum migratetype get_pfnblock_migratetype(const struct page *page,
gfp_t gfp_flags, int migratetype),
TP_ARGS(page, order, gfp_flags, migratetype),
__field( int, migratetype )
__entry->migratetype = migratetype;
__entry->migratetype,
TP_PROTO(struct page *page, unsigned int order, int migratetype,
TP_ARGS(page, order, migratetype, percpu_refill),
__field( int, migratetype )
__entry->migratetype = migratetype;
__entry->migratetype,
TP_PROTO(struct page *page, unsigned int order, int migratetype,
TP_ARGS(page, order, migratetype, percpu_refill)
TP_PROTO(struct page *page, unsigned int order, int migratetype),
TP_ARGS(page, order, migratetype),
__field( int, migratetype )
__entry->migratetype = migratetype;
__entry->order, __entry->migratetype)
if (cc->migratetype == MIGRATE_MOVABLE)
return block_mt == cc->migratetype;
if (cc->direct_compaction && cc->migratetype != MIGRATE_MOVABLE)
const int migratetype = cc->migratetype;
if (!free_area_empty(area, migratetype))
if (migratetype == MIGRATE_MOVABLE &&
if (find_suitable_fallback(area, order, migratetype, true) >= 0)
cc->migratetype = gfp_migratetype(cc->gfp_mask);
int migratetype, bool claimable);
static inline bool free_area_empty(struct free_area *area, int migratetype)
return list_empty(&area->free_list[migratetype]);
int migratetype;
int migratetype; /* migratetype of direct compactor */
struct vmem_altmap *altmap, int migratetype,
MEMINIT_HOTPLUG, altmap, migratetype,
struct vmem_altmap *altmap, int migratetype,
init_pageblock_migratetype(page, migratetype,
if (compaction_capture(capc, page, order, migratetype)) {
account_freepages(zone, -(1 << order), migratetype);
if (migratetype != buddy_mt &&
(!migratetype_is_mergeable(migratetype) ||
if (unlikely(buddy_mt != migratetype)) {
change_pageblock_range(buddy, order, migratetype);
__add_to_free_list(page, zone, order, migratetype, to_tail);
int high, int migratetype)
__add_to_free_list(&page[size], zone, high, migratetype, false);
int high, int migratetype)
__del_page_from_free_list(page, zone, high, migratetype);
nr_pages -= expand(zone, page, low, high, migratetype);
account_freepages(zone, -nr_pages, migratetype);
int migratetype)
page = get_page_from_free_area(area, migratetype);
migratetype);
trace_mm_page_alloc_zone_locked(page, order, migratetype,
migratetype < MIGRATE_PCPTYPES);
int migratetype, bool claimable)
if (claimable && !should_try_claim_block(order, migratetype))
int fallback_mt = fallbacks[migratetype][i];
__rmqueue(struct zone *zone, unsigned int order, int migratetype,
page = __rmqueue_smallest(zone, order, migratetype);
page = __rmqueue_claim(zone, order, migratetype, alloc_flags);
page = __rmqueue_steal(zone, order, migratetype);
int migratetype, unsigned int alloc_flags)
struct page *page = __rmqueue(zone, order, migratetype,
struct per_cpu_pages *pcp, struct page *page, int migratetype,
pindex = order_to_pindex(migratetype, order);
int migratetype;
migratetype = get_pfnblock_migratetype(page, pfn);
if (unlikely(migratetype >= MIGRATE_PCPTYPES)) {
if (unlikely(is_migrate_isolate(migratetype))) {
migratetype = MIGRATE_MOVABLE;
if (!free_frozen_page_commit(zone, pcp, page, migratetype,
int migratetype;
migratetype = get_pfnblock_migratetype(&folio->page, pfn);
is_migrate_isolate(migratetype)) {
if (is_migrate_isolate(migratetype)) {
if (unlikely(migratetype >= MIGRATE_PCPTYPES))
migratetype = MIGRATE_MOVABLE;
migratetype, order, FPI_NONE, &UP_flags)) {
int migratetype)
page = __rmqueue(zone, order, migratetype, alloc_flags, &rmqm);
int migratetype,
migratetype, alloc_flags);
int migratetype, unsigned int alloc_flags)
list = &pcp->lists[order_to_pindex(migratetype, order)];
page = __rmqueue_pcplist(zone, order, migratetype, alloc_flags, pcp, list);
int migratetype)
migratetype, alloc_flags);
migratetype);
ac->migratetype);
ac->migratetype);
ac->migratetype);
gfp_mask, alloc_flags, ac->migratetype);
__always_inline enum migratetype
ac->migratetype != MIGRATE_MOVABLE))) {
ac->migratetype = gfp_migratetype(gfp_mask);
pcp_list = &pcp->lists[order_to_pindex(ac.migratetype, 0)];
page = __rmqueue_pcplist(zone, 0, ac.migratetype, alloc_flags,
trace_mm_page_alloc(page, order, alloc_gfp, ac.migratetype);
enum migratetype migratetype)
migratetype < MIGRATE_PCPTYPES))
migratetype = MIGRATE_UNMOVABLE;
if (migratetype == MIGRATE_ISOLATE) {
(unsigned long)migratetype,
enum migratetype migratetype,
migratetype < MIGRATE_PCPTYPES))
migratetype = MIGRATE_UNMOVABLE;
flags = migratetype;
if (migratetype == MIGRATE_ISOLATE) {
static inline unsigned int order_to_pindex(int migratetype, int order)
movable = migratetype == MIGRATE_MOVABLE;
return (MIGRATE_PCPTYPES * order) + migratetype;
unsigned int order, int migratetype,
__add_to_free_list(page, zone, order, migratetype, tail);
account_freepages(zone, 1 << order, migratetype);
int migratetype)
add_to_free_list(current_buddy, zone, high, migratetype, false);
int migratetype = get_pfnblock_migratetype(page_head,
migratetype);
page_order, migratetype);
int migratetype = get_pfnblock_migratetype(page, pfn);
__free_one_page(page, pfn, zone, 0, migratetype, FPI_NONE);
int order, int migratetype)
if (is_migrate_cma(migratetype) ||
is_migrate_isolate(migratetype))
trace_mm_page_alloc(page, order, alloc_gfp, ac.migratetype);
if (order < pageblock_order && migratetype == MIGRATE_MOVABLE &&
capc->cc->migratetype != MIGRATE_MOVABLE)
if (migratetype != capc->cc->migratetype)
capc->cc->migratetype, migratetype);
int order, int migratetype)
int migratetype)
if (is_migrate_isolate(migratetype))
if (is_migrate_cma(migratetype))
else if (migratetype == MIGRATE_HIGHATOMIC)
unsigned int order, int migratetype,
VM_WARN_ONCE(get_pageblock_migratetype(page) != migratetype,
get_pageblock_migratetype(page), migratetype, nr_pages);
list_add_tail(&page->buddy_list, &area->free_list[migratetype]);
list_add(&page->buddy_list, &area->free_list[migratetype]);
if (order >= pageblock_order && !is_migrate_isolate(migratetype))
unsigned int order, int migratetype)
VM_WARN_ONCE(get_pageblock_migratetype(page) != migratetype,
get_pageblock_migratetype(page), migratetype, nr_pages);
if (order >= pageblock_order && !is_migrate_isolate(migratetype))
unsigned int order, int migratetype)
__del_page_from_free_list(page, zone, order, migratetype);
account_freepages(zone, -(1 << order), migratetype);
int migratetype)
return list_first_entry_or_null(&area->free_list[migratetype],
int start_order, int migratetype)
set_pageblock_migratetype(pageblock_page, migratetype);
int migratetype, fpi_t fpi_flags)
VM_BUG_ON(migratetype == -1);
account_freepages(zone, 1 << order, migratetype);
int buddy_mt = migratetype;
migratetype = get_pageblock_migratetype(page_i);
if (get_pageblock_migratetype(page_j) != migratetype) {
int migratetype, retry;