]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
keep initrd in below 4g area.
authorGlauber Costa <glommer@redhat.com>
Mon, 18 May 2009 20:35:58 +0000 (16:35 -0400)
committerAnthony Liguori <aliguori@us.ibm.com>
Wed, 20 May 2009 18:21:36 +0000 (13:21 -0500)
initrd must be kept on the memory area below 4g. By not doing this,
we're seeing guests break while using -initrd and values of -mem
superior to 4096.

Signed-off-by: Glauber Costa <glommer@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
hw/pc.c

diff --git a/hw/pc.c b/hw/pc.c
index 40486aa3692bdb8387707bc977f112b80c07a182..bf5b6e6ef0b40f7c00aa282ac98828d991d1299c 100644 (file)
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -566,7 +566,8 @@ static long get_file_size(FILE *f)
 static void load_linux(target_phys_addr_t option_rom,
                        const char *kernel_filename,
                       const char *initrd_filename,
-                      const char *kernel_cmdline)
+                      const char *kernel_cmdline,
+               target_phys_addr_t max_ram_size)
 {
     uint16_t protocol;
     uint32_t gpr[8];
@@ -632,8 +633,8 @@ static void load_linux(target_phys_addr_t option_rom,
     else
        initrd_max = 0x37ffffff;
 
-    if (initrd_max >= ram_size-ACPI_DATA_SIZE)
-       initrd_max = ram_size-ACPI_DATA_SIZE-1;
+    if (initrd_max >= max_ram_size-ACPI_DATA_SIZE)
+       initrd_max = max_ram_size-ACPI_DATA_SIZE-1;
 
     /* kernel command line */
     pstrcpy_targphys(cmdline_addr, 4096, kernel_cmdline);
@@ -930,7 +931,7 @@ vga_bios_error:
             cpu_register_physical_memory(0xd0000, TARGET_PAGE_SIZE,
                                          option_rom_offset);
             load_linux(0xd0000,
-                       kernel_filename, initrd_filename, kernel_cmdline);
+                       kernel_filename, initrd_filename, kernel_cmdline, below_4g_mem_size);
             offset = TARGET_PAGE_SIZE;
         }