|
@@ -7,6 +7,7 @@
|
|
|
#include <linux/pageblock-flags.h>
|
|
|
#include <linux/memory.h>
|
|
|
#include <linux/hugetlb.h>
|
|
|
+#include <linux/page_owner.h>
|
|
|
#include "internal.h"
|
|
|
|
|
|
#define CREATE_TRACE_POINTS
|
|
@@ -108,8 +109,6 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype)
|
|
|
if (pfn_valid_within(page_to_pfn(buddy)) &&
|
|
|
!is_migrate_isolate_page(buddy)) {
|
|
|
__isolate_free_page(page, order);
|
|
|
- kernel_map_pages(page, (1 << order), 1);
|
|
|
- set_page_refcounted(page);
|
|
|
isolated_page = page;
|
|
|
}
|
|
|
}
|
|
@@ -128,8 +127,12 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype)
|
|
|
zone->nr_isolate_pageblock--;
|
|
|
out:
|
|
|
spin_unlock_irqrestore(&zone->lock, flags);
|
|
|
- if (isolated_page)
|
|
|
+ if (isolated_page) {
|
|
|
+ kernel_map_pages(page, (1 << order), 1);
|
|
|
+ set_page_refcounted(page);
|
|
|
+ set_page_owner(page, order, __GFP_MOVABLE);
|
|
|
__free_pages(isolated_page, order);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static inline struct page *
|