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);