15e61cba0SAndrew Jones#!/bin/bash 25e61cba0SAndrew Jones 35e61cba0SAndrew Jonesif [ ! -f config.mak ]; then 45e61cba0SAndrew Jones echo run ./configure first. See ./configure -h 55e61cba0SAndrew Jones exit 2 65e61cba0SAndrew Jonesfi 75e61cba0SAndrew Jonessource config.mak 839ac3f84SAndrew Jonesprocessor="$PROCESSOR" 95e61cba0SAndrew Jones 10*0601b85cSAndrew Jonesif [ -c /dev/kvm ]; then 11*0601b85cSAndrew Jones if [ "$HOST" = "arm" ] && [ "$ARCH" = "arm" ]; then 12*0601b85cSAndrew Jones kvm_available=yes 13*0601b85cSAndrew Jones elif [ "$HOST" = "aarch64" ]; then 14*0601b85cSAndrew Jones kvm_available=yes 15*0601b85cSAndrew Jones fi 16*0601b85cSAndrew Jonesfi 17*0601b85cSAndrew Jones 18*0601b85cSAndrew Jonesif [ "$ACCEL" = "kvm" ] && [ "$kvm_available" != "yes" ] && 19*0601b85cSAndrew Jones [ "$DRYRUN" != "yes" ]; then 20*0601b85cSAndrew Jones printf "skip $TESTNAME (kvm only)\n\n" 21*0601b85cSAndrew Jones exit 2 22*0601b85cSAndrew Jonesfi 23*0601b85cSAndrew Jones 24*0601b85cSAndrew Jonesif [ -z "$ACCEL" ]; then 25*0601b85cSAndrew Jones if [ "$DRYRUN" = "yes" ]; then 26*0601b85cSAndrew Jones # Output kvm with tcg fallback for dryrun (when both are 27*0601b85cSAndrew Jones # allowed), since the command line we output may get used 28*0601b85cSAndrew Jones # elsewhere. 29*0601b85cSAndrew Jones ACCEL="kvm:tcg" 30*0601b85cSAndrew Jones elif [ "$kvm_available" = "yes" ]; then 31*0601b85cSAndrew Jones ACCEL="kvm" 32*0601b85cSAndrew Jones else 33*0601b85cSAndrew Jones ACCEL="tcg" 34*0601b85cSAndrew Jones fi 35*0601b85cSAndrew Jonesfi 36*0601b85cSAndrew Jones 37*0601b85cSAndrew Jonesif [ "$ARCH" = "arm64" ]; then 38*0601b85cSAndrew Jones if [[ $ACCEL =~ kvm ]]; then 39*0601b85cSAndrew Jones # arm64 must use '-cpu host' with kvm, and we can't use 40*0601b85cSAndrew Jones # '-cpu host' with tcg, so we force kvm-only (no fallback) 41*0601b85cSAndrew Jones ACCEL="kvm" 42*0601b85cSAndrew Jones processor="host" 43*0601b85cSAndrew Jones fi 44*0601b85cSAndrew Jonesfi 45*0601b85cSAndrew Jones 4639ac3f84SAndrew Jonesqemu="${QEMU:-qemu-system-$ARCH_NAME}" 475e61cba0SAndrew Jonesqpath=$(which $qemu 2>/dev/null) 485e61cba0SAndrew Jones 495e61cba0SAndrew Jonesif [ -z "$qpath" ]; then 505e61cba0SAndrew Jones echo $qemu not found. 515e61cba0SAndrew Jones exit 2 525e61cba0SAndrew Jonesfi 535e61cba0SAndrew Jones 545e61cba0SAndrew Jonesif ! $qemu -machine '?' 2>&1 | grep 'ARM Virtual Machine' > /dev/null; then 555e61cba0SAndrew Jones echo "$qpath doesn't support mach-virt ('-machine virt'). Exiting." 565e61cba0SAndrew Jones exit 2 575e61cba0SAndrew Jonesfi 585e61cba0SAndrew Jones 595e61cba0SAndrew JonesM='-machine virt' 605e61cba0SAndrew Jones 615e61cba0SAndrew Jonesif ! $qemu $M -device '?' 2>&1 | grep virtconsole > /dev/null; then 625e61cba0SAndrew Jones echo "$qpath doesn't support virtio-console for chr-testdev. Exiting." 635e61cba0SAndrew Jones exit 2 645e61cba0SAndrew Jonesfi 655e61cba0SAndrew Jones 66b6f901ceSAndrew Jonesif $qemu $M -chardev testdev,id=id -initrd . 2>&1 \ 675e61cba0SAndrew Jones | grep backend > /dev/null; then 685e61cba0SAndrew Jones echo "$qpath doesn't support chr-testdev. Exiting." 695e61cba0SAndrew Jones exit 2 705e61cba0SAndrew Jonesfi 715e61cba0SAndrew Jones 725e61cba0SAndrew Joneschr_testdev='-device virtio-serial-device' 735e61cba0SAndrew Joneschr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd' 745e61cba0SAndrew Jones 75*0601b85cSAndrew JonesM+=",accel=$ACCEL" 7639ac3f84SAndrew Jonescommand="$qemu $M -cpu $processor $chr_testdev" 775e61cba0SAndrew Jonescommand+=" -display none -serial stdio -kernel" 785e61cba0SAndrew Jonesecho $command "$@" 7992a1afcbSAndrew Jones 8092a1afcbSAndrew Jonesif [ "$DRYRUN" != "yes" ]; then 815e61cba0SAndrew Jones $command "$@" 825e61cba0SAndrew Jones ret=$? 835e61cba0SAndrew Jones echo Return value from qemu: $ret 845e61cba0SAndrew Jones exit $ret 8592a1afcbSAndrew Jonesfi 86