From: Keir Fraser Date: Wed, 16 Dec 2009 16:43:33 +0000 (+0000) Subject: xen/balloon: prefer using pages from balloon in alloc_empty_pages_and_pagevec() X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1b3e8c9b66849f723243f6e89a8c583271054fa4;p=legacy%2Flinux-2.6.18-xen.git xen/balloon: prefer using pages from balloon in alloc_empty_pages_and_pagevec() This is both faster and less demanding on kernel resources. Likely also something that could be done in the pv-ops tree (though it would need some adjustment to deal with the balloon_order!=0 case). Signed-off-by: Jan Beulich --- diff --git a/drivers/xen/balloon/balloon.c b/drivers/xen/balloon/balloon.c index 0bb27345..cf1878c7 100644 --- a/drivers/xen/balloon/balloon.c +++ b/drivers/xen/balloon/balloon.c @@ -602,6 +602,17 @@ struct page **alloc_empty_pages_and_pagevec(int nr_pages) return NULL; for (i = 0; i < nr_pages; i++) { + balloon_lock(flags); + page = balloon_first_page(); + if (page && !PageHighMem(page)) { + UNLIST_PAGE(page); + bs.balloon_low--; + balloon_unlock(flags); + pagevec[i] = page; + continue; + } + balloon_unlock(flags); + page = pagevec[i] = alloc_page(GFP_KERNEL|__GFP_COLD); if (page == NULL) goto err;