[kvm-unit-tests RFC 2/2] scripts: Set ACCEL in run_tests.sh if empty

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The current checks compare the env ACCEL to the unittests.conf
provided accel. That's all fine as long as the user always specifies
the ACCEL env variable.

If that's not the case and KVM is not available or if a test specifies
tcg and we start a qemu with the kvm acceleration as it's the default
we'll run into problems.

So let's fetch the accelerator before calling the arch/run script and
check it against the test's specified accel. Yes, we now do that
twice, once in the run_tests.sh and one in arch/run, but I don't think
there's a good way around it since you can execute arch/run
without run_tests.sh.

Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx>
---
 run_tests.sh          |  6 ++++
 s390x/run             |  6 +++-
 scripts/accel.bash    | 63 +++++++++++++++++++++++++++++++++++++++++
 scripts/arch-run.bash | 66 ++-----------------------------------------
 scripts/runtime.bash  |  2 +-
 5 files changed, 77 insertions(+), 66 deletions(-)
 create mode 100644 scripts/accel.bash

diff --git a/run_tests.sh b/run_tests.sh
index 65108e73..9ccb97bd 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -10,6 +10,7 @@ if [ ! -f config.mak ]; then
 fi
 source config.mak
 source scripts/common.bash
+source scripts/accel.bash
 
 function usage()
 {
@@ -164,6 +165,11 @@ if [[ $tap_output == "yes" ]]; then
     echo "TAP version 13"
 fi
 
+qemu=$(search_qemu_binary)
+if [ -z "$ACCEL" ]; then
+    ACCEL=$(get_qemu_accelerator)
+fi
+
 trap "wait; exit 130" SIGINT
 
 (
diff --git a/s390x/run b/s390x/run
index 2ec6da70..df7ef5ca 100755
--- a/s390x/run
+++ b/s390x/run
@@ -12,8 +12,12 @@ fi
 qemu=$(search_qemu_binary) ||
 	exit $?
 
-ACCEL=$(get_qemu_accelerator) ||
+if [ -z "$DEF_ACCEL "]; then
+    ACCEL=$(get_qemu_accelerator) ||
 	exit $?
+else
+    ACCEL=$DEF_ACCEL
+fi
 
 M='-machine s390-ccw-virtio'
 M+=",accel=$ACCEL"
diff --git a/scripts/accel.bash b/scripts/accel.bash
new file mode 100644
index 00000000..ea12412a
--- /dev/null
+++ b/scripts/accel.bash
@@ -0,0 +1,63 @@
+search_qemu_binary ()
+{
+	local save_path=$PATH
+	local qemucmd qemu
+
+	export PATH=$PATH:/usr/libexec
+	for qemucmd in ${QEMU:-qemu-system-$ARCH_NAME qemu-kvm}; do
+		if $qemucmd --help 2>/dev/null | grep -q 'QEMU'; then
+			qemu="$qemucmd"
+			break
+		fi
+	done
+
+	if [ -z "$qemu" ]; then
+		echo "A QEMU binary was not found." >&2
+		echo "You can set a custom location by using the QEMU=<path> environment variable." >&2
+		return 2
+	fi
+	command -v $qemu
+	export PATH=$save_path
+}
+
+kvm_available ()
+{
+	if $($qemu -accel kvm 2> /dev/null); then
+		return 0;
+	else
+		return 1;
+	fi
+
+	[ "$HOST" = "$ARCH_NAME" ] ||
+		( [ "$HOST" = aarch64 ] && [ "$ARCH" = arm ] ) ||
+		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
+}
+
+hvf_available ()
+{
+	[ "$(sysctl -n kern.hv_support 2>/dev/null)" = "1" ] || return 1
+	[ "$HOST" = "$ARCH_NAME" ] ||
+		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
+}
+
+get_qemu_accelerator ()
+{
+	if [ "$ACCEL" = "kvm" ] && ! kvm_available; then
+		echo "KVM is needed, but not available on this host" >&2
+		return 2
+	fi
+	if [ "$ACCEL" = "hvf" ] && ! hvf_available; then
+		echo "HVF is needed, but not available on this host" >&2
+		return 2
+	fi
+
+	if [ "$ACCEL" ]; then
+		echo $ACCEL
+	elif kvm_available; then
+		echo kvm
+	elif hvf_available; then
+		echo hvf
+	else
+		echo tcg
+	fi
+}
diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
index 8cc9a61e..85c07792 100644
--- a/scripts/arch-run.bash
+++ b/scripts/arch-run.bash
@@ -24,6 +24,8 @@
 # 1..127 - FAILURE (could be QEMU, a run script, or the unittest)
 # >= 128 - Signal (signum = status - 128)
 ##############################################################################
+source scripts/accel.bash
+
 run_qemu ()
 {
 	local stdout errors ret sig
@@ -171,28 +173,6 @@ migration_cmd ()
 	fi
 }
 
-search_qemu_binary ()
-{
-	local save_path=$PATH
-	local qemucmd qemu
-
-	export PATH=$PATH:/usr/libexec
-	for qemucmd in ${QEMU:-qemu-system-$ARCH_NAME qemu-kvm}; do
-		if $qemucmd --help 2>/dev/null | grep -q 'QEMU'; then
-			qemu="$qemucmd"
-			break
-		fi
-	done
-
-	if [ -z "$qemu" ]; then
-		echo "A QEMU binary was not found." >&2
-		echo "You can set a custom location by using the QEMU=<path> environment variable." >&2
-		return 2
-	fi
-	command -v $qemu
-	export PATH=$save_path
-}
-
 initrd_create ()
 {
 	if [ "$ENVIRON_DEFAULT" = "yes" ]; then
@@ -339,45 +319,3 @@ trap_exit_push ()
 	local old_exit=$(trap -p EXIT | sed "s/^[^']*'//;s/'[^']*$//")
 	trap -- "$1; $old_exit" EXIT
 }
-
-kvm_available ()
-{
-	if $($qemu -accel kvm 2> /dev/null); then
-		return 0;
-	else
-		return 1;
-	fi
-
-	[ "$HOST" = "$ARCH_NAME" ] ||
-		( [ "$HOST" = aarch64 ] && [ "$ARCH" = arm ] ) ||
-		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
-}
-
-hvf_available ()
-{
-	[ "$(sysctl -n kern.hv_support 2>/dev/null)" = "1" ] || return 1
-	[ "$HOST" = "$ARCH_NAME" ] ||
-		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
-}
-
-get_qemu_accelerator ()
-{
-	if [ "$ACCEL" = "kvm" ] && ! kvm_available; then
-		echo "KVM is needed, but not available on this host" >&2
-		return 2
-	fi
-	if [ "$ACCEL" = "hvf" ] && ! hvf_available; then
-		echo "HVF is needed, but not available on this host" >&2
-		return 2
-	fi
-
-	if [ "$ACCEL" ]; then
-		echo $ACCEL
-	elif kvm_available; then
-		echo kvm
-	elif hvf_available; then
-		echo hvf
-	else
-		echo tcg
-	fi
-}
diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index 132389c7..5d444db4 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -30,7 +30,7 @@ premature_failure()
 get_cmdline()
 {
     local kernel=$1
-    echo "TESTNAME=$testname TIMEOUT=$timeout ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts"
+    echo "TESTNAME=$testname TIMEOUT=$timeout DEF_ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts"
 }
 
 skip_nodefault()
-- 
2.27.0




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux