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@xxxxxxxxxx> --- configure | 12 +++- scripts/arch-run.bash | 120 ++++++++++++++++++++++++---------------- scripts/mkstandalone.sh | 4 +- 3 files changed, 86 insertions(+), 50 deletions(-) diff --git a/configure b/configure index 579765165fdf..5e858899987c 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,7 @@ 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 EOF exit 1 } @@ -85,6 +87,9 @@ while [[ "$1" = -* ]]; do --disable-default-environ) environ_default=no ;; + --erratatxt) + erratatxt="$arg" + ;; --help) usage ;; @@ -94,6 +99,11 @@ while [[ "$1" = -* ]]; do esac done +if [ ! -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 +204,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..12bd62399a14 100644 --- a/scripts/arch-run.bash +++ b/scripts/arch-run.bash @@ -29,8 +29,8 @@ run_qemu () local stdout errors ret sig echo -n "$@" - initrd_create && - echo -n " #" + initrd_create + [ "$ENVIRON_DEFAULT" = "yes" ] && echo -n " #" echo " $INITRD" # stdout to {stdout}, stderr to $errors and stderr @@ -195,60 +195,86 @@ 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 + fi unset INITRD [ -f "$KVM_UNIT_TESTS_ENV" ] && INITRD="-initrd $KVM_UNIT_TESTS_ENV" +} + +env_add_params () +{ + local p + + 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 +} - return $ret +env_params () +{ + local qemu have_qemu + local t1 t2 t3 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 t1 t2 t3 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_add_errata () +env_file () { - local line errata ret=1 + local line var + + [ ! -f "$KVM_UNIT_TESTS_ENV_OLD" ] && return - 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 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 [ -f "$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 +295,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..96158b015e78 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 -- 2.25.1