aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.21-pre4-sparse
diff options
context:
space:
mode:
authorbd240@labyrinth.cl.cam.ac.uk <bd240@labyrinth.cl.cam.ac.uk>2003-03-20 16:00:40 +0000
committerbd240@labyrinth.cl.cam.ac.uk <bd240@labyrinth.cl.cam.ac.uk>2003-03-20 16:00:40 +0000
commit6b62a7127fd30e736ef60fc92a9c53fbde817175 (patch)
tree392a2c3477286b50114b997db0f61fc06049ca7b /xenolinux-2.4.21-pre4-sparse
parentd51a979375c12dc6e967433718e6c34ebf7bdce0 (diff)
parent0a33e67046d2afe8a6270802cc6a7ebb9695a1d8 (diff)
downloadxen-6b62a7127fd30e736ef60fc92a9c53fbde817175.tar.gz
xen-6b62a7127fd30e736ef60fc92a9c53fbde817175.tar.bz2
xen-6b62a7127fd30e736ef60fc92a9c53fbde817175.zip
bitkeeper revision 1.151 (3e79e5a8nYFbe3fje-9Iz07_2N2H0g)
Merge labyrinth.cl.cam.ac.uk:/usr/groups/xeno/BK/xeno.bk into labyrinth.cl.cam.ac.uk:/local/scratch/bd240/xeno-clone/xeno.bk
Diffstat (limited to 'xenolinux-2.4.21-pre4-sparse')
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/balloon/balloon.c17
1 files changed, 12 insertions, 5 deletions
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);