diff --git a/repos/gems/run/depot_autopilot.run b/repos/gems/run/depot_autopilot.run index 060a31fe4e..bbc8c0cac3 100644 --- a/repos/gems/run/depot_autopilot.run +++ b/repos/gems/run/depot_autopilot.run @@ -456,7 +456,7 @@ proc prepare_to_run_genode { } { set serial_id -1 set timeout 40 - append qemu_args "-m 800 -nographic " + append qemu_args " -nographic " } diff --git a/tool/run/power_on/qemu b/tool/run/power_on/qemu index 39bc704c0b..48cd20f0e2 100644 --- a/tool/run/power_on/qemu +++ b/tool/run/power_on/qemu @@ -124,28 +124,33 @@ proc run_power_on { } { # on x86, we support booting via pxe or iso/disk image if {[have_board pc]} { - if {[have_spec okl4]} { - # okl4 system integration specifies RAM from 32 to 800 MiB - set qemu_ram 800 - } else { - set qemu_ram 512 - } - if {[regexp -- {-m} $qemu_args dummy]} { - set qemu_ram [regexp -inline {\-m.[0-9]+} $qemu_args] - set qemu_ram [regexp -inline {[0-9]+} $qemu_ram] - } - - if {[have_spec okl4]} { - if {$qemu_ram < 800} { - puts "Configured memory ($qemu_ram) for OKL4 on Qemu must be at least 800M\n" + if {[regexp -- {-m\s+} $qemu_args dummy]} { + # can be -m 1024 or -m 1024G or -m size=1024G + set qemu_ram [regexp -inline {\-m\s+\S+} $qemu_args] + if {![regexp {([0-9]+)([MG]?)} $qemu_ram dummy qemu_ram ram_unit]} { + puts "Cannot parse memory argument ($qemu_ram)\n" exit 1 } + + if { $ram_unit == "G" } { + set qemu_ram [expr {$qemu_ram*1024}] } + + if {[have_spec okl4]} { + if {$qemu_ram < 800} { + puts "Configured memory ($qemu_ram) for OKL4 on Qemu must be at least 800M\n" + exit 1 + } + } + } else { + ## + # append memory argument if not present, 800M is a sane default because: + # - 800M is minimum for OKL4 + # - 768M is required for certain test cases (#3387) + # + append qemu_args " -m 800 " } - append qemu_args " -m $qemu_ram " - - if {[have_include "load/tftp"]} { append qemu_args " -boot n -tftp [run_dir] -bootp boot/pulsar -no-reboot -no-shutdown " } else {