xen: add an "highmem" parameter to alloc_xenballooned_pages
Add an highmem parameter to alloc_xenballooned_pages, to allow callers to request lowmem or highmem pages. Fix the code style of free_xenballooned_pages' prototype. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
Родитель
0f4b49eaf2
Коммит
693394b8c3
|
@ -501,20 +501,24 @@ EXPORT_SYMBOL_GPL(balloon_set_new_target);
|
|||
* alloc_xenballooned_pages - get pages that have been ballooned out
|
||||
* @nr_pages: Number of pages to get
|
||||
* @pages: pages returned
|
||||
* @highmem: highmem or lowmem pages
|
||||
* @return 0 on success, error otherwise
|
||||
*/
|
||||
int alloc_xenballooned_pages(int nr_pages, struct page** pages)
|
||||
int alloc_xenballooned_pages(int nr_pages, struct page **pages, bool highmem)
|
||||
{
|
||||
int pgno = 0;
|
||||
struct page* page;
|
||||
mutex_lock(&balloon_mutex);
|
||||
while (pgno < nr_pages) {
|
||||
page = balloon_retrieve(true);
|
||||
if (page) {
|
||||
page = balloon_retrieve(highmem);
|
||||
if (page && PageHighMem(page) == highmem) {
|
||||
pages[pgno++] = page;
|
||||
} else {
|
||||
enum bp_state st;
|
||||
st = decrease_reservation(nr_pages - pgno, GFP_HIGHUSER);
|
||||
if (page)
|
||||
balloon_append(page);
|
||||
st = decrease_reservation(nr_pages - pgno,
|
||||
highmem ? GFP_HIGHUSER : GFP_USER);
|
||||
if (st != BP_DONE)
|
||||
goto out_undo;
|
||||
}
|
||||
|
|
|
@ -123,7 +123,7 @@ static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count)
|
|||
NULL == add->pages)
|
||||
goto err;
|
||||
|
||||
if (alloc_xenballooned_pages(count, add->pages))
|
||||
if (alloc_xenballooned_pages(count, add->pages, false /* lowmem */))
|
||||
goto err;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
|
|
|
@ -25,8 +25,9 @@ extern struct balloon_stats balloon_stats;
|
|||
|
||||
void balloon_set_new_target(unsigned long target);
|
||||
|
||||
int alloc_xenballooned_pages(int nr_pages, struct page** pages);
|
||||
void free_xenballooned_pages(int nr_pages, struct page** pages);
|
||||
int alloc_xenballooned_pages(int nr_pages, struct page **pages,
|
||||
bool highmem);
|
||||
void free_xenballooned_pages(int nr_pages, struct page **pages);
|
||||
|
||||
struct sys_device;
|
||||
#ifdef CONFIG_XEN_SELFBALLOONING
|
||||
|
|
Загрузка…
Ссылка в новой задаче