On 24/03/2015 22:24, Dirk Müller wrote: > +++ b/hw/arm/exynos4210.c > @@ -283,16 +283,16 @@ Exynos4210State *exynos4210_init(MemoryRegion > *system_mem, > /* DRAM */ > mem_size = ram_size; > if (mem_size > EXYNOS4210_DRAM_MAX_SIZE) { > - memory_region_init_ram(&s->dram1_mem, NULL, "exynos4210.dram1", > - mem_size - EXYNOS4210_DRAM_MAX_SIZE, &error_abort); > - vmstate_register_ram_global(&s->dram1_mem); > + unsigned long dram1_size = mem_size - EXYNOS4210_DRAM_MAX_SIZE; > + memory_region_allocate_system_memory(&s->dram1_mem, NULL, > + "exynos4210.dram1", > + dram1_size); > memory_region_add_subregion(system_mem, EXYNOS4210_DRAM1_BASE_ADDR, > &s->dram1_mem); > mem_size = EXYNOS4210_DRAM_MAX_SIZE; > } > - memory_region_init_ram(&s->dram0_mem, NULL, "exynos4210.dram0", mem_size, > - &error_abort); > - vmstate_register_ram_global(&s->dram0_mem); > + memory_region_allocate_system_memory(&s->dram0_mem, NULL, > + "exynos4210.dram0", mem_size); > memory_region_add_subregion(system_mem, EXYNOS4210_DRAM0_BASE_ADDR, > &s->dram0_mem);
You cannot call memory_region_allocate_system_memory twice. For cases like this one, the right thing to do is to create a region with memory_region_allocate_system_memory, and then replace memory_region_init_ram with memory_region_init_alias. This "slices" the region created by memory_region_allocate_system_memory. Paolo