diff options
-rw-r--r-- | mm/page_alloc.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 63858c4522b3..fc48fcdd0478 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -56,6 +56,7 @@ #include <linux/ftrace_event.h> #include <linux/memcontrol.h> #include <linux/prefetch.h> +#include <linux/pasr.h> #include <linux/migrate.h> #include <linux/page-debug-flags.h> #include <linux/hugetlb.h> @@ -570,6 +571,7 @@ static inline void __free_one_page(struct page *page, } else { list_del(&buddy->lru); zone->free_area[order].nr_free--; + pasr_kget(buddy, order); rmv_page_order(buddy); } combined_idx = buddy_idx & page_idx; @@ -603,6 +605,7 @@ static inline void __free_one_page(struct page *page, list_add(&page->lru, &zone->free_area[order].free_list[migratetype]); out: zone->free_area[order].nr_free++; + pasr_kput(page, order); } static inline int free_pages_check(struct page *page) @@ -835,6 +838,7 @@ static inline void expand(struct zone *zone, struct page *page, #endif list_add(&page[size].lru, &area->free_list[migratetype]); area->nr_free++; + pasr_kput(page, high); set_page_order(&page[size], high); } } @@ -903,6 +907,7 @@ struct page *__rmqueue_smallest(struct zone *zone, unsigned int order, list_del(&page->lru); rmv_page_order(page); area->nr_free--; + pasr_kget(page, current_order); expand(zone, page, order, current_order, area, migratetype); return page; } @@ -1037,6 +1042,7 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype) page = list_entry(area->free_list[migratetype].next, struct page, lru); area->nr_free--; + pasr_kget(page, current_order); /* * If breaking a large block of pages, move all free @@ -1424,6 +1430,8 @@ static int __isolate_free_page(struct page *page, unsigned int order) /* Remove page from free list */ list_del(&page->lru); zone->free_area[order].nr_free--; + pasr_kget(page, order); + rmv_page_order(page); /* Set the pageblock if the isolated page is at least a pageblock */ @@ -6143,6 +6151,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) list_del(&page->lru); rmv_page_order(page); zone->free_area[order].nr_free--; + pasr_kget(page, order); #ifdef CONFIG_HIGHMEM if (PageHighMem(page)) totalhigh_pages -= 1 << order; |