torture: Allow #CHECK# in --kconfig argument to kvm.sh
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 13 Jun 2023 17:34:37 +0000 (10:34 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Fri, 14 Jul 2023 22:10:57 +0000 (15:10 -0700)
Testing building of a given RCU Tasks flavor with the other two
flavors disabled requires checking that the other two flavors are in
fact disabled.  This commit therefore modifies the scripting to permit
things like "#CHECK#CONFIG_TASKS_TRACE_RCU=n" to be passed into the
kvm.sh script's --kconfig parameter.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/testing/selftests/rcutorture/bin/configcheck.sh
tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh
tools/testing/selftests/rcutorture/bin/kvm.sh

index b92dfeb7fbbfe0cd1b04a7baf77a1fc7c92a5dfe..99162d18bad3d17bd322ee64aa947660932db521 100755 (executable)
@@ -3,6 +3,8 @@
 #
 # Usage: configcheck.sh .config .config-template
 #
+# Non-empty output if errors detected.
+#
 # Copyright (C) IBM Corporation, 2011
 #
 # Authors: Paul E. McKenney <paulmck@linux.ibm.com>
 T="`mktemp -d ${TMPDIR-/tmp}/configcheck.sh.XXXXXX`"
 trap 'rm -rf $T' 0
 
-sed -e 's/"//g' < $1 > $T/.config
+# function test_kconfig_enabled ( Kconfig-var=val )
+function test_kconfig_enabled () {
+       if ! grep -q "^$1$" $T/.config
+       then
+               echo :$1: improperly set
+               return 1
+       fi
+       return 0
+}
 
-sed -e 's/"//g' -e 's/\(.*\)=n/# \1 is not set/' -e 's/^#CHECK#//' < $2 |
-awk    '
-{
-               print "if grep -q \"" $0 "\" < '"$T/.config"'";
-               print "then";
-               print "\t:";
-               print "else";
-               if ($1 == "#") {
-                       print "\tif grep -q \"" $2 "\" < '"$T/.config"'";
-                       print "\tthen";
-                       print "\t\tif test \"$firsttime\" = \"\""
-                       print "\t\tthen"
-                       print "\t\t\tfirsttime=1"
-                       print "\t\tfi"
-                       print "\t\techo \":" $2 ": improperly set\"";
-                       print "\telse";
-                       print "\t\t:";
-                       print "\tfi";
-               } else {
-                       print "\tif test \"$firsttime\" = \"\""
-                       print "\tthen"
-                       print "\t\tfirsttime=1"
-                       print "\tfi"
-                       print "\techo \":" $0 ": improperly set\"";
-               }
-               print "fi";
-       }' | sh
+# function test_kconfig_disabled ( Kconfig-var )
+function test_kconfig_disabled () {
+       if grep -q "^$1=n$" $T/.config
+       then
+               return 0
+       fi
+       if grep -q "^$1=" $T/.config
+       then
+               echo :$1=n: improperly set
+               return 1
+       fi
+       return 0
+}
+
+sed -e 's/"//g' < $1 > $T/.config
+sed -e 's/^#CHECK#//' < $2 > $T/ConfigFragment
+grep '^CONFIG_.*=n$' $T/ConfigFragment |
+       sed -e 's/^/test_kconfig_disabled /' -e 's/=n$//' > $T/kconfig-n.sh
+. $T/kconfig-n.sh
+grep -v '^CONFIG_.*=n$' $T/ConfigFragment | grep '^CONFIG_' |
+       sed -e 's/^/test_kconfig_enabled /' > $T/kconfig-not-n.sh
+. $T/kconfig-not-n.sh
index d2a3710a5f2add543efed96d650e3d94c61d158b..b9912de9d71e4d038e1c02e51216068095fd5e79 100755 (executable)
@@ -57,7 +57,6 @@ config_override_param () {
                cat $T/Kconfig_args >> $resdir/ConfigFragment.input
                config_override.sh $T/$2 $T/Kconfig_args > $T/$2.tmp
                mv $T/$2.tmp $T/$2
-               # Note that "#CHECK#" is not permitted on commandline.
        fi
 }
 
index d3cdc2d33d4bed3b2c0342732746a679363a5131..b0f36a638a69689229a7eb6644aeeb0af3144d70 100755 (executable)
@@ -186,7 +186,7 @@ do
                fi
                ;;
        --kconfig|--kconfigs)
-               checkarg --kconfig "(Kconfig options)" $# "$2" '^CONFIG_[A-Z0-9_]\+=\([ynm]\|[0-9]\+\|"[^"]*"\)\( CONFIG_[A-Z0-9_]\+=\([ynm]\|[0-9]\+\|"[^"]*"\)\)*$' '^error$'
+               checkarg --kconfig "(Kconfig options)" $# "$2" '^\(#CHECK#\)\?CONFIG_[A-Z0-9_]\+=\([ynm]\|[0-9]\+\|"[^"]*"\)\( \(#CHECK#\)\?CONFIG_[A-Z0-9_]\+=\([ynm]\|[0-9]\+\|"[^"]*"\)\)*$' '^error$'
                TORTURE_KCONFIG_ARG="`echo "$TORTURE_KCONFIG_ARG $2" | sed -e 's/^ *//' -e 's/ *$//'`"
                shift
                ;;