mm: enable zeroed pages
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 3d099e8..bbebc20 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1312,6 +1312,7 @@
struct per_cpu_pages *pcp;
unsigned long flags;
int migratetype;
+ int ok_to_zero = !(in_interrupt() || in_atomic());
int wasMlocked = __TestClearPageMlocked(page);
if (!free_pages_prepare(page, 0))
@@ -1340,12 +1341,18 @@
}
pcp = &this_cpu_ptr(zone->pageset)->pcp;
- if (cold)
+ if (cold) {
list_add_tail(&page->lru,
&pcp->lists[migratetype][NOTZEROED_PAGE]);
- else
+ pcp->nzcount++;
+ } else if (ok_to_zero && pcp->nzcount > pcp->zcount) {
+ clear_highpage(page);
+ list_add(&page->lru, &pcp->lists[migratetype][ZEROED_PAGE]);
+ pcp->zcount++;
+ } else {
list_add(&page->lru, &pcp->lists[migratetype][NOTZEROED_PAGE]);
- pcp->nzcount++;
+ pcp->nzcount++;
+ }
if (pcp->nzcount + pcp->zcount >= pcp->high)
free_pcppages_bulk(zone, pcp->batch, pcp);