11b7dd7d3SSergey Bronnikov#!/usr/bin/env bash 25e61cba0SAndrew Jones 357ab5a6dSThomas Huthif [ -z "$KUT_STANDALONE" ]; then 45e61cba0SAndrew Jones if [ ! -f config.mak ]; then 5b6ff178dSAndrew Jones echo "run ./configure && make first. See ./configure -h" 65e61cba0SAndrew Jones exit 2 75e61cba0SAndrew Jones fi 85e61cba0SAndrew Jones source config.mak 9b2a2aa5dSAndrew Jones source scripts/arch-run.bash 109fcec1dbSAlexandru Elisei source scripts/vmm.bash 11b6ff178dSAndrew Jonesfi 129fcec1dbSAlexandru Elisei 139fcec1dbSAlexandru Eliseivmm_check_supported 149fcec1dbSAlexandru Elisei 15*db9c4e1cSAlexandru Eliseifunction arch_run_qemu() 16*db9c4e1cSAlexandru Elisei{ 175f77b72dSJean-Philippe Brucker qemu_cpu="$TARGET_CPU" 185e61cba0SAndrew Jones 1901e047d0SGavin Shan if [ "$QEMU" ] && [ -z "$ACCEL" ] && 2001e047d0SGavin Shan [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] && 2101e047d0SGavin Shan [ "$(basename $QEMU)" = "qemu-system-arm" ]; then 2201e047d0SGavin Shan ACCEL="tcg" 2301e047d0SGavin Shan fi 240601b85cSAndrew Jones 2501e047d0SGavin Shan set_qemu_accelerator || exit $? 2601e047d0SGavin Shan if [ "$ACCEL" = "kvm" ]; then 27ee5a8a1aSAndrew Jones QEMU_ARCH=$HOST 28ee5a8a1aSAndrew Jones fi 29ee5a8a1aSAndrew Jones 30fcf4e0d9SRadim Krčmář qemu=$(search_qemu_binary) || 31fcf4e0d9SRadim Krčmář exit $? 325e61cba0SAndrew Jones 33d5be1090SShaoqin Huang if ! $qemu -machine '?' | grep -q 'ARM Virtual Machine'; then 344b968505SBalamuruhan S echo "$qemu doesn't support mach-virt ('-machine virt'). Exiting." 355e61cba0SAndrew Jones exit 2 365e61cba0SAndrew Jones fi 375e61cba0SAndrew Jones 385e61cba0SAndrew Jones M='-machine virt' 395e61cba0SAndrew Jones 40d9729025SAndrew Jones if [ "$ACCEL" = "kvm" ]; then 41d5be1090SShaoqin Huang if $qemu $M,\? | grep -q gic-version; then 42d9729025SAndrew Jones M+=',gic-version=host' 43d9729025SAndrew Jones fi 44c157b6e2SNikos Nikoleris fi 45c157b6e2SNikos Nikoleris 465f77b72dSJean-Philippe Brucker if [ -z "$qemu_cpu" ]; then 475f77b72dSJean-Philippe Brucker if ( [ "$ACCEL" = "kvm" ] || [ "$ACCEL" = "hvf" ] ) && 485f77b72dSJean-Philippe Brucker ( [ "$HOST" = "aarch64" ] || [ "$HOST" = "arm" ] ); then 495f77b72dSJean-Philippe Brucker qemu_cpu="host" 5067c2cc50SAlex Bennée if [ "$ARCH" = "arm" ] && [ "$HOST" = "aarch64" ]; then 515f77b72dSJean-Philippe Brucker qemu_cpu+=",aarch64=off" 52d9729025SAndrew Jones fi 535f77b72dSJean-Philippe Brucker else 545f77b72dSJean-Philippe Brucker qemu_cpu="$DEFAULT_QEMU_CPU" 55d9729025SAndrew Jones fi 56d9729025SAndrew Jones fi 57d9729025SAndrew Jones 581f0a5c19SAndrew Jones if [ "$ARCH" = "arm" ]; then 591f0a5c19SAndrew Jones M+=",highmem=off" 601f0a5c19SAndrew Jones fi 611f0a5c19SAndrew Jones 62d5be1090SShaoqin Huang if ! $qemu $M -device '?' | grep -q virtconsole; then 634b968505SBalamuruhan S echo "$qemu doesn't support virtio-console for chr-testdev. Exiting." 645e61cba0SAndrew Jones exit 2 655e61cba0SAndrew Jones fi 665e61cba0SAndrew Jones 6729e06611SShaoqin Huang if ! $qemu $M -chardev '?' | grep -q testdev; then 684b968505SBalamuruhan S echo "$qemu doesn't support chr-testdev. Exiting." 695e61cba0SAndrew Jones exit 2 705e61cba0SAndrew Jones fi 715e61cba0SAndrew Jones 725ded2989SAndrew Jones if [ "$UEFI_SHELL_RUN" != "y" ] && [ "$EFI_USE_ACPI" != "y" ]; then 735e61cba0SAndrew Jones chr_testdev='-device virtio-serial-device' 745e61cba0SAndrew Jones chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd' 752607d2d6SNikos Nikoleris fi 765e61cba0SAndrew Jones 77f7f81c6aSAlexander Gordeev pci_testdev= 78d5be1090SShaoqin Huang if $qemu $M -device '?' | grep -q pci-testdev; then 79f7f81c6aSAlexander Gordeev pci_testdev="-device pci-testdev" 80f7f81c6aSAlexander Gordeev fi 81f7f81c6aSAlexander Gordeev 8201e047d0SGavin Shan A="-accel $ACCEL$ACCEL_PROPS" 835f77b72dSJean-Philippe Brucker command="$qemu -nodefaults $M $A -cpu $qemu_cpu $chr_testdev $pci_testdev" 842607d2d6SNikos Nikoleris command+=" -display none -serial stdio" 8541c0f78cSEric Auger command="$(migration_cmd) $(timeout_cmd) $command" 8692a1afcbSAndrew Jones 8763c60156SAndrew Jones if [ "$UEFI_SHELL_RUN" = "y" ]; then 88*db9c4e1cSAlexandru Elisei ENVIRON_DEFAULT=n run_test_status $command "$@" 895ded2989SAndrew Jones elif [ "$EFI_USE_ACPI" = "y" ]; then 90*db9c4e1cSAlexandru Elisei run_test_status $command -kernel "$@" 912607d2d6SNikos Nikoleris else 92*db9c4e1cSAlexandru Elisei run_test $command -kernel "$@" 932607d2d6SNikos Nikoleris fi 94*db9c4e1cSAlexandru Elisei} 95*db9c4e1cSAlexandru Elisei 96*db9c4e1cSAlexandru Eliseifunction arch_run_kvmtool() 97*db9c4e1cSAlexandru Elisei{ 98*db9c4e1cSAlexandru Elisei local command 99*db9c4e1cSAlexandru Elisei 100*db9c4e1cSAlexandru Elisei kvmtool=$(search_kvmtool_binary) || 101*db9c4e1cSAlexandru Elisei exit $? 102*db9c4e1cSAlexandru Elisei 103*db9c4e1cSAlexandru Elisei if [ "$ACCEL" ] && [ "$ACCEL" != "kvm" ]; then 104*db9c4e1cSAlexandru Elisei echo "kvmtool does not support $ACCEL" >&2 105*db9c4e1cSAlexandru Elisei exit 2 106*db9c4e1cSAlexandru Elisei fi 107*db9c4e1cSAlexandru Elisei 108*db9c4e1cSAlexandru Elisei if ! kvm_available; then 109*db9c4e1cSAlexandru Elisei echo "kvmtool requires KVM but not available on the host" >&2 110*db9c4e1cSAlexandru Elisei exit 2 111*db9c4e1cSAlexandru Elisei fi 112*db9c4e1cSAlexandru Elisei 113*db9c4e1cSAlexandru Elisei command="$(timeout_cmd) $kvmtool run" 114*db9c4e1cSAlexandru Elisei if [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ]; then 115*db9c4e1cSAlexandru Elisei run_test_status $command --kernel "$@" --aarch32 116*db9c4e1cSAlexandru Elisei else 117*db9c4e1cSAlexandru Elisei run_test_status $command --kernel "$@" 118*db9c4e1cSAlexandru Elisei fi 119*db9c4e1cSAlexandru Elisei} 120*db9c4e1cSAlexandru Elisei 121*db9c4e1cSAlexandru Eliseicase $(vmm_get_target) in 122*db9c4e1cSAlexandru Eliseiqemu) 123*db9c4e1cSAlexandru Elisei arch_run_qemu "$@" 124*db9c4e1cSAlexandru Elisei ;; 125*db9c4e1cSAlexandru Eliseikvmtool) 126*db9c4e1cSAlexandru Elisei arch_run_kvmtool "$@" 127*db9c4e1cSAlexandru Elisei ;; 128*db9c4e1cSAlexandru Eliseiesac 129