From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50061) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YaWO5-0003ha-0p for qemu-devel@nongnu.org; Tue, 24 Mar 2015 17:29:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YaWO1-0008Ko-5d for qemu-devel@nongnu.org; Tue, 24 Mar 2015 17:29:24 -0400 Received: from mail-wg0-x229.google.com ([2a00:1450:400c:c00::229]:33104) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YaWO1-0008Ke-00 for qemu-devel@nongnu.org; Tue, 24 Mar 2015 17:29:21 -0400 Received: by wgbcc7 with SMTP id cc7so5096341wgb.0 for ; Tue, 24 Mar 2015 14:29:20 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <5511D72B.8080806@redhat.com> Date: Tue, 24 Mar 2015 22:29:15 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH for-2.3] arm: memory: Replace memory_region_init_ram with memory_region_allocate_system_memory List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?RGlyayBNw7xsbGVy?= , qemu-devel@nongnu.org Cc: Peter Maydell 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