diff mbox

[10/20] memory: fix RAM subpages in newly initialized pages

Message ID 1329211670-11548-11-git-send-email-avi@redhat.com
State New
Headers show

Commit Message

Avi Kivity Feb. 14, 2012, 9:27 a.m. UTC
If the first subpage installed in a page is RAM, then we install it as
a full page, instead of a subpage.  Fix by not special casing RAM.

The issue dates to commit db7b5426a4b4242, which introduced subpages.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 exec.c |   22 ++++++++++------------
 1 files changed, 10 insertions(+), 12 deletions(-)
diff mbox

Patch

diff --git a/exec.c b/exec.c
index 0756919..5d0afdb 100644
--- a/exec.c
+++ b/exec.c
@@ -2660,22 +2660,20 @@  void cpu_register_physical_memory_log(MemoryRegionSection *section,
                 *p = section_index;
             }
         } else {
-            MemoryRegion *mr = section->mr;
+            target_phys_addr_t start_addr2, end_addr2;
+            int need_subpage = 0;
+
             p = phys_page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
             *p = section_index;
-            if (!(memory_region_is_ram(mr) || mr->rom_device)) {
-                target_phys_addr_t start_addr2, end_addr2;
-                int need_subpage = 0;
 
-                CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr,
-                              end_addr2, need_subpage);
+            CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr,
+                          end_addr2, need_subpage);
 
-                if (need_subpage) {
-                    subpage = subpage_init((addr & TARGET_PAGE_MASK),
-                                           p, phys_section_unassigned);
-                    subpage_register(subpage, start_addr2, end_addr2,
-                                     section_index);
-                }
+            if (need_subpage) {
+                subpage = subpage_init((addr & TARGET_PAGE_MASK),
+                                       p, phys_section_unassigned);
+                subpage_register(subpage, start_addr2, end_addr2,
+                                 section_index);
             }
         }
         addr += TARGET_PAGE_SIZE;