From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LncMG-0003Ot-OB for qemu-devel@nongnu.org; Sat, 28 Mar 2009 13:30:12 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LncMC-0003Od-2p for qemu-devel@nongnu.org; Sat, 28 Mar 2009 13:30:12 -0400 Received: from [199.232.76.173] (port=57032 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LncMC-0003Oa-0G for qemu-devel@nongnu.org; Sat, 28 Mar 2009 13:30:08 -0400 Received: from e9.ny.us.ibm.com ([32.97.182.139]:45249) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LncMB-0006H2-MM for qemu-devel@nongnu.org; Sat, 28 Mar 2009 13:30:07 -0400 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e9.ny.us.ibm.com (8.13.1/8.13.1) with ESMTP id n2SHKj36004672 for ; Sat, 28 Mar 2009 13:20:45 -0400 Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n2SHU7K4187318 for ; Sat, 28 Mar 2009 13:30:07 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n2SHU6Kn024216 for ; Sat, 28 Mar 2009 13:30:07 -0400 Message-ID: <49CE5E9D.2040909@us.ibm.com> Date: Sat, 28 Mar 2009 12:30:05 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] get roms more room. References: <1238214323-3226-1-git-send-email-glommer@redhat.com> In-Reply-To: <1238214323-3226-1-git-send-email-glommer@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: c-d.hailfinger.devel.2006@gmx.net Glauber Costa wrote: > This patch increases by 50 % the size available for option roms. > The main motivator is that some roms grew bigger than the 64k we > currently allocate for them (Hey, it's 2009!) > > One example is the gpxe project, that produces some roms with 69k, > 70k, etc. The space proposed by this patch actually makes it as > big as 84k. Probably still a fit for some time. > > But there is no free lunch. This space must come from somewhere, > and we take it from vga rom space. Currently, our vga roms are > around 35k in size. With this patch, option rom space will begin > just after vga ends, aligned to the next 2k boundary. > > Technicaly, we could do the same with the uper space (the bios itself), > but since bochs bios is already 128 k in size, I don't see an > urgent need to do it. > > [ fix case for vgabioses smaller than 30k, by Carl-Daniel Hailfinger ] > > Signed-off-by: Glauber Costa > Applied. Thanks. Sounds like it's time to switch to gpxe roms. I wonder what ever happened to the gpxe virtio-blk patches... Regards, Anthony Liguori > --- > hw/pc.c | 29 +++++++++++++++++++---------- > 1 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/hw/pc.c b/hw/pc.c > index 69f25f3..f9cfd1f 100644 > --- a/hw/pc.c > +++ b/hw/pc.c > @@ -763,7 +763,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, > { > char buf[1024]; > int ret, linux_boot, i; > - ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset; > + ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset, option_rom_start = 0; > ram_addr_t below_4g_mem_size, above_4g_mem_size = 0; > int bios_size, isa_bios_size, vga_bios_size; > PCIBus *pci_bus; > @@ -774,6 +774,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, > int index; > BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; > BlockDriverState *fd[MAX_FD]; > + int using_vga = cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled; > > if (ram_size >= 0xe0000000 ) { > above_4g_mem_size = ram_size - 0xe0000000; > @@ -856,7 +857,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, > exit(1); > } > > - if (cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled) { > + if (using_vga) { > /* VGA BIOS load */ > if (cirrus_vga_enabled) { > snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_CIRRUS_FILENAME); > @@ -874,12 +875,21 @@ vga_bios_error: > fprintf(stderr, "qemu: could not load VGA BIOS '%s'\n", buf); > exit(1); > } > + /* Round up vga bios size to the next 2k boundary */ > + vga_bios_size = (vga_bios_size + 2047) & ~2047; > + option_rom_start = 0xc0000 + vga_bios_size; > > /* setup basic memory access */ > - cpu_register_physical_memory(0xc0000, 0x10000, > + cpu_register_physical_memory(0xc0000, vga_bios_size, > vga_bios_offset | IO_MEM_ROM); > } > > + /* No point in placing option roms before this address, since bochs bios > + * will only start looking for it at 0xc8000 */ > + if (option_rom_start < 0xc8000) > + option_rom_start = 0xc8000; > + > + > /* map the last 128KB of the BIOS in ISA space */ > isa_bios_size = bios_size; > if (isa_bios_size > (128 * 1024)) > @@ -892,14 +902,14 @@ vga_bios_error: > ram_addr_t option_rom_offset; > int size, offset; > > - offset = 0; > + offset = option_rom_start; > if (linux_boot) { > option_rom_offset = qemu_ram_alloc(TARGET_PAGE_SIZE); > load_linux(phys_ram_base + option_rom_offset, > kernel_filename, initrd_filename, kernel_cmdline); > - cpu_register_physical_memory(0xd0000, TARGET_PAGE_SIZE, > + cpu_register_physical_memory(option_rom_start, TARGET_PAGE_SIZE, > option_rom_offset | IO_MEM_ROM); > - offset = TARGET_PAGE_SIZE; > + offset += TARGET_PAGE_SIZE; > } > > for (i = 0; i < nb_option_roms; i++) { > @@ -909,18 +919,17 @@ vga_bios_error: > option_rom[i]); > exit(1); > } > - if (size > (0x10000 - offset)) > + if (size > (0xe0000 - offset)) > goto option_rom_error; > option_rom_offset = qemu_ram_alloc(size); > ret = load_image(option_rom[i], phys_ram_base + option_rom_offset); > if (ret != size) { > option_rom_error: > - fprintf(stderr, "Too many option ROMS\n"); > + fprintf(stderr, "Could not fit %soption roms in available space\n", using_vga ? "VGA bios and " : ""); > exit(1); > } > size = (size + 4095) & ~4095; > - cpu_register_physical_memory(0xd0000 + offset, > - size, option_rom_offset | IO_MEM_ROM); > + cpu_register_physical_memory(offset, size, option_rom_offset | IO_MEM_ROM); > offset += size; > } > } >