## assumptions.
##
-# With qemu-system-aarch64 the machine should be defined even for simple
-# commands like querying the list of devices.
-args=("-machine")
-args+=("virt,gic-version=3")
+# Default to virt machine, forcing a gic version 3 to support more than 8 vcpus
+machine="virt,gic-version=3"
# We want to always enable KVM. Contrary to what the Ganeti's documentation
# says, enabling kvm_flag is not enough.
while [ "$1" ]; do
case "$1" in
-machine|-M)
- # Ignore the machine argument (it is already defined above),
+ # Ignore the machine argument (it will be defined below),
# except when querying the list of machines
if [ "$2" = "?" ] ; then
args+=("-M")
fi
shift
;;
+ -cpu)
+ # Check if the CPU is configured to run in 32-bit mode and
+ # force the gvic to version 2 in that case
+ args+=("$1")
+ args+=("$2")
+ if echo "$2" | egrep -q '(^|,)aarch64=off(,|$)' ; then
+ machine="virt,gic-version=2"
+ fi
+ shift
+ ;;
*)
# Replace PCI devices by their bus agnostic variant, and drop
# all the PCI related options
shift
done
+# With qemu-system-aarch64 the machine should be defined even for simple
+# commands like querying the list of devices.
+args+=("-machine")
+args+=($machine)
+
+# Start qemu-system-aarch64 with the mangled arguments
exec /usr/bin/qemu-system-aarch64 "${args[@]}"