[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Trouble with pc_system_firmware_init()
From: |
Jordan Justen |
Subject: |
Re: [Qemu-devel] Trouble with pc_system_firmware_init() |
Date: |
Thu, 16 Aug 2012 10:02:00 -0700 |
On Thu, Aug 16, 2012 at 4:16 AM, Markus Armbruster <address@hidden> wrote:
> I noticed a few things I'd like to discuss.
>
> 0. pc_fw_add_pflash_drv() lacks error checking, patch coming.
>
> 1. Watch this:
>
> $ qemu-system-x86_64 -nodefaults -S -vnc :0 -bios /dev/null
> Bad ram offset 8000000
> Aborted (core dumped)
>
> Backtrace:
>
> #0 0x0000003b0de35925 in raise () from /lib64/libc.so.6
> #1 0x0000003b0de370d8 in abort () from /lib64/libc.so.6
> #2 0x000000000061b606 in qemu_get_ram_ptr (addr=134217728)
> at /work/armbru/qemu/exec.c:2716
> #3 0x000000000067c71a in memory_region_get_ram_ptr (mr=0x13bb358)
> at /work/armbru/qemu/memory.c:1136
> #4 0x0000000000548b6b in pflash_cfi01_register (base=4294967296,
> qdev=0x0,
> name=0x803e3e "system.flash", size=0, bs=0x13b9940, sector_len=4096,
> nb_blocs=0, width=1, id0=0, id1=0, id2=0, id3=0, be=0)
> at /work/armbru/qemu/hw/pflash_cfi01.c:609
> #5 0x0000000000647de3 in pc_system_flash_init (rom_memory=0x13a6400,
> pflash_drv=0x13aee20) at /work/armbru/qemu/hw/i386/../pc_sysfw.c:134
> #6 0x0000000000648112 in pc_system_firmware_init (rom_memory=0x13a6400)
> at /work/armbru/qemu/hw/i386/../pc_sysfw.c:234
> #7 0x0000000000646607 in pc_memory_init (system_memory=0x138d4f0,
> kernel_filename=0x0, kernel_cmdline=0x7e6fba "", initrd_filename=0x0,
> below_4g_mem_size=134217728, above_4g_mem_size=0,
> rom_memory=0x13a6400,
> ram_memory=0x7fffffffdbe0) at /work/armbru/qemu/hw/i386/../pc.c:985
> #8 0x000000000064714a in pc_init1 (system_memory=0x138d4f0, system_io=
> 0x138d5c0, ram_size=134217728, boot_device=0x7fffffffdf00 "cad",
> kernel_filename=0x0, kernel_cmdline=0x7e6fba "", initrd_filename=0x0,
> cpu_model=0x0, pci_enabled=1, kvmclock_enabled=1)
> at /work/armbru/qemu/hw/i386/../pc_piix.c:177
> #9 0x00000000006477ed in pc_init_pci (ram_size=134217728, boot_device=
> ---Type <return> to continue, or q <return> to quit---
> 0x7fffffffdf00 "cad", kernel_filename=0x0, kernel_cmdline=0x7e6fba "",
> initrd_filename=0x0, cpu_model=0x0)
> at /work/armbru/qemu/hw/i386/../pc_piix.c:297
> #10 0x00000000005883d4 in main (argc=7, argv=0x7fffffffe138, envp=
> 0x7fffffffe178) at /work/armbru/qemu/vl.c:3571
>
> Same with an empty regular file instead of /dev/null.
Not good. Sorry if the pc_sysfw series (1b89fa) introduced this.
> Shouldn't pflash_cfi01_register() survive funny sizes? Its code to
> check the size is disabled since commit c8b153d7 "Malta flash
> support.":
>
> /* XXX: to be fixed */
> #if 0
> if (total_len != (8 * 1024 * 1024) && total_len != (16 * 1024 * 1024) &&
> total_len != (32 * 1024 * 1024) && total_len != (64 * 1024 * 1024))
> return NULL;
> #endif
>
> And why do we pass the size both as (sector_len, nb_blocs) and size?
> Since commit cfe5f011 "pflash_cfi01/pflash_cfi02: convert to memory
> API".
>
> pc_system_flash_init() rejects sizes that aren't a multiple of 4096
> (hardcoded). Why not just zero-pad up to the next muliple? If
> that's a bad idea: shouldn't size checking be left to
> pflash_cfi01_register()?
I don't think we should grow the flash size. Especially when the flash
end is aligned at 4GB.
> 2. If kvm_enabled(), we add a pflash_cfi01 device to hold the BIOS, else
> we map a ROM the old-fashioned way. Doesn't make that guest ABI depend
> on the accelerator?
KVM uses the ROM method because KVM cannot execute code from a pflash device.
I want to fix this, but so far the time I've spent investigating it
has not yielded any results.
-Jordan