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? $ 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}