From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:60809) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QAQCA-0005ew-MV for qemu-devel@nongnu.org; Thu, 14 Apr 2011 13:19:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QAQC9-00005w-Hs for qemu-devel@nongnu.org; Thu, 14 Apr 2011 13:19:06 -0400 Received: from moutng.kundenserver.de ([212.227.126.171]:50547) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QAQC9-00005s-6C for qemu-devel@nongnu.org; Thu, 14 Apr 2011 13:19:05 -0400 From: Stefan Weil Date: Thu, 14 Apr 2011 19:19:00 +0200 Message-Id: <1302801540-10491-1-git-send-email-weil@mail.berlios.de> Subject: [Qemu-devel] [PATCH] sparc: Fix assertion caused by empty memory slot with 0 byte List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers Cc: Blue Swirl If the memory size given on the command line is equal to the maximum size of memory defined by the hardware, there is no "empty slot" after physical memory. The following command qemu-system-sparc -m 256 raised an assertion: exec.c:2614: cpu_register_physical_memory_offset: Assertion `size' failed This can be fixed either at the caller side (don't call empty_slot_init) or in empty_slot_init (do nothing) when size == 0. The second solution was choosen here because it is more robust. Signed-off-by: Stefan Weil --- hw/empty_slot.c | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-) diff --git a/hw/empty_slot.c b/hw/empty_slot.c index 664b8d9..da8adc4 100644 --- a/hw/empty_slot.c +++ b/hw/empty_slot.c @@ -53,18 +53,21 @@ static CPUWriteMemoryFunc * const empty_slot_write[3] = { void empty_slot_init(target_phys_addr_t addr, uint64_t slot_size) { - DeviceState *dev; - SysBusDevice *s; - EmptySlot *e; + if (slot_size > 0) { + /* Only empty slots larger than 0 byte need handling. */ + DeviceState *dev; + SysBusDevice *s; + EmptySlot *e; - dev = qdev_create(NULL, "empty_slot"); - s = sysbus_from_qdev(dev); - e = FROM_SYSBUS(EmptySlot, s); - e->size = slot_size; + dev = qdev_create(NULL, "empty_slot"); + s = sysbus_from_qdev(dev); + e = FROM_SYSBUS(EmptySlot, s); + e->size = slot_size; - qdev_init_nofail(dev); + qdev_init_nofail(dev); - sysbus_mmio_map(s, 0, addr); + sysbus_mmio_map(s, 0, addr); + } } static int empty_slot_init1(SysBusDevice *dev) -- 1.7.2.5