xref: /kvm-unit-tests/arm/run (revision 0601b85c251059810a0a617a60c758a48084279e)
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