]> git.proxmox.com Git - mirror_qemu.git/commitdiff
memory: fix RAM subpages in newly initialized pages
authorAvi Kivity <avi@redhat.com>
Sun, 12 Feb 2012 19:10:50 +0000 (21:10 +0200)
committerAvi Kivity <avi@redhat.com>
Wed, 29 Feb 2012 11:44:43 +0000 (13:44 +0200)
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

diff --git a/exec.c b/exec.c
index 0756919e66cdea01f23e36346d0107fd3d7e7972..5d0afdbdebb720b47688ab4f3b96d9023429a13f 100644 (file)
--- 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;