Provide a table mapping errata to minimum kernel versions and a function that will use the host's kernel version to determine the values for each errata variable. These errata variables, with values based on the host kernel, are now provided to all unit tests by default, if no environ is provided. Errata variables passed from the run script environment still take precedence. Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> --- configure | 11 +++++++++++ errata.txt | 5 +++++ scripts/arch-run.bash | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 errata.txt diff --git a/configure b/configure index 64722c9b263b..cde2cfe9db61 100755 --- a/configure +++ b/configure @@ -14,6 +14,7 @@ host=$arch cross_prefix= endian="" pretty_print_stacks=yes +environ_default=yes u32_long= usage() { @@ -31,6 +32,9 @@ usage() { --endian=ENDIAN endianness to compile for (little or big, ppc64 only) --[enable|disable]-pretty-print-stacks enable or disable pretty stack printing (enabled by default) + --[enable|disable]-default-environ + enable or disable the generation of a default environ when + no environ is provided by the user (enabled by default) EOF exit 1 } @@ -73,6 +77,12 @@ while [[ "$1" = -* ]]; do --disable-pretty-print-stacks) pretty_print_stacks=no ;; + --enable-default-environ) + environ_default=yes + ;; + --disable-default-environ) + environ_default=no + ;; --help) usage ;; @@ -183,5 +193,6 @@ TEST_DIR=$testdir FIRMWARE=$firmware ENDIAN=$endian PRETTY_PRINT_STACKS=$pretty_print_stacks +ENVIRON_DEFAULT=$environ_default U32_LONG_FMT=$u32_long EOF diff --git a/errata.txt b/errata.txt new file mode 100644 index 000000000000..95b66c837c63 --- /dev/null +++ b/errata.txt @@ -0,0 +1,5 @@ +#---------------:-----------------------:-------------------------------------- +# commit : minimum kernel : summary +# 12 hex digits : version : +#---------------:-----------------------:-------------------------------------- +#---------------:-----------------------:-------------------------------------- diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash index 3ba6354608da..d35a176ef210 100644 --- a/scripts/arch-run.bash +++ b/scripts/arch-run.bash @@ -172,6 +172,8 @@ env_add_errata () grep -q $errata <(env) && continue eval export "$line" done + elif [ ! -f "$ENV" ]; then + env_generate_errata fi if grep -q '^ERRATA_' <(env); then @@ -183,6 +185,49 @@ env_add_errata () fi } +env_generate_errata () +{ + local kernel_version_string=$(uname -r) + local kernel_version=$(echo "$kernel_version_string" | cut -d. -f1) + local kernel_patchlevel=$(echo "$kernel_version_string" | cut -d. -f2 | sed 's/[^0-9].*//') + local kernel_sublevel=$(echo "$kernel_version_string" | cut -d. -f3- | sed 's/[^0-9].*//') + local line commit minver errata v p s have + + [ "$ENVIRON_DEFAULT" != "yes" ] && return + [ ! -f errata.txt ] && return + + for line in $(grep -v '^#' errata.txt | tr -d '[:blank:]' | cut -d: -f1,2); do + commit=$(echo $line | cut -d: -f1) + minver=$(echo $line | cut -d: -f2) + + errata="ERRATA_$commit" + grep -q $errata <(env) && continue + + v=$(echo "$minver" | cut -d. -f1) + p=$(echo "$minver" | cut -d. -f2) + s=$(echo "$minver" | cut -d. -f3) + 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 + have=y + else + have=n + fi + elif [ "$s" ] && (( $s != 0 )); then + have=n + else + have=y + fi + else + have=n + fi + eval export "$errata=$have" + done +} + trap_exit_push () { local old_exit=$(trap -p EXIT | sed "s/^[^']*'//;s/'[^']*$//") -- 2.9.4