summary refs log tree commit diff stats
path: root/exec.c
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2010-03-14 14:58:46 +0000
committerPaul Brook <paul@codesourcery.com>2010-03-14 14:58:46 +0000
commit7296abaccc98872e28cec50091dbf26d38e4f062 (patch)
treec4930478d8f5ef24a7d638bddb1a19ca7f7b04f6 /exec.c
parent66c80e75752e87a9479577fda1446a7623884f01 (diff)
downloadfocaccia-qemu-7296abaccc98872e28cec50091dbf26d38e4f062.tar.gz
focaccia-qemu-7296abaccc98872e28cec50091dbf26d38e4f062.zip
Fix pagetable code
The multi-level pagetable code fails to iterate ove all entries because
of the L2_BITS v.s. L2_SIZE thinko.

Signed-off-by: Paul Brook <paul@codesourcery.com>
Diffstat (limited to '')
-rw-r--r--exec.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/exec.c b/exec.c
index 20e61a0c5b..b0b6056d52 100644
--- a/exec.c
+++ b/exec.c
@@ -642,13 +642,13 @@ static void page_flush_tb_1 (int level, void **lp)
     }
     if (level == 0) {
         PageDesc *pd = *lp;
-        for (i = 0; i < L2_BITS; ++i) {
+        for (i = 0; i < L2_SIZE; ++i) {
             pd[i].first_tb = NULL;
             invalidate_page_bitmap(pd + i);
         }
     } else {
         void **pp = *lp;
-        for (i = 0; i < L2_BITS; ++i) {
+        for (i = 0; i < L2_SIZE; ++i) {
             page_flush_tb_1 (level - 1, pp + i);
         }
     }
@@ -1723,7 +1723,7 @@ static void phys_page_for_each_1(CPUPhysMemoryClient *client,
     }
     if (level == 0) {
         PhysPageDesc *pd = *lp;
-        for (i = 0; i < L2_BITS; ++i) {
+        for (i = 0; i < L2_SIZE; ++i) {
             if (pd[i].phys_offset != IO_MEM_UNASSIGNED) {
                 client->set_memory(client, pd[i].region_offset,
                                    TARGET_PAGE_SIZE, pd[i].phys_offset);
@@ -1731,7 +1731,7 @@ static void phys_page_for_each_1(CPUPhysMemoryClient *client,
         }
     } else {
         void **pp = *lp;
-        for (i = 0; i < L2_BITS; ++i) {
+        for (i = 0; i < L2_SIZE; ++i) {
             phys_page_for_each_1(client, level - 1, pp + i);
         }
     }
@@ -2244,7 +2244,7 @@ static int walk_memory_regions_1(struct walk_memory_regions_data *data,
 
     if (level == 0) {
         PageDesc *pd = *lp;
-        for (i = 0; i < L2_BITS; ++i) {
+        for (i = 0; i < L2_SIZE; ++i) {
             int prot = pd[i].flags;
 
             pa = base | (i << TARGET_PAGE_BITS);
@@ -2257,7 +2257,7 @@ static int walk_memory_regions_1(struct walk_memory_regions_data *data,
         }
     } else {
         void **pp = *lp;
-        for (i = 0; i < L2_BITS; ++i) {
+        for (i = 0; i < L2_SIZE; ++i) {
             pa = base | ((abi_ulong)i <<
                 (TARGET_PAGE_BITS + L2_BITS * level));
             rc = walk_memory_regions_1(data, pa, level - 1, pp + i);