From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38827) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vi4w5-0003ox-Uf for qemu-devel@nongnu.org; Sun, 17 Nov 2013 11:11:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vi4vx-0004KP-Gi for qemu-devel@nongnu.org; Sun, 17 Nov 2013 11:10:57 -0500 Received: from mail-pa0-x243.google.com ([2607:f8b0:400e:c03::243]:55779) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vi4vx-0004KL-8F for qemu-devel@nongnu.org; Sun, 17 Nov 2013 11:10:49 -0500 Received: by mail-pa0-f67.google.com with SMTP id bj1so276534pad.2 for ; Sun, 17 Nov 2013 08:10:48 -0800 (PST) From: ChenQun Date: Sun, 17 Nov 2013 08:10:24 -0800 Message-Id: <1384704624-3860-1-git-send-email-chenq009@gmail.com> Subject: [Qemu-devel] [PATCH] fix initrd load failed List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: peter.maydell@linaro.org Cc: ChenQun , qemu-devel@nongnu.org, kvmarm@lists.cs.columbia.edu Here's a bug, some examples are as follows: 1.Assuming Guest's filesystem size 6M. 2.For vexpress_a15, the loader_start = 2048M. If we set guest ram_size range from 2048M+128M to 2048M+128M+6M, then the initrd load failed. 3.For mach-virt, the loader_start = 128M. If we set guest ram_size range from 256M to 256M+6M, then it is failed too. So,it is a bug for load initrd max mem calculation. It should be (ram_size + loader_start - initrd_start). Signed-off-by: ChenQun --- hw/arm/boot.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index 583ec79..831128d 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -415,12 +415,14 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) if (info->initrd_filename) { initrd_size = load_ramdisk(info->initrd_filename, info->initrd_start, - info->ram_size - + info->ram_size + + info->loader_start - info->initrd_start); if (initrd_size < 0) { initrd_size = load_image_targphys(info->initrd_filename, info->initrd_start, - info->ram_size - + info->ram_size + + info->loader_start - info->initrd_start); } if (initrd_size < 0) { -- 1.7.9.5