From 0a33e67046d2afe8a6270802cc6a7ebb9695a1d8 Mon Sep 17 00:00:00 2001 From: "bd240@labyrinth.cl.cam.ac.uk" Date: Thu, 20 Mar 2003 16:00:24 +0000 Subject: bitkeeper revision 1.146.1.1 (3e79e598DbxkRZcMmXnRdG-iR7v7HA) New BitKeeper file ``xen/include/xeno/xeno'' --- .../arch/xeno/drivers/balloon/balloon.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'xenolinux-2.4.21-pre4-sparse/arch') diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/balloon/balloon.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/balloon/balloon.c index abe5884800..e1a6d30374 100644 --- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/balloon/balloon.c +++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/balloon/balloon.c @@ -67,6 +67,7 @@ static unsigned long inflate_balloon(unsigned long num_pages) dom_mem_op_t dom_mem_op; unsigned long *parray; unsigned long *currp; + unsigned long curraddr; unsigned long ret = 0; unsigned long vaddr; unsigned long i, j; @@ -100,8 +101,10 @@ static unsigned long inflate_balloon(unsigned long num_pages) currp = parray; for ( i = 0; i < num_pages; i++ ) { - queue_l1_entry_update(get_ppte(*currp) | PGREQ_NORMAL, 0); - phys_to_machine_mapping[__pa(*currp) >> PAGE_SHIFT] = DEAD; + curraddr = *currp; + *currp = virt_to_machine(*currp) >> PAGE_SHIFT; + queue_l1_entry_update(get_ppte(curraddr) | PGREQ_NORMAL, 0); + phys_to_machine_mapping[__pa(curraddr) >> PAGE_SHIFT] = DEAD; currp++; } @@ -112,7 +115,7 @@ static unsigned long inflate_balloon(unsigned long num_pages) dom_mem_op.u.balloon_inflate.pages = parray; if ( (ret = HYPERVISOR_dom_mem_op(&dom_mem_op)) != num_pages ) { - printk("Unable to deflate balloon, error %lx\n", ret); + printk("Unable to inflate balloon, error %lx\n", ret); goto cleanup; } @@ -145,10 +148,11 @@ static unsigned long process_new_pages(unsigned long * parray, unsigned long i; num_installed = 0; - for ( i = 0; i < tot_pages; i++ ) + for ( i = 0; (i < tot_pages) && (num_installed < num); i++ ) { if ( phys_to_machine_mapping[i] == DEAD ) { + printk(KERN_ALERT "bd240 debug: proc_new_pages: i %lx, mpt %lx, %lx\n", i, i << PAGE_SHIFT, get_ppte((unsigned long)__va(i << PAGE_SHIFT)) | PGREQ_NORMAL); phys_to_machine_mapping[i] = *curr; queue_l1_entry_update((i << PAGE_SHIFT) | PGREQ_MPT_UPDATE, i); queue_l1_entry_update( @@ -176,12 +180,14 @@ static unsigned long process_new_pages(unsigned long * parray, return num_installed; } -static unsigned long deflate_balloon(unsigned long num_pages) +unsigned long deflate_balloon(unsigned long num_pages) { dom_mem_op_t dom_mem_op; unsigned long ret; unsigned long * parray; + printk(KERN_ALERT "bd240 debug: deflate balloon called for %lx pages\n", num_pages); + if ( num_pages > credit ) { printk("Can not allocate more pages than previously released.\n"); @@ -206,6 +212,7 @@ static unsigned long deflate_balloon(unsigned long num_pages) } ret = num_pages; + credit -= num_pages; cleanup: kfree(parray); -- cgit v1.2.3