From: Janosch Frank <frankja@linux.ibm.com>
To: kvm@vger.kernel.org
Cc: lvivier@redhat.com, thuth@redhat.com, david@redhat.com,
drjones@redhat.com, pbonzini@redhat.com, cohuck@redhat.com
Subject: [kvm-unit-tests RFC 2/2] scripts: Set ACCEL in run_tests.sh if empty
Date: Thu, 18 Mar 2021 12:45:00 +0000 [thread overview]
Message-ID: <20210318124500.45447-3-frankja@linux.ibm.com> (raw)
In-Reply-To: <20210318124500.45447-1-frankja@linux.ibm.com>
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@linux.ibm.com>
---
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
next prev parent reply other threads:[~2021-03-18 12:45 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-18 12:44 [kvm-unit-tests RFC 0/2] scripts: Fix accel handling Janosch Frank
2021-03-18 12:44 ` [kvm-unit-tests RFC 1/2] scripts: Check kvm availability by asking qemu Janosch Frank
2021-03-18 14:18 ` Andrew Jones
2021-03-18 15:31 ` Andrew Jones
2021-03-18 15:39 ` Janosch Frank
2021-03-24 14:11 ` Janosch Frank
2021-03-18 12:45 ` Janosch Frank [this message]
2021-03-18 15:42 ` [kvm-unit-tests RFC 2/2] scripts: Set ACCEL in run_tests.sh if empty Andrew Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210318124500.45447-3-frankja@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=drjones@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox