Lines Matching refs:page

7 #include <linux/page-isolation.h>
18 static int set_migratetype_isolate(struct page *page, int migratetype, int isol_flags)
20 struct zone *zone = page_zone(page);
21 struct page *unmovable;
31 if (is_migrate_isolate_page(page)) {
40 unmovable = has_unmovable_pages(zone, page, migratetype, isol_flags);
43 int mt = get_pageblock_migratetype(page);
45 set_pageblock_migratetype(page, MIGRATE_ISOLATE);
47 nr_pages = move_freepages_block(zone, page, MIGRATE_ISOLATE,
62 dump_page(unmovable, "unmovable page");
68 static void unset_migratetype_isolate(struct page *page, unsigned migratetype)
75 struct page *buddy;
77 zone = page_zone(page);
79 if (!is_migrate_isolate_page(page))
85 * it is possible that there is free buddy page.
90 if (PageBuddy(page)) {
91 order = buddy_order(page);
93 pfn = page_to_pfn(page);
95 buddy = page + (buddy_pfn - pfn);
99 __isolate_free_page(page, order);
116 nr_pages = move_freepages_block(zone, page, migratetype, NULL);
119 set_pageblock_migratetype(page, migratetype);
121 __putback_isolated_page(page, order, migratetype);
127 static inline struct page *
133 struct page *page;
135 page = pfn_to_online_page(pfn + i);
136 if (!page)
138 return page;
144 * start_isolate_page_range() - make page-allocation-type of range of pages to
158 * Making page-allocation-type to be MIGRATE_ISOLATE means free pages in
173 * Please note that there is no strong synchronization with the page allocator
174 * either. Pages might be freed while their page blocks are marked ISOLATED.
188 struct page *page;
196 page = __first_valid_page(pfn, pageblock_nr_pages);
197 if (page) {
198 if (set_migratetype_isolate(page, migratetype, flags)) {
209 struct page *page = pfn_to_online_page(pfn);
210 if (!page)
212 unset_migratetype_isolate(page, migratetype);
225 struct page *page;
233 page = __first_valid_page(pfn, pageblock_nr_pages);
234 if (!page || !is_migrate_isolate_page(page))
236 unset_migratetype_isolate(page, migratetype);
250 struct page *page;
257 page = pfn_to_page(pfn);
258 if (PageBuddy(page))
260 * If the page is on a free list, it has to be on
264 pfn += 1 << buddy_order(page);
265 else if ((flags & MEMORY_OFFLINE) && PageHWPoison(page))
266 /* A HWPoisoned page cannot be also PageBuddy */
268 else if ((flags & MEMORY_OFFLINE) && PageOffline(page) &&
269 !page_count(page))
288 struct page *page;
297 page = __first_valid_page(pfn, pageblock_nr_pages);
298 if (page && !is_migrate_isolate_page(page))
301 page = __first_valid_page(start_pfn, end_pfn - start_pfn);
302 if ((pfn < end_pfn) || !page)
305 zone = page_zone(page);