Signed-off-by: Hu Tao <hu...@cn.fujitsu.com> --- hw/i386/pc.c | 17 ++++++++--------- include/hw/i386/pc.h | 2 ++ 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 5bb4989..55056b1 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1288,7 +1288,6 @@ static int memory_controller_init(PCIDevice *dev) MemoryController *m = MEMORY_CONTROLLER(dev); MemoryControllerClass *c = MEMORY_CONTROLLER_GET_CLASS(dev); ram_addr_t ram_size; - hwaddr below_4g_mem_size, above_4g_mem_size; hwaddr pci_hole_start, pci_hole_size; hwaddr pci_hole64_start, pci_hole64_size; int i; @@ -1296,11 +1295,11 @@ static int memory_controller_init(PCIDevice *dev) g_assert(m->system_memory != NULL); if(m->ram_size > c->pci_hole_start) { - below_4g_mem_size = c->pci_hole_start; - above_4g_mem_size = m->ram_size - c->pci_hole_start; + m->below_4g_mem_size = c->pci_hole_start; + m->above_4g_mem_size = m->ram_size - c->pci_hole_start; } else { - below_4g_mem_size = m->ram_size; - above_4g_mem_size = 0; + m->below_4g_mem_size = m->ram_size; + m->above_4g_mem_size = 0; } /* Allocate RAM. We allocate it as a single memory region and use @@ -1310,16 +1309,16 @@ static int memory_controller_init(PCIDevice *dev) memory_region_init_ram(&m->ram, "pc.ram", m->ram_size); vmstate_register_ram_global(&m->ram); memory_region_init_alias(&m->ram_below_4g, "ram-below-4g", &m->ram, - 0, below_4g_mem_size); + 0, m->below_4g_mem_size); memory_region_add_subregion(m->system_memory, 0, &m->ram_below_4g); - if (above_4g_mem_size > 0) { + if (m->above_4g_mem_size > 0) { memory_region_init_alias(&m->ram_above_4g, "ram-above-4g", &m->ram, - below_4g_mem_size, above_4g_mem_size); + m->below_4g_mem_size, m->above_4g_mem_size); memory_region_add_subregion(m->system_memory, c->pci_hole_end, &m->ram_above_4g); } - pci_hole_start = below_4g_mem_size; + pci_hole_start = m->below_4g_mem_size; pci_hole_size = c->pci_hole_end - pci_hole_start; pci_hole64_start = c->pci_hole_end + m->ram_size - pci_hole_start; diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 5d36558..e2cbc1b 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -46,6 +46,8 @@ typedef struct MemoryController { MemoryRegion ram; MemoryRegion ram_below_4g; MemoryRegion ram_above_4g; + hwaddr below_4g_mem_size; + hwaddr above_4g_mem_size; } MemoryController; void mc_update_pam(MemoryController *d); -- 1.8.3.1