On Wed, Jul 25, 2012 at 11:49 AM, Markus Armbruster <arm...@redhat.com> wrote: > Asking for "funny" memory sizes sometimes crashes for me. For instance > -m 0.8 or the equivalent -m 838860b. -m 0.7 appears to work. > > Should we round memory sizes? How? Where?
We had a discussion about this recently: http://lists.nongnu.org/archive/html/qemu-devel/2012-06/msg02800.html > > > > $ gdb --args qemu-system-x86_64 -nodefaults --enable-kvm -S -vnc :0 -monitor > stdio -m 0.8 > [...] > (gdb) r > Starting program: /home/armbru/bin/upstream-qemu -nodefaults --enable-kvm -S > -vnc :0 -monitor stdio -m 0.8 > [Thread debugging using libthread_db enabled] > Using host libthread_db library "/lib64/libthread_db.so.1". > [New Thread 0x7ffff6efe700 (LWP 29525)] > upstream-qemu: /work/armbru/qemu/exec.c:2263: register_subpage: Assertion > `existing->mr->subpage || existing->mr == &io_mem_unassigned' failed. > > Program received signal SIGABRT, Aborted. > 0x00000033e0835965 in raise () from /lib64/libc.so.6 > [...] > (gdb) bt > #0 0x00000033e0835965 in raise () from /lib64/libc.so.6 > #1 0x00000033e0837118 in abort () from /lib64/libc.so.6 > #2 0x00000033e082e6e2 in __assert_fail_base () from /lib64/libc.so.6 > #3 0x00000033e082e792 in __assert_fail () from /lib64/libc.so.6 > #4 0x00000000006078fa in register_subpage (section=0x7fffffffd4e0) > at /work/armbru/qemu/exec.c:2263 > #5 0x0000000000607b55 in cpu_register_physical_memory_log (section= > 0x7fffffffd6a0, readonly=false) at /work/armbru/qemu/exec.c:2303 > #6 0x0000000000609d1c in core_region_nop (listener=0xac5e60, section= > 0x7fffffffd6a0) at /work/armbru/qemu/exec.c:3183 > #7 0x0000000000667a58 in address_space_update_topology_pass (as=0x12fdca0, > old_view=..., new_view=..., adding=true) at /work/armbru/qemu/memory.c:693 > #8 0x0000000000668045 in address_space_update_topology (as=0x12fdca0) > at /work/armbru/qemu/memory.c:722 > #9 0x0000000000668147 in memory_region_update_topology (mr=0x0) > at /work/armbru/qemu/memory.c:743 > #10 0x0000000000668252 in memory_region_transaction_commit () > at /work/armbru/qemu/memory.c:764 > #11 0x0000000000636612 in i440fx_update_memory_mappings (d=0x13a9310) > at /work/armbru/qemu/hw/i386/../piix_pci.c:155 > #12 0x0000000000636db6 in i440fx_common_init (device_name=0x7ea470 "i440FX", > pi440fx_state=0x7fffffffdb98, piix3_devfn=0x7fffffffdb88, isa_bus= > 0x7fffffffdb90, pic=0x13a49c0, address_space_mem=0x1381150, > address_space_io=0x1381220, ram_size=0, pci_hole_start=838860, > pci_hole_size=4294128436, pci_hole64_start=4294967296, pci_hole64_size= > 4611686018427387904, pci_address_space=0x13a4200, ram_memory=0x13a42b0) > at /work/armbru/qemu/hw/i386/../piix_pci.c:330 > #13 0x0000000000636ea8 in i440fx_init (pi440fx_state=0x7fffffffdb98, > piix3_devfn=0x7fffffffdb88, isa_bus=0x7fffffffdb90, pic=0x13a49c0, > address_space_mem=0x1381150, address_space_io=0x1381220, ram_size=838860, > pci_hole_start=838860, pci_hole_size=4294128436, pci_hole64_start= > 4294967296, pci_hole64_size=4611686018427387904, pci_memory=0x13a4200, > ram_memory=0x13a42b0) at /work/armbru/qemu/hw/i386/../piix_pci.c:349 > #14 0x000000000063469b in pc_init1 (system_memory=0x1381150, system_io= > 0x1381220, ram_size=838860, boot_device=0x7fffffffdee0 "cad", > kernel_filename=0x0, kernel_cmdline=0x7cad82 "", initrd_filename=0x0, > cpu_model=0x0, pci_enabled=1, kvmclock_enabled=1) > at /work/armbru/qemu/hw/i386/../pc_piix.c:193 > #15 0x0000000000634c0e in pc_init_pci (ram_size=838860, boot_device= > 0x7fffffffdee0 "cad", kernel_filename=0x0, kernel_cmdline=0x7cad82 "", > initrd_filename=0x0, cpu_model=0x0) > at /work/armbru/qemu/hw/i386/../pc_piix.c:297 > #16 0x000000000057a89e in main (argc=10, argv=0x7fffffffe118, envp= > 0x7fffffffe170) at /work/armbru/qemu/vl.c:3520 > (gdb) up 4 > #4 0x00000000006078fa in register_subpage (section=0x7fffffffd4e0) > at /work/armbru/qemu/exec.c:2263 > 2263 assert(existing->mr->subpage || existing->mr == > &io_mem_unassigned); > (gdb) p/x *section > $1 = {mr = 0x1399860, address_space = 0x1381150, offset_within_region = > 0xcccc, size = 0x334, offset_within_address_space = 0xccccc, readonly = > 0x0} >