From: Andrew Jones <drjones@redhat.com>
To: kvm@vger.kernel.org
Cc: lvivier@redhat.com, thuth@redhat.com, david@redhat.com,
frankja@linux.ibm.com, pbonzini@redhat.com
Subject: [PATCH kvm-unit-tests v2] arch-run: Add reserved variables to the default environ
Date: Tue, 7 Apr 2020 13:33:12 +0200 [thread overview]
Message-ID: <20200407113312.65587-1-drjones@redhat.com> (raw)
Add the already reserved (see README) variables to the default
environ. To do so neatly we rework the environ creation a bit too.
mkstandalone also learns to honor config.mak as to whether or not
to make environs, and we allow the $ERRATATXT file to be selected
at configure time.
Signed-off-by: Andrew Jones <drjones@redhat.com>
---
v2: Improve error handling of missing erratatxt files.
configure | 13 ++++-
scripts/arch-run.bash | 125 +++++++++++++++++++++++++---------------
scripts/mkstandalone.sh | 9 ++-
3 files changed, 97 insertions(+), 50 deletions(-)
diff --git a/configure b/configure
index 579765165fdf..5d2cd90cd180 100755
--- a/configure
+++ b/configure
@@ -17,6 +17,7 @@ environ_default=yes
u32_long=
vmm="qemu"
errata_force=0
+erratatxt="errata.txt"
usage() {
cat <<-EOF
@@ -37,6 +38,8 @@ usage() {
--[enable|disable]-default-environ
enable or disable the generation of a default environ when
no environ is provided by the user (enabled by default)
+ --erratatxt=FILE specify a file to use instead of errata.txt. Use
+ '--erratatxt=' to ensure no file is used.
EOF
exit 1
}
@@ -85,6 +88,9 @@ while [[ "$1" = -* ]]; do
--disable-default-environ)
environ_default=no
;;
+ --erratatxt)
+ erratatxt="$arg"
+ ;;
--help)
usage
;;
@@ -94,6 +100,11 @@ while [[ "$1" = -* ]]; do
esac
done
+if [ "$erratatxt" ] && [ ! -f "$erratatxt" ]; then
+ echo "erratatxt: $erratatxt does not exist or is not a regular file"
+ exit 1
+fi
+
arch_name=$arch
[ "$arch" = "aarch64" ] && arch="arm64"
[ "$arch_name" = "arm64" ] && arch_name="aarch64"
@@ -194,7 +205,7 @@ FIRMWARE=$firmware
ENDIAN=$endian
PRETTY_PRINT_STACKS=$pretty_print_stacks
ENVIRON_DEFAULT=$environ_default
-ERRATATXT=errata.txt
+ERRATATXT=$erratatxt
U32_LONG_FMT=$u32_long
EOF
diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
index da1a9d7871e5..8348761d86ff 100644
--- a/scripts/arch-run.bash
+++ b/scripts/arch-run.bash
@@ -28,9 +28,9 @@ run_qemu ()
{
local stdout errors ret sig
+ initrd_create || return $?
echo -n "$@"
- initrd_create &&
- echo -n " #"
+ [ "$ENVIRON_DEFAULT" = "yes" ] && echo -n " #"
echo " $INITRD"
# stdout to {stdout}, stderr to $errors and stderr
@@ -195,60 +195,91 @@ search_qemu_binary ()
initrd_create ()
{
- local ret
-
- env_add_errata
- ret=$?
+ if [ "$ENVIRON_DEFAULT" = "yes" ]; then
+ trap_exit_push 'rm -f $KVM_UNIT_TESTS_ENV; [ "$KVM_UNIT_TESTS_ENV_OLD" ] && export KVM_UNIT_TESTS_ENV="$KVM_UNIT_TESTS_ENV_OLD" || unset KVM_UNIT_TESTS_ENV; unset KVM_UNIT_TESTS_ENV_OLD'
+ [ -f "$KVM_UNIT_TESTS_ENV" ] && export KVM_UNIT_TESTS_ENV_OLD="$KVM_UNIT_TESTS_ENV"
+ export KVM_UNIT_TESTS_ENV=$(mktemp)
+ env_params
+ env_file
+ env_errata || return $?
+ fi
unset INITRD
[ -f "$KVM_UNIT_TESTS_ENV" ] && INITRD="-initrd $KVM_UNIT_TESTS_ENV"
- return $ret
+ return 0
}
-env_add_errata ()
+env_add_params ()
{
- local line errata ret=1
+ local p
- if [ -f "$KVM_UNIT_TESTS_ENV" ] && grep -q '^ERRATA_' <(env); then
- for line in $(grep '^ERRATA_' "$KVM_UNIT_TESTS_ENV"); do
- errata=${line%%=*}
- [ -n "${!errata}" ] && continue
+ for p in "$@"; do
+ if eval test -v $p; then
+ eval export "$p"
+ else
+ eval export "$p="
+ fi
+ grep "^$p=" <(env) >>$KVM_UNIT_TESTS_ENV
+ done
+}
+
+env_params ()
+{
+ local qemu have_qemu
+ local _ rest
+
+ qemu=$(search_qemu_binary) && have_qemu=1
+
+ if [ "$have_qemu" ]; then
+ if [ -n "$ACCEL" ] || [ -n "$QEMU_ACCEL" ]; then
+ [ -n "$ACCEL" ] && QEMU_ACCEL=$ACCEL
+ fi
+ QEMU_VERSION_STRING="$($qemu -h | head -1)"
+ IFS='[ .]' read -r _ _ _ QEMU_MAJOR QEMU_MINOR QEMU_MICRO rest <<<"$QEMU_VERSION_STRING"
+ fi
+ env_add_params QEMU_ACCEL QEMU_VERSION_STRING QEMU_MAJOR QEMU_MINOR QEMU_MICRO
+
+ KERNEL_VERSION_STRING=$(uname -r)
+ IFS=. read -r KERNEL_VERSION KERNEL_PATCHLEVEL rest <<<"$KERNEL_VERSION_STRING"
+ IFS=- read -r KERNEL_SUBLEVEL KERNEL_EXTRAVERSION <<<"$rest"
+ KERNEL_SUBLEVEL=${KERNEL_SUBLEVEL%%[!0-9]*}
+ KERNEL_EXTRAVERSION=${KERNEL_EXTRAVERSION%%[!0-9]*}
+ ! [[ $KERNEL_SUBLEVEL =~ ^[0-9]+$ ]] && unset $KERNEL_SUBLEVEL
+ ! [[ $KERNEL_EXTRAVERSION =~ ^[0-9]+$ ]] && unset $KERNEL_EXTRAVERSION
+ env_add_params KERNEL_VERSION_STRING KERNEL_VERSION KERNEL_PATCHLEVEL KERNEL_SUBLEVEL KERNEL_EXTRAVERSION
+}
+
+env_file ()
+{
+ local line var
+
+ [ ! -f "$KVM_UNIT_TESTS_ENV_OLD" ] && return
+
+ for line in $(grep -E '^[[:blank:]]*[[:alpha:]_][[:alnum:]_]*=' "$KVM_UNIT_TESTS_ENV_OLD"); do
+ var=${line%%=*}
+ if ! grep -q "^$var=" $KVM_UNIT_TESTS_ENV; then
eval export "$line"
- done
- elif [ ! -f "$KVM_UNIT_TESTS_ENV" ]; then
+ grep "^$var=" <(env) >>$KVM_UNIT_TESTS_ENV
+ fi
+ done
+}
+
+env_errata ()
+{
+ if [ "$ERRATATXT" ] && [ ! -f "$ERRATATXT" ]; then
+ echo "$ERRATATXT not found. (ERRATATXT=$ERRATATXT)" >&2
+ return 2
+ elif [ "$ERRATATXT" ]; then
env_generate_errata
fi
-
- if grep -q '^ERRATA_' <(env); then
- export KVM_UNIT_TESTS_ENV_OLD="$KVM_UNIT_TESTS_ENV"
- export KVM_UNIT_TESTS_ENV=$(mktemp)
- trap_exit_push 'rm -f $KVM_UNIT_TESTS_ENV; [ "$KVM_UNIT_TESTS_ENV_OLD" ] && export KVM_UNIT_TESTS_ENV="$KVM_UNIT_TESTS_ENV_OLD" || unset KVM_UNIT_TESTS_ENV; unset KVM_UNIT_TESTS_ENV_OLD'
- [ -f "$KVM_UNIT_TESTS_ENV_OLD" ] && grep -v '^ERRATA_' "$KVM_UNIT_TESTS_ENV_OLD" > $KVM_UNIT_TESTS_ENV
- grep '^ERRATA_' <(env) >> $KVM_UNIT_TESTS_ENV
- ret=0
- fi
-
- return $ret
+ sort <(env | grep '^ERRATA_') <(grep '^ERRATA_' $KVM_UNIT_TESTS_ENV) | uniq -u >>$KVM_UNIT_TESTS_ENV
}
env_generate_errata ()
{
- local kernel_version_string=$(uname -r)
- local kernel_version kernel_patchlevel kernel_sublevel kernel_extraversion
local line commit minver errata rest v p s x have
- IFS=. read -r kernel_version kernel_patchlevel rest <<<"$kernel_version_string"
- IFS=- read -r kernel_sublevel kernel_extraversion <<<"$rest"
- kernel_sublevel=${kernel_sublevel%%[!0-9]*}
- kernel_extraversion=${kernel_extraversion%%[!0-9]*}
-
- ! [[ $kernel_sublevel =~ ^[0-9]+$ ]] && unset $kernel_sublevel
- ! [[ $kernel_extraversion =~ ^[0-9]+$ ]] && unset $kernel_extraversion
-
- [ "$ENVIRON_DEFAULT" != "yes" ] && return
- [ ! -f "$ERRATATXT" ] && return
-
for line in $(grep -v '^#' "$ERRATATXT" | tr -d '[:blank:]' | cut -d: -f1,2); do
commit=${line%:*}
minver=${line#*:}
@@ -269,16 +300,16 @@ env_generate_errata ()
! [[ $s =~ ^[0-9]+$ ]] && unset $s
! [[ $x =~ ^[0-9]+$ ]] && unset $x
- if (( $kernel_version > $v ||
- ($kernel_version == $v && $kernel_patchlevel > $p) )); then
+ if (( $KERNEL_VERSION > $v ||
+ ($KERNEL_VERSION == $v && $KERNEL_PATCHLEVEL > $p) )); then
have=y
- elif (( $kernel_version == $v && $kernel_patchlevel == $p )); then
- if [ "$kernel_sublevel" ] && [ "$s" ]; then
- if (( $kernel_sublevel > $s )); then
+ elif (( $KERNEL_VERSION == $v && $KERNEL_PATCHLEVEL == $p )); then
+ if [ "$KERNEL_SUBLEVEL" ] && [ "$s" ]; then
+ if (( $KERNEL_SUBLEVEL > $s )); then
have=y
- elif (( $kernel_sublevel == $s )); then
- if [ "$kernel_extraversion" ] && [ "$x" ]; then
- if (( $kernel_extraversion >= $x )); then
+ elif (( $KERNEL_SUBLEVEL == $s )); then
+ if [ "$KERNEL_EXTRAVERSION" ] && [ "$x" ]; then
+ if (( $KERNEL_EXTRAVERSION >= $x )); then
have=y
else
have=n
diff --git a/scripts/mkstandalone.sh b/scripts/mkstandalone.sh
index c1ecb7f99cdc..9d506cc95072 100755
--- a/scripts/mkstandalone.sh
+++ b/scripts/mkstandalone.sh
@@ -36,7 +36,7 @@ generate_test ()
echo "#!/usr/bin/env bash"
echo "export STANDALONE=yes"
- echo "export ENVIRON_DEFAULT=yes"
+ echo "export ENVIRON_DEFAULT=$ENVIRON_DEFAULT"
echo "export HOST=\$(uname -m | sed -e 's/i.86/i386/;s/arm.*/arm/;s/ppc64.*/ppc64/')"
echo "export PRETTY_PRINT_STACKS=no"
@@ -59,7 +59,7 @@ generate_test ()
echo 'export FIRMWARE'
fi
- if [ "$ERRATATXT" ]; then
+ if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ]; then
temp_file ERRATATXT "$ERRATATXT"
echo 'export ERRATATXT'
fi
@@ -99,6 +99,11 @@ function mkstandalone()
echo Written $standalone.
}
+if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ] && [ ! -f "$ERRATATXT" ]; then
+ echo "$ERRATATXT not found. (ERRATATXT=$ERRATATXT)" >&2
+ exit 2
+fi
+
trap 'rm -f $cfg' EXIT
cfg=$(mktemp)
--
2.25.1
next reply other threads:[~2020-04-07 11:33 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-07 11:33 Andrew Jones [this message]
2020-04-07 15:45 ` [PATCH kvm-unit-tests v2] arch-run: Add reserved variables to the default environ Paolo Bonzini
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=20200407113312.65587-1-drjones@redhat.com \
--to=drjones@redhat.com \
--cc=david@redhat.com \
--cc=frankja@linux.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.