On 8/20/21 4:39 PM, Peter Maydell wrote: > On Fri, 20 Aug 2021 at 15:34, David Hildenbrand <da...@redhat.com> wrote: >> >> On 20.08.21 16:22, Bin Meng wrote: >>> Hi Philippe, >>> >>> On Fri, Aug 20, 2021 at 10:10 PM Philippe Mathieu-Daudé >>> <phi...@redhat.com> wrote: >>>> >>>> Hi Bin, >>>> >>>> On 8/20/21 4:04 PM, Bin Meng wrote: >>>>> Hi, >>>>> >>>>> The following command used to work on QEMU 4.2.0, but is now broken >>>>> with QEMU head. >>>>> >>>>> $ qemu-system-arm -M xilinx-zynq-a9 -display none -m 40000000 >>>>> -nographic -serial /dev/null -serial mon:stdio -monitor null -device >>>>> loader,file=u-boot-dtb.bin,addr=0x4000000,cpu-num=0 >>>>> qemu-system-arm: cannot set up guest memory 'zynq.ext_ram': Cannot >>>>> allocate memory > >> -m 40000000 >> >> corresponds to 38 TB if I am not wrong. Is that really what you want? > > Probably not, because the zynq board's init function does: > > if (machine->ram_size > 2 * GiB) { > error_report("RAM size more than 2 GiB is not supported"); > exit(EXIT_FAILURE); > } > > It seems a bit daft that we allocate the memory before we do > the size check. This didn't use to be this way around... > > Anyway, I think the cause of this change is commit c9800965c1be6c39 > from Igor. We used to silently cap the RAM size to 2GB; now we > complain. Or at least we would complain if we hadn't already > tried to allocate the memory and fallen over...
Ouch... I remember having tested -M raspi2 -m 8G etc... to verify the error messages, but didn't noticed the memory was allocated. static void qemu_init_board(void) { MachineClass *machine_class = MACHINE_GET_CLASS(current_machine); if (machine_class->default_ram_id && current_machine->ram_size && numa_uses_legacy_mem() && !current_machine->ram_memdev_id) { create_default_memdev(current_machine, mem_path); // <- alloc } /* process plugin before CPUs are created ... */ qemu_plugin_load_list(&plugin_list, &error_fatal); /* From here on we enter MACHINE_PHASE_INITIALIZED. */ machine_run_board_init(current_machine); // <- Machine::init() // checks RAM size ... $ qemu-system-x86_64 -m 1T qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory