diff options
Diffstat (limited to 'tools/testing')
21 files changed, 323 insertions, 377 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl index 40631569a0fd..55ab700f6ba5 100755 --- a/tools/testing/ktest/ktest.pl +++ b/tools/testing/ktest/ktest.pl | |||
@@ -72,7 +72,7 @@ my %default = ( | |||
72 | "IGNORE_UNUSED" => 0, | 72 | "IGNORE_UNUSED" => 0, |
73 | ); | 73 | ); |
74 | 74 | ||
75 | my $ktest_config; | 75 | my $ktest_config = "ktest.conf"; |
76 | my $version; | 76 | my $version; |
77 | my $have_version = 0; | 77 | my $have_version = 0; |
78 | my $machine; | 78 | my $machine; |
@@ -149,7 +149,6 @@ my $bisect_ret_abort; | |||
149 | my $bisect_ret_default; | 149 | my $bisect_ret_default; |
150 | my $in_patchcheck = 0; | 150 | my $in_patchcheck = 0; |
151 | my $run_test; | 151 | my $run_test; |
152 | my $redirect; | ||
153 | my $buildlog; | 152 | my $buildlog; |
154 | my $testlog; | 153 | my $testlog; |
155 | my $dmesg; | 154 | my $dmesg; |
@@ -522,7 +521,7 @@ sub read_ync { | |||
522 | return read_prompt 1, $prompt; | 521 | return read_prompt 1, $prompt; |
523 | } | 522 | } |
524 | 523 | ||
525 | sub get_ktest_config { | 524 | sub get_mandatory_config { |
526 | my ($config) = @_; | 525 | my ($config) = @_; |
527 | my $ans; | 526 | my $ans; |
528 | 527 | ||
@@ -553,29 +552,29 @@ sub get_ktest_config { | |||
553 | } | 552 | } |
554 | } | 553 | } |
555 | 554 | ||
556 | sub get_ktest_configs { | 555 | sub get_mandatory_configs { |
557 | get_ktest_config("MACHINE"); | 556 | get_mandatory_config("MACHINE"); |
558 | get_ktest_config("BUILD_DIR"); | 557 | get_mandatory_config("BUILD_DIR"); |
559 | get_ktest_config("OUTPUT_DIR"); | 558 | get_mandatory_config("OUTPUT_DIR"); |
560 | 559 | ||
561 | if ($newconfig) { | 560 | if ($newconfig) { |
562 | get_ktest_config("BUILD_OPTIONS"); | 561 | get_mandatory_config("BUILD_OPTIONS"); |
563 | } | 562 | } |
564 | 563 | ||
565 | # options required for other than just building a kernel | 564 | # options required for other than just building a kernel |
566 | if (!$buildonly) { | 565 | if (!$buildonly) { |
567 | get_ktest_config("POWER_CYCLE"); | 566 | get_mandatory_config("POWER_CYCLE"); |
568 | get_ktest_config("CONSOLE"); | 567 | get_mandatory_config("CONSOLE"); |
569 | } | 568 | } |
570 | 569 | ||
571 | # options required for install and more | 570 | # options required for install and more |
572 | if ($buildonly != 1) { | 571 | if ($buildonly != 1) { |
573 | get_ktest_config("SSH_USER"); | 572 | get_mandatory_config("SSH_USER"); |
574 | get_ktest_config("BUILD_TARGET"); | 573 | get_mandatory_config("BUILD_TARGET"); |
575 | get_ktest_config("TARGET_IMAGE"); | 574 | get_mandatory_config("TARGET_IMAGE"); |
576 | } | 575 | } |
577 | 576 | ||
578 | get_ktest_config("LOCALVERSION"); | 577 | get_mandatory_config("LOCALVERSION"); |
579 | 578 | ||
580 | return if ($buildonly); | 579 | return if ($buildonly); |
581 | 580 | ||
@@ -583,7 +582,7 @@ sub get_ktest_configs { | |||
583 | 582 | ||
584 | if (!defined($rtype)) { | 583 | if (!defined($rtype)) { |
585 | if (!defined($opt{"GRUB_MENU"})) { | 584 | if (!defined($opt{"GRUB_MENU"})) { |
586 | get_ktest_config("REBOOT_TYPE"); | 585 | get_mandatory_config("REBOOT_TYPE"); |
587 | $rtype = $entered_configs{"REBOOT_TYPE"}; | 586 | $rtype = $entered_configs{"REBOOT_TYPE"}; |
588 | } else { | 587 | } else { |
589 | $rtype = "grub"; | 588 | $rtype = "grub"; |
@@ -591,16 +590,16 @@ sub get_ktest_configs { | |||
591 | } | 590 | } |
592 | 591 | ||
593 | if ($rtype eq "grub") { | 592 | if ($rtype eq "grub") { |
594 | get_ktest_config("GRUB_MENU"); | 593 | get_mandatory_config("GRUB_MENU"); |
595 | } | 594 | } |
596 | 595 | ||
597 | if ($rtype eq "grub2") { | 596 | if ($rtype eq "grub2") { |
598 | get_ktest_config("GRUB_MENU"); | 597 | get_mandatory_config("GRUB_MENU"); |
599 | get_ktest_config("GRUB_FILE"); | 598 | get_mandatory_config("GRUB_FILE"); |
600 | } | 599 | } |
601 | 600 | ||
602 | if ($rtype eq "syslinux") { | 601 | if ($rtype eq "syslinux") { |
603 | get_ktest_config("SYSLINUX_LABEL"); | 602 | get_mandatory_config("SYSLINUX_LABEL"); |
604 | } | 603 | } |
605 | } | 604 | } |
606 | 605 | ||
@@ -1090,7 +1089,7 @@ sub read_config { | |||
1090 | $test_case = __read_config $config, \$test_num; | 1089 | $test_case = __read_config $config, \$test_num; |
1091 | 1090 | ||
1092 | # make sure we have all mandatory configs | 1091 | # make sure we have all mandatory configs |
1093 | get_ktest_configs; | 1092 | get_mandatory_configs; |
1094 | 1093 | ||
1095 | # was a test specified? | 1094 | # was a test specified? |
1096 | if (!$test_case) { | 1095 | if (!$test_case) { |
@@ -1529,7 +1528,7 @@ sub fail { | |||
1529 | } | 1528 | } |
1530 | 1529 | ||
1531 | sub run_command { | 1530 | sub run_command { |
1532 | my ($command) = @_; | 1531 | my ($command, $redirect) = @_; |
1533 | my $dolog = 0; | 1532 | my $dolog = 0; |
1534 | my $dord = 0; | 1533 | my $dord = 0; |
1535 | my $pid; | 1534 | my $pid; |
@@ -2265,9 +2264,7 @@ sub build { | |||
2265 | # Run old config regardless, to enforce min configurations | 2264 | # Run old config regardless, to enforce min configurations |
2266 | make_oldconfig; | 2265 | make_oldconfig; |
2267 | 2266 | ||
2268 | $redirect = "$buildlog"; | 2267 | my $build_ret = run_command "$make $build_options", $buildlog; |
2269 | my $build_ret = run_command "$make $build_options"; | ||
2270 | undef $redirect; | ||
2271 | 2268 | ||
2272 | if (defined($post_build)) { | 2269 | if (defined($post_build)) { |
2273 | # Because a post build may change the kernel version | 2270 | # Because a post build may change the kernel version |
@@ -2360,9 +2357,7 @@ sub child_run_test { | |||
2360 | $poweroff_on_error = 0; | 2357 | $poweroff_on_error = 0; |
2361 | $die_on_failure = 1; | 2358 | $die_on_failure = 1; |
2362 | 2359 | ||
2363 | $redirect = "$testlog"; | 2360 | run_command $run_test, $testlog or $failed = 1; |
2364 | run_command $run_test or $failed = 1; | ||
2365 | undef $redirect; | ||
2366 | 2361 | ||
2367 | exit $failed; | 2362 | exit $failed; |
2368 | } | 2363 | } |
@@ -2789,12 +2784,17 @@ my %dependency; | |||
2789 | sub assign_configs { | 2784 | sub assign_configs { |
2790 | my ($hash, $config) = @_; | 2785 | my ($hash, $config) = @_; |
2791 | 2786 | ||
2787 | doprint "Reading configs from $config\n"; | ||
2788 | |||
2792 | open (IN, $config) | 2789 | open (IN, $config) |
2793 | or dodie "Failed to read $config"; | 2790 | or dodie "Failed to read $config"; |
2794 | 2791 | ||
2795 | while (<IN>) { | 2792 | while (<IN>) { |
2793 | chomp; | ||
2796 | if (/^((CONFIG\S*)=.*)/) { | 2794 | if (/^((CONFIG\S*)=.*)/) { |
2797 | ${$hash}{$2} = $1; | 2795 | ${$hash}{$2} = $1; |
2796 | } elsif (/^(# (CONFIG\S*) is not set)/) { | ||
2797 | ${$hash}{$2} = $1; | ||
2798 | } | 2798 | } |
2799 | } | 2799 | } |
2800 | 2800 | ||
@@ -2807,27 +2807,6 @@ sub process_config_ignore { | |||
2807 | assign_configs \%config_ignore, $config; | 2807 | assign_configs \%config_ignore, $config; |
2808 | } | 2808 | } |
2809 | 2809 | ||
2810 | sub read_current_config { | ||
2811 | my ($config_ref) = @_; | ||
2812 | |||
2813 | %{$config_ref} = (); | ||
2814 | undef %{$config_ref}; | ||
2815 | |||
2816 | my @key = keys %{$config_ref}; | ||
2817 | if ($#key >= 0) { | ||
2818 | print "did not delete!\n"; | ||
2819 | exit; | ||
2820 | } | ||
2821 | open (IN, "$output_config"); | ||
2822 | |||
2823 | while (<IN>) { | ||
2824 | if (/^(CONFIG\S+)=(.*)/) { | ||
2825 | ${$config_ref}{$1} = $2; | ||
2826 | } | ||
2827 | } | ||
2828 | close(IN); | ||
2829 | } | ||
2830 | |||
2831 | sub get_dependencies { | 2810 | sub get_dependencies { |
2832 | my ($config) = @_; | 2811 | my ($config) = @_; |
2833 | 2812 | ||
@@ -2846,53 +2825,97 @@ sub get_dependencies { | |||
2846 | return @deps; | 2825 | return @deps; |
2847 | } | 2826 | } |
2848 | 2827 | ||
2828 | sub save_config { | ||
2829 | my ($pc, $file) = @_; | ||
2830 | |||
2831 | my %configs = %{$pc}; | ||
2832 | |||
2833 | doprint "Saving configs into $file\n"; | ||
2834 | |||
2835 | open(OUT, ">$file") or dodie "Can not write to $file"; | ||
2836 | |||
2837 | foreach my $config (keys %configs) { | ||
2838 | print OUT "$configs{$config}\n"; | ||
2839 | } | ||
2840 | close(OUT); | ||
2841 | } | ||
2842 | |||
2849 | sub create_config { | 2843 | sub create_config { |
2850 | my @configs = @_; | 2844 | my ($name, $pc) = @_; |
2851 | 2845 | ||
2852 | open(OUT, ">$output_config") or dodie "Can not write to $output_config"; | 2846 | doprint "Creating old config from $name configs\n"; |
2853 | 2847 | ||
2854 | foreach my $config (@configs) { | 2848 | save_config $pc, $output_config; |
2855 | print OUT "$config_set{$config}\n"; | 2849 | |
2856 | my @deps = get_dependencies $config; | 2850 | make_oldconfig; |
2857 | foreach my $dep (@deps) { | 2851 | } |
2858 | print OUT "$config_set{$dep}\n"; | 2852 | |
2853 | # compare two config hashes, and return configs with different vals. | ||
2854 | # It returns B's config values, but you can use A to see what A was. | ||
2855 | sub diff_config_vals { | ||
2856 | my ($pa, $pb) = @_; | ||
2857 | |||
2858 | # crappy Perl way to pass in hashes. | ||
2859 | my %a = %{$pa}; | ||
2860 | my %b = %{$pb}; | ||
2861 | |||
2862 | my %ret; | ||
2863 | |||
2864 | foreach my $item (keys %a) { | ||
2865 | if (defined($b{$item}) && $b{$item} ne $a{$item}) { | ||
2866 | $ret{$item} = $b{$item}; | ||
2859 | } | 2867 | } |
2860 | } | 2868 | } |
2861 | 2869 | ||
2862 | # turn off configs to keep off | 2870 | return %ret; |
2863 | foreach my $config (keys %config_off) { | 2871 | } |
2864 | print OUT "# $config is not set\n"; | ||
2865 | } | ||
2866 | 2872 | ||
2867 | # turn off configs that should be off for now | 2873 | # compare two config hashes and return the configs in B but not A |
2868 | foreach my $config (@config_off_tmp) { | 2874 | sub diff_configs { |
2869 | print OUT "# $config is not set\n"; | 2875 | my ($pa, $pb) = @_; |
2870 | } | 2876 | |
2877 | my %ret; | ||
2878 | |||
2879 | # crappy Perl way to pass in hashes. | ||
2880 | my %a = %{$pa}; | ||
2881 | my %b = %{$pb}; | ||
2871 | 2882 | ||
2872 | foreach my $config (keys %config_ignore) { | 2883 | foreach my $item (keys %b) { |
2873 | print OUT "$config_ignore{$config}\n"; | 2884 | if (!defined($a{$item})) { |
2885 | $ret{$item} = $b{$item}; | ||
2886 | } | ||
2874 | } | 2887 | } |
2875 | close(OUT); | ||
2876 | 2888 | ||
2877 | make_oldconfig; | 2889 | return %ret; |
2878 | } | 2890 | } |
2879 | 2891 | ||
2892 | # return if two configs are equal or not | ||
2893 | # 0 is equal +1 b has something a does not | ||
2894 | # +1 if a and b have a different item. | ||
2895 | # -1 if a has something b does not | ||
2880 | sub compare_configs { | 2896 | sub compare_configs { |
2881 | my (%a, %b) = @_; | 2897 | my ($pa, $pb) = @_; |
2882 | 2898 | ||
2883 | foreach my $item (keys %a) { | 2899 | my %ret; |
2884 | if (!defined($b{$item})) { | 2900 | |
2885 | print "diff $item\n"; | 2901 | # crappy Perl way to pass in hashes. |
2902 | my %a = %{$pa}; | ||
2903 | my %b = %{$pb}; | ||
2904 | |||
2905 | foreach my $item (keys %b) { | ||
2906 | if (!defined($a{$item})) { | ||
2907 | return 1; | ||
2908 | } | ||
2909 | if ($a{$item} ne $b{$item}) { | ||
2886 | return 1; | 2910 | return 1; |
2887 | } | 2911 | } |
2888 | delete $b{$item}; | ||
2889 | } | 2912 | } |
2890 | 2913 | ||
2891 | my @keys = keys %b; | 2914 | foreach my $item (keys %a) { |
2892 | if ($#keys) { | 2915 | if (!defined($b{$item})) { |
2893 | print "diff2 $keys[0]\n"; | 2916 | return -1; |
2917 | } | ||
2894 | } | 2918 | } |
2895 | return -1 if ($#keys >= 0); | ||
2896 | 2919 | ||
2897 | return 0; | 2920 | return 0; |
2898 | } | 2921 | } |
@@ -2900,24 +2923,13 @@ sub compare_configs { | |||
2900 | sub run_config_bisect_test { | 2923 | sub run_config_bisect_test { |
2901 | my ($type) = @_; | 2924 | my ($type) = @_; |
2902 | 2925 | ||
2903 | return run_bisect_test $type, "oldconfig"; | 2926 | my $ret = run_bisect_test $type, "oldconfig"; |
2904 | } | ||
2905 | 2927 | ||
2906 | sub process_passed { | 2928 | if ($bisect_manual) { |
2907 | my (%configs) = @_; | 2929 | $ret = answer_bisect; |
2908 | |||
2909 | doprint "These configs had no failure: (Enabling them for further compiles)\n"; | ||
2910 | # Passed! All these configs are part of a good compile. | ||
2911 | # Add them to the min options. | ||
2912 | foreach my $config (keys %configs) { | ||
2913 | if (defined($config_list{$config})) { | ||
2914 | doprint " removing $config\n"; | ||
2915 | $config_ignore{$config} = $config_list{$config}; | ||
2916 | delete $config_list{$config}; | ||
2917 | } | ||
2918 | } | 2930 | } |
2919 | doprint "config copied to $outputdir/config_good\n"; | 2931 | |
2920 | run_command "cp -f $output_config $outputdir/config_good"; | 2932 | return $ret; |
2921 | } | 2933 | } |
2922 | 2934 | ||
2923 | sub process_failed { | 2935 | sub process_failed { |
@@ -2928,253 +2940,225 @@ sub process_failed { | |||
2928 | doprint "***************************************\n\n"; | 2940 | doprint "***************************************\n\n"; |
2929 | } | 2941 | } |
2930 | 2942 | ||
2931 | sub run_config_bisect { | 2943 | # used for config bisecting |
2944 | my $good_config; | ||
2945 | my $bad_config; | ||
2932 | 2946 | ||
2933 | my @start_list = keys %config_list; | 2947 | sub process_new_config { |
2948 | my ($tc, $nc, $gc, $bc) = @_; | ||
2934 | 2949 | ||
2935 | if ($#start_list < 0) { | 2950 | my %tmp_config = %{$tc}; |
2936 | doprint "No more configs to test!!!\n"; | 2951 | my %good_configs = %{$gc}; |
2937 | return -1; | 2952 | my %bad_configs = %{$bc}; |
2953 | |||
2954 | my %new_configs; | ||
2955 | |||
2956 | my $runtest = 1; | ||
2957 | my $ret; | ||
2958 | |||
2959 | create_config "tmp_configs", \%tmp_config; | ||
2960 | assign_configs \%new_configs, $output_config; | ||
2961 | |||
2962 | $ret = compare_configs \%new_configs, \%bad_configs; | ||
2963 | if (!$ret) { | ||
2964 | doprint "New config equals bad config, try next test\n"; | ||
2965 | $runtest = 0; | ||
2966 | } | ||
2967 | |||
2968 | if ($runtest) { | ||
2969 | $ret = compare_configs \%new_configs, \%good_configs; | ||
2970 | if (!$ret) { | ||
2971 | doprint "New config equals good config, try next test\n"; | ||
2972 | $runtest = 0; | ||
2973 | } | ||
2938 | } | 2974 | } |
2939 | 2975 | ||
2940 | doprint "***** RUN TEST ***\n"; | 2976 | %{$nc} = %new_configs; |
2977 | |||
2978 | return $runtest; | ||
2979 | } | ||
2980 | |||
2981 | sub run_config_bisect { | ||
2982 | my ($pgood, $pbad) = @_; | ||
2983 | |||
2941 | my $type = $config_bisect_type; | 2984 | my $type = $config_bisect_type; |
2985 | |||
2986 | my %good_configs = %{$pgood}; | ||
2987 | my %bad_configs = %{$pbad}; | ||
2988 | |||
2989 | my %diff_configs = diff_config_vals \%good_configs, \%bad_configs; | ||
2990 | my %b_configs = diff_configs \%good_configs, \%bad_configs; | ||
2991 | my %g_configs = diff_configs \%bad_configs, \%good_configs; | ||
2992 | |||
2993 | my @diff_arr = keys %diff_configs; | ||
2994 | my $len_diff = $#diff_arr + 1; | ||
2995 | |||
2996 | my @b_arr = keys %b_configs; | ||
2997 | my $len_b = $#b_arr + 1; | ||
2998 | |||
2999 | my @g_arr = keys %g_configs; | ||
3000 | my $len_g = $#g_arr + 1; | ||
3001 | |||
3002 | my $runtest = 1; | ||
3003 | my %new_configs; | ||
2942 | my $ret; | 3004 | my $ret; |
2943 | my %current_config; | ||
2944 | 3005 | ||
2945 | my $count = $#start_list + 1; | 3006 | # First, lets get it down to a single subset. |
2946 | doprint " $count configs to test\n"; | 3007 | # Is the problem with a difference in values? |
3008 | # Is the problem with a missing config? | ||
3009 | # Is the problem with a config that breaks things? | ||
2947 | 3010 | ||
2948 | my $half = int($#start_list / 2); | 3011 | # Enable all of one set and see if we get a new bad |
3012 | # or good config. | ||
2949 | 3013 | ||
2950 | do { | 3014 | # first set the good config to the bad values. |
2951 | my @tophalf = @start_list[0 .. $half]; | ||
2952 | 3015 | ||
2953 | # keep the bottom half off | 3016 | doprint "d=$len_diff g=$len_g b=$len_b\n"; |
2954 | if ($half < $#start_list) { | ||
2955 | @config_off_tmp = @start_list[$half + 1 .. $#start_list]; | ||
2956 | } else { | ||
2957 | @config_off_tmp = (); | ||
2958 | } | ||
2959 | 3017 | ||
2960 | create_config @tophalf; | 3018 | # first lets enable things in bad config that are enabled in good config |
2961 | read_current_config \%current_config; | 3019 | |
2962 | 3020 | if ($len_diff > 0) { | |
2963 | $count = $#tophalf + 1; | 3021 | if ($len_b > 0 || $len_g > 0) { |
2964 | doprint "Testing $count configs\n"; | 3022 | my %tmp_config = %bad_configs; |
2965 | my $found = 0; | 3023 | |
2966 | # make sure we test something | 3024 | doprint "Set tmp config to be bad config with good config values\n"; |
2967 | foreach my $config (@tophalf) { | 3025 | foreach my $item (@diff_arr) { |
2968 | if (defined($current_config{$config})) { | 3026 | $tmp_config{$item} = $good_configs{$item}; |
2969 | logit " $config\n"; | ||
2970 | $found = 1; | ||
2971 | } | ||
2972 | } | ||
2973 | if (!$found) { | ||
2974 | # try the other half | ||
2975 | doprint "Top half produced no set configs, trying bottom half\n"; | ||
2976 | |||
2977 | # keep the top half off | ||
2978 | @config_off_tmp = @tophalf; | ||
2979 | @tophalf = @start_list[$half + 1 .. $#start_list]; | ||
2980 | |||
2981 | create_config @tophalf; | ||
2982 | read_current_config \%current_config; | ||
2983 | foreach my $config (@tophalf) { | ||
2984 | if (defined($current_config{$config})) { | ||
2985 | logit " $config\n"; | ||
2986 | $found = 1; | ||
2987 | } | ||
2988 | } | ||
2989 | if (!$found) { | ||
2990 | doprint "Failed: Can't make new config with current configs\n"; | ||
2991 | foreach my $config (@start_list) { | ||
2992 | doprint " CONFIG: $config\n"; | ||
2993 | } | ||
2994 | return -1; | ||
2995 | } | 3027 | } |
2996 | $count = $#tophalf + 1; | ||
2997 | doprint "Testing $count configs\n"; | ||
2998 | } | ||
2999 | 3028 | ||
3000 | $ret = run_config_bisect_test $type; | 3029 | $runtest = process_new_config \%tmp_config, \%new_configs, |
3001 | if ($bisect_manual) { | 3030 | \%good_configs, \%bad_configs; |
3002 | $ret = answer_bisect; | ||
3003 | } | ||
3004 | if ($ret) { | ||
3005 | process_passed %current_config; | ||
3006 | return 0; | ||
3007 | } | 3031 | } |
3032 | } | ||
3008 | 3033 | ||
3009 | doprint "This config had a failure.\n"; | 3034 | if (!$runtest && $len_diff > 0) { |
3010 | doprint "Removing these configs that were not set in this config:\n"; | ||
3011 | doprint "config copied to $outputdir/config_bad\n"; | ||
3012 | run_command "cp -f $output_config $outputdir/config_bad"; | ||
3013 | 3035 | ||
3014 | # A config exists in this group that was bad. | 3036 | if ($len_diff == 1) { |
3015 | foreach my $config (keys %config_list) { | 3037 | process_failed $diff_arr[0]; |
3016 | if (!defined($current_config{$config})) { | 3038 | return 1; |
3017 | doprint " removing $config\n"; | ||
3018 | delete $config_list{$config}; | ||
3019 | } | ||
3020 | } | 3039 | } |
3040 | my %tmp_config = %bad_configs; | ||
3021 | 3041 | ||
3022 | @start_list = @tophalf; | 3042 | my $half = int($#diff_arr / 2); |
3043 | my @tophalf = @diff_arr[0 .. $half]; | ||
3023 | 3044 | ||
3024 | if ($#start_list == 0) { | 3045 | doprint "Settings bisect with top half:\n"; |
3025 | process_failed $start_list[0]; | 3046 | doprint "Set tmp config to be bad config with some good config values\n"; |
3026 | return 1; | 3047 | foreach my $item (@tophalf) { |
3048 | $tmp_config{$item} = $good_configs{$item}; | ||
3027 | } | 3049 | } |
3028 | 3050 | ||
3029 | # remove half the configs we are looking at and see if | 3051 | $runtest = process_new_config \%tmp_config, \%new_configs, |
3030 | # they are good. | 3052 | \%good_configs, \%bad_configs; |
3031 | $half = int($#start_list / 2); | ||
3032 | } while ($#start_list > 0); | ||
3033 | 3053 | ||
3034 | # we found a single config, try it again unless we are running manually | 3054 | if (!$runtest) { |
3055 | my %tmp_config = %bad_configs; | ||
3035 | 3056 | ||
3036 | if ($bisect_manual) { | 3057 | doprint "Try bottom half\n"; |
3037 | process_failed $start_list[0]; | ||
3038 | return 1; | ||
3039 | } | ||
3040 | 3058 | ||
3041 | my @tophalf = @start_list[0 .. 0]; | 3059 | my @bottomhalf = @diff_arr[$half+1 .. $#diff_arr]; |
3042 | 3060 | ||
3043 | $ret = run_config_bisect_test $type; | 3061 | foreach my $item (@bottomhalf) { |
3044 | if ($ret) { | 3062 | $tmp_config{$item} = $good_configs{$item}; |
3045 | process_passed %current_config; | 3063 | } |
3064 | |||
3065 | $runtest = process_new_config \%tmp_config, \%new_configs, | ||
3066 | \%good_configs, \%bad_configs; | ||
3067 | } | ||
3068 | } | ||
3069 | |||
3070 | if ($runtest) { | ||
3071 | $ret = run_config_bisect_test $type; | ||
3072 | if ($ret) { | ||
3073 | doprint "NEW GOOD CONFIG\n"; | ||
3074 | %good_configs = %new_configs; | ||
3075 | run_command "mv $good_config ${good_config}.last"; | ||
3076 | save_config \%good_configs, $good_config; | ||
3077 | %{$pgood} = %good_configs; | ||
3078 | } else { | ||
3079 | doprint "NEW BAD CONFIG\n"; | ||
3080 | %bad_configs = %new_configs; | ||
3081 | run_command "mv $bad_config ${bad_config}.last"; | ||
3082 | save_config \%bad_configs, $bad_config; | ||
3083 | %{$pbad} = %bad_configs; | ||
3084 | } | ||
3046 | return 0; | 3085 | return 0; |
3047 | } | 3086 | } |
3048 | 3087 | ||
3049 | process_failed $start_list[0]; | 3088 | fail "Hmm, need to do a mix match?\n"; |
3050 | return 1; | 3089 | return -1; |
3051 | } | 3090 | } |
3052 | 3091 | ||
3053 | sub config_bisect { | 3092 | sub config_bisect { |
3054 | my ($i) = @_; | 3093 | my ($i) = @_; |
3055 | 3094 | ||
3056 | my $start_config = $config_bisect; | 3095 | my $type = $config_bisect_type; |
3096 | my $ret; | ||
3057 | 3097 | ||
3058 | my $tmpconfig = "$tmpdir/use_config"; | 3098 | $bad_config = $config_bisect; |
3059 | 3099 | ||
3060 | if (defined($config_bisect_good)) { | 3100 | if (defined($config_bisect_good)) { |
3061 | process_config_ignore $config_bisect_good; | 3101 | $good_config = $config_bisect_good; |
3062 | } | 3102 | } elsif (defined($minconfig)) { |
3063 | 3103 | $good_config = $minconfig; | |
3064 | # Make the file with the bad config and the min config | ||
3065 | if (defined($minconfig)) { | ||
3066 | # read the min config for things to ignore | ||
3067 | run_command "cp $minconfig $tmpconfig" or | ||
3068 | dodie "failed to copy $minconfig to $tmpconfig"; | ||
3069 | } else { | 3104 | } else { |
3070 | unlink $tmpconfig; | 3105 | doprint "No config specified, checking if defconfig works"; |
3071 | } | 3106 | $ret = run_bisect_test $type, "defconfig"; |
3072 | 3107 | if (!$ret) { | |
3073 | if (-f $tmpconfig) { | 3108 | fail "Have no good config to compare with, please set CONFIG_BISECT_GOOD"; |
3074 | load_force_config($tmpconfig); | 3109 | return 1; |
3075 | process_config_ignore $tmpconfig; | ||
3076 | } | ||
3077 | |||
3078 | # now process the start config | ||
3079 | run_command "cp $start_config $output_config" or | ||
3080 | dodie "failed to copy $start_config to $output_config"; | ||
3081 | |||
3082 | # read directly what we want to check | ||
3083 | my %config_check; | ||
3084 | open (IN, $output_config) | ||
3085 | or dodie "failed to open $output_config"; | ||
3086 | |||
3087 | while (<IN>) { | ||
3088 | if (/^((CONFIG\S*)=.*)/) { | ||
3089 | $config_check{$2} = $1; | ||
3090 | } | 3110 | } |
3111 | $good_config = $output_config; | ||
3091 | } | 3112 | } |
3092 | close(IN); | ||
3093 | 3113 | ||
3094 | # Now run oldconfig with the minconfig | 3114 | # we don't want min configs to cause issues here. |
3095 | make_oldconfig; | 3115 | doprint "Disabling 'MIN_CONFIG' for this test\n"; |
3116 | undef $minconfig; | ||
3096 | 3117 | ||
3097 | # check to see what we lost (or gained) | 3118 | my %good_configs; |
3098 | open (IN, $output_config) | 3119 | my %bad_configs; |
3099 | or dodie "Failed to read $start_config"; | 3120 | my %tmp_configs; |
3100 | 3121 | ||
3101 | my %removed_configs; | 3122 | doprint "Run good configs through make oldconfig\n"; |
3102 | my %added_configs; | 3123 | assign_configs \%tmp_configs, $good_config; |
3124 | create_config "$good_config", \%tmp_configs; | ||
3125 | assign_configs \%good_configs, $output_config; | ||
3103 | 3126 | ||
3104 | while (<IN>) { | 3127 | doprint "Run bad configs through make oldconfig\n"; |
3105 | if (/^((CONFIG\S*)=.*)/) { | 3128 | assign_configs \%tmp_configs, $bad_config; |
3106 | # save off all options | 3129 | create_config "$bad_config", \%tmp_configs; |
3107 | $config_set{$2} = $1; | 3130 | assign_configs \%bad_configs, $output_config; |
3108 | if (defined($config_check{$2})) { | ||
3109 | if (defined($config_ignore{$2})) { | ||
3110 | $removed_configs{$2} = $1; | ||
3111 | } else { | ||
3112 | $config_list{$2} = $1; | ||
3113 | } | ||
3114 | } elsif (!defined($config_ignore{$2})) { | ||
3115 | $added_configs{$2} = $1; | ||
3116 | $config_list{$2} = $1; | ||
3117 | } | ||
3118 | } elsif (/^# ((CONFIG\S*).*)/) { | ||
3119 | # Keep these configs disabled | ||
3120 | $config_set{$2} = $1; | ||
3121 | $config_off{$2} = $1; | ||
3122 | } | ||
3123 | } | ||
3124 | close(IN); | ||
3125 | 3131 | ||
3126 | my @confs = keys %removed_configs; | 3132 | $good_config = "$tmpdir/good_config"; |
3127 | if ($#confs >= 0) { | 3133 | $bad_config = "$tmpdir/bad_config"; |
3128 | doprint "Configs overridden by default configs and removed from check:\n"; | 3134 | |
3129 | foreach my $config (@confs) { | 3135 | save_config \%good_configs, $good_config; |
3130 | doprint " $config\n"; | 3136 | save_config \%bad_configs, $bad_config; |
3131 | } | ||
3132 | } | ||
3133 | @confs = keys %added_configs; | ||
3134 | if ($#confs >= 0) { | ||
3135 | doprint "Configs appearing in make oldconfig and added:\n"; | ||
3136 | foreach my $config (@confs) { | ||
3137 | doprint " $config\n"; | ||
3138 | } | ||
3139 | } | ||
3140 | 3137 | ||
3141 | my %config_test; | ||
3142 | my $once = 0; | ||
3143 | 3138 | ||
3144 | @config_off_tmp = (); | 3139 | if (defined($config_bisect_check) && $config_bisect_check ne "0") { |
3140 | if ($config_bisect_check ne "good") { | ||
3141 | doprint "Testing bad config\n"; | ||
3145 | 3142 | ||
3146 | # Sometimes kconfig does weird things. We must make sure | 3143 | $ret = run_bisect_test $type, "useconfig:$bad_config"; |
3147 | # that the config we autocreate has everything we need | 3144 | if ($ret) { |
3148 | # to test, otherwise we may miss testing configs, or | 3145 | fail "Bad config succeeded when expected to fail!"; |
3149 | # may not be able to create a new config. | 3146 | return 0; |
3150 | # Here we create a config with everything set. | ||
3151 | create_config (keys %config_list); | ||
3152 | read_current_config \%config_test; | ||
3153 | foreach my $config (keys %config_list) { | ||
3154 | if (!defined($config_test{$config})) { | ||
3155 | if (!$once) { | ||
3156 | $once = 1; | ||
3157 | doprint "Configs not produced by kconfig (will not be checked):\n"; | ||
3158 | } | 3147 | } |
3159 | doprint " $config\n"; | ||
3160 | delete $config_list{$config}; | ||
3161 | } | 3148 | } |
3162 | } | 3149 | if ($config_bisect_check ne "bad") { |
3163 | my $ret; | 3150 | doprint "Testing good config\n"; |
3164 | 3151 | ||
3165 | if (defined($config_bisect_check) && $config_bisect_check) { | 3152 | $ret = run_bisect_test $type, "useconfig:$good_config"; |
3166 | doprint " Checking to make sure bad config with min config fails\n"; | 3153 | if (!$ret) { |
3167 | create_config keys %config_list; | 3154 | fail "Good config failed when expected to succeed!"; |
3168 | $ret = run_config_bisect_test $config_bisect_type; | 3155 | return 0; |
3169 | if ($ret) { | 3156 | } |
3170 | doprint " FAILED! Bad config with min config boots fine\n"; | ||
3171 | return -1; | ||
3172 | } | 3157 | } |
3173 | doprint " Bad config with min config fails as expected\n"; | ||
3174 | } | 3158 | } |
3175 | 3159 | ||
3176 | do { | 3160 | do { |
3177 | $ret = run_config_bisect; | 3161 | $ret = run_config_bisect \%good_configs, \%bad_configs; |
3178 | } while (!$ret); | 3162 | } while (!$ret); |
3179 | 3163 | ||
3180 | return $ret if ($ret < 0); | 3164 | return $ret if ($ret < 0); |
@@ -3455,29 +3439,6 @@ sub read_depends { | |||
3455 | read_kconfig($kconfig); | 3439 | read_kconfig($kconfig); |
3456 | } | 3440 | } |
3457 | 3441 | ||
3458 | sub read_config_list { | ||
3459 | my ($config) = @_; | ||
3460 | |||
3461 | open (IN, $config) | ||
3462 | or dodie "Failed to read $config"; | ||
3463 | |||
3464 | while (<IN>) { | ||
3465 | if (/^((CONFIG\S*)=.*)/) { | ||
3466 | if (!defined($config_ignore{$2})) { | ||
3467 | $config_list{$2} = $1; | ||
3468 | } | ||
3469 | } | ||
3470 | } | ||
3471 | |||
3472 | close(IN); | ||
3473 | } | ||
3474 | |||
3475 | sub read_output_config { | ||
3476 | my ($config) = @_; | ||
3477 | |||
3478 | assign_configs \%config_ignore, $config; | ||
3479 | } | ||
3480 | |||
3481 | sub make_new_config { | 3442 | sub make_new_config { |
3482 | my @configs = @_; | 3443 | my @configs = @_; |
3483 | 3444 | ||
@@ -3863,7 +3824,7 @@ sub make_warnings_file { | |||
3863 | success $i; | 3824 | success $i; |
3864 | } | 3825 | } |
3865 | 3826 | ||
3866 | $#ARGV < 1 or die "ktest.pl version: $VERSION\n usage: ktest.pl config-file\n"; | 3827 | $#ARGV < 1 or die "ktest.pl version: $VERSION\n usage: ktest.pl [config-file]\n"; |
3867 | 3828 | ||
3868 | if ($#ARGV == 0) { | 3829 | if ($#ARGV == 0) { |
3869 | $ktest_config = $ARGV[0]; | 3830 | $ktest_config = $ARGV[0]; |
@@ -3873,8 +3834,6 @@ if ($#ARGV == 0) { | |||
3873 | exit 0; | 3834 | exit 0; |
3874 | } | 3835 | } |
3875 | } | 3836 | } |
3876 | } else { | ||
3877 | $ktest_config = "ktest.conf"; | ||
3878 | } | 3837 | } |
3879 | 3838 | ||
3880 | if (! -f $ktest_config) { | 3839 | if (! -f $ktest_config) { |
diff --git a/tools/testing/ktest/sample.conf b/tools/testing/ktest/sample.conf index 172eec4517fb..911e45ad657a 100644 --- a/tools/testing/ktest/sample.conf +++ b/tools/testing/ktest/sample.conf | |||
@@ -1098,49 +1098,35 @@ | |||
1098 | # | 1098 | # |
1099 | # The way it works is this: | 1099 | # The way it works is this: |
1100 | # | 1100 | # |
1101 | # First it finds a config to work with. Since a different version, or | 1101 | # You can specify a good config with CONFIG_BISECT_GOOD, otherwise it |
1102 | # MIN_CONFIG may cause different dependecies, it must run through this | 1102 | # will use the MIN_CONFIG, and if that's not specified, it will use |
1103 | # preparation. | 1103 | # the config that comes with "make defconfig". |
1104 | # | 1104 | # |
1105 | # Overwrites any config set in the bad config with a config set in | 1105 | # It runs both the good and bad configs through a make oldconfig to |
1106 | # either the MIN_CONFIG or ADD_CONFIG. Thus, make sure these configs | 1106 | # make sure that they are set up for the kernel that is checked out. |
1107 | # are minimal and do not disable configs you want to test: | ||
1108 | # (ie. # CONFIG_FOO is not set). | ||
1109 | # | 1107 | # |
1110 | # An oldconfig is run on the bad config and any new config that | 1108 | # It then reads the configs that are set, as well as the ones that are |
1111 | # appears will be added to the configs to test. | 1109 | # not set for both the good and bad configs, and then compares them. |
1110 | # It will set half of the good configs within the bad config (note, | ||
1111 | # "set" means to make the bad config match the good config, a config | ||
1112 | # in the good config that is off, will be turned off in the bad | ||
1113 | # config. That is considered a "set"). | ||
1112 | # | 1114 | # |
1113 | # Finally, it generates a config with the above result and runs it | 1115 | # It tests this new config and if it works, it becomes the new good |
1114 | # again through make oldconfig to produce a config that should be | 1116 | # config, otherwise it becomes the new bad config. It continues this |
1115 | # satisfied by kconfig. | 1117 | # process until there's only one config left and it will report that |
1118 | # config. | ||
1116 | # | 1119 | # |
1117 | # Then it starts the bisect. | 1120 | # The "bad config" can also be a config that is needed to boot but was |
1121 | # disabled because it depended on something that wasn't set. | ||
1118 | # | 1122 | # |
1119 | # The configs to test are cut in half. If all the configs in this | 1123 | # During this process, it saves the current good and bad configs in |
1120 | # half depend on a config in the other half, then the other half | 1124 | # ${TMP_DIR}/good_config and ${TMP_DIR}/bad_config respectively. |
1121 | # is tested instead. If no configs are enabled by either half, then | 1125 | # If you stop the test, you can copy them to a new location to |
1122 | # this means a circular dependency exists and the test fails. | 1126 | # reuse them again. |
1123 | # | 1127 | # |
1124 | # A config is created with the test half, and the bisect test is run. | 1128 | # Although the MIN_CONFIG may be the config it starts with, the |
1125 | # | 1129 | # MIN_CONFIG is ignored. |
1126 | # If the bisect succeeds, then all configs in the generated config | ||
1127 | # are removed from the configs to test and added to the configs that | ||
1128 | # will be enabled for all builds (they will be enabled, but not be part | ||
1129 | # of the configs to examine). | ||
1130 | # | ||
1131 | # If the bisect fails, then all test configs that were not enabled by | ||
1132 | # the config file are removed from the test. These configs will not | ||
1133 | # be enabled in future tests. Since current config failed, we consider | ||
1134 | # this to be a subset of the config that we started with. | ||
1135 | # | ||
1136 | # When we are down to one config, it is considered the bad config. | ||
1137 | # | ||
1138 | # Note, the config chosen may not be the true bad config. Due to | ||
1139 | # dependencies and selections of the kbuild system, mulitple | ||
1140 | # configs may be needed to cause a failure. If you disable the | ||
1141 | # config that was found and restart the test, if the test fails | ||
1142 | # again, it is recommended to rerun the config_bisect with a new | ||
1143 | # bad config without the found config enabled. | ||
1144 | # | 1130 | # |
1145 | # The option BUILD_TYPE will be ignored. | 1131 | # The option BUILD_TYPE will be ignored. |
1146 | # | 1132 | # |
@@ -1160,13 +1146,16 @@ | |||
1160 | # CONFIG_BISECT_GOOD (optional) | 1146 | # CONFIG_BISECT_GOOD (optional) |
1161 | # If you have a good config to start with, then you | 1147 | # If you have a good config to start with, then you |
1162 | # can specify it with CONFIG_BISECT_GOOD. Otherwise | 1148 | # can specify it with CONFIG_BISECT_GOOD. Otherwise |
1163 | # the MIN_CONFIG is the base. | 1149 | # the MIN_CONFIG is the base, if MIN_CONFIG is not set |
1150 | # It will build a config with "make defconfig" | ||
1164 | # | 1151 | # |
1165 | # CONFIG_BISECT_CHECK (optional) | 1152 | # CONFIG_BISECT_CHECK (optional) |
1166 | # Set this to 1 if you want to confirm that the config ktest | 1153 | # Set this to 1 if you want to confirm that the config ktest |
1167 | # generates (the bad config with the min config) is still bad. | 1154 | # generates (the bad config with the min config) is still bad. |
1168 | # It may be that the min config fixes what broke the bad config | 1155 | # It may be that the min config fixes what broke the bad config |
1169 | # and the test will not return a result. | 1156 | # and the test will not return a result. |
1157 | # Set it to "good" to test only the good config and set it | ||
1158 | # to "bad" to only test the bad config. | ||
1170 | # | 1159 | # |
1171 | # Example: | 1160 | # Example: |
1172 | # TEST_START | 1161 | # TEST_START |
diff --git a/tools/testing/selftests/rcutorture/bin/kvm-recheck.sh b/tools/testing/selftests/rcutorture/bin/kvm-recheck.sh index ee1f6cae3d70..3f6c9b78d177 100755 --- a/tools/testing/selftests/rcutorture/bin/kvm-recheck.sh +++ b/tools/testing/selftests/rcutorture/bin/kvm-recheck.sh | |||
@@ -54,10 +54,16 @@ do | |||
54 | if test -f "$i/qemu-cmd" | 54 | if test -f "$i/qemu-cmd" |
55 | then | 55 | then |
56 | print_bug qemu failed | 56 | print_bug qemu failed |
57 | echo " $i" | ||
58 | elif test -f "$i/buildonly" | ||
59 | then | ||
60 | echo Build-only run, no boot/test | ||
61 | configcheck.sh $i/.config $i/ConfigFragment | ||
62 | parse-build.sh $i/Make.out $configfile | ||
57 | else | 63 | else |
58 | print_bug Build failed | 64 | print_bug Build failed |
65 | echo " $i" | ||
59 | fi | 66 | fi |
60 | echo " $i" | ||
61 | fi | 67 | fi |
62 | done | 68 | done |
63 | done | 69 | done |
diff --git a/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh b/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh index 27e544e29510..0f69dcbf9def 100755 --- a/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh +++ b/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh | |||
@@ -42,6 +42,7 @@ grace=120 | |||
42 | 42 | ||
43 | T=/tmp/kvm-test-1-run.sh.$$ | 43 | T=/tmp/kvm-test-1-run.sh.$$ |
44 | trap 'rm -rf $T' 0 | 44 | trap 'rm -rf $T' 0 |
45 | touch $T | ||
45 | 46 | ||
46 | . $KVM/bin/functions.sh | 47 | . $KVM/bin/functions.sh |
47 | . $KVPATH/ver_functions.sh | 48 | . $KVPATH/ver_functions.sh |
@@ -131,7 +132,10 @@ boot_args=$6 | |||
131 | 132 | ||
132 | cd $KVM | 133 | cd $KVM |
133 | kstarttime=`awk 'BEGIN { print systime() }' < /dev/null` | 134 | kstarttime=`awk 'BEGIN { print systime() }' < /dev/null` |
134 | echo ' ---' `date`: Starting kernel | 135 | if test -z "$TORTURE_BUILDONLY" |
136 | then | ||
137 | echo ' ---' `date`: Starting kernel | ||
138 | fi | ||
135 | 139 | ||
136 | # Generate -smp qemu argument. | 140 | # Generate -smp qemu argument. |
137 | qemu_args="-nographic $qemu_args" | 141 | qemu_args="-nographic $qemu_args" |
@@ -157,12 +161,13 @@ boot_args="`configfrag_boot_params "$boot_args" "$config_template"`" | |||
157 | # Generate kernel-version-specific boot parameters | 161 | # Generate kernel-version-specific boot parameters |
158 | boot_args="`per_version_boot_params "$boot_args" $builddir/.config $seconds`" | 162 | boot_args="`per_version_boot_params "$boot_args" $builddir/.config $seconds`" |
159 | 163 | ||
160 | echo $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd | ||
161 | if test -n "$TORTURE_BUILDONLY" | 164 | if test -n "$TORTURE_BUILDONLY" |
162 | then | 165 | then |
163 | echo Build-only run specified, boot/test omitted. | 166 | echo Build-only run specified, boot/test omitted. |
167 | touch $resdir/buildonly | ||
164 | exit 0 | 168 | exit 0 |
165 | fi | 169 | fi |
170 | echo $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd | ||
166 | ( $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) & | 171 | ( $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) & |
167 | qemu_pid=$! | 172 | qemu_pid=$! |
168 | commandcompleted=0 | 173 | commandcompleted=0 |
diff --git a/tools/testing/selftests/rcutorture/bin/kvm.sh b/tools/testing/selftests/rcutorture/bin/kvm.sh index 40285c58653e..589e9c38413b 100644 --- a/tools/testing/selftests/rcutorture/bin/kvm.sh +++ b/tools/testing/selftests/rcutorture/bin/kvm.sh | |||
@@ -340,12 +340,18 @@ function dump(first, pastlast) | |||
340 | for (j = 1; j < jn; j++) { | 340 | for (j = 1; j < jn; j++) { |
341 | builddir=KVM "/b" j | 341 | builddir=KVM "/b" j |
342 | print "rm -f " builddir ".ready" | 342 | print "rm -f " builddir ".ready" |
343 | print "echo ----", cfr[j], cpusr[j] ovf ": Starting kernel. `date`"; | 343 | print "if test -z \"$TORTURE_BUILDONLY\"" |
344 | print "echo ----", cfr[j], cpusr[j] ovf ": Starting kernel. `date` >> " rd "/log"; | 344 | print "then" |
345 | print "\techo ----", cfr[j], cpusr[j] ovf ": Starting kernel. `date`"; | ||
346 | print "\techo ----", cfr[j], cpusr[j] ovf ": Starting kernel. `date` >> " rd "/log"; | ||
347 | print "fi" | ||
345 | } | 348 | } |
346 | print "wait" | 349 | print "wait" |
347 | print "echo ---- All kernel runs complete. `date`"; | 350 | print "if test -z \"$TORTURE_BUILDONLY\"" |
348 | print "echo ---- All kernel runs complete. `date` >> " rd "/log"; | 351 | print "then" |
352 | print "\techo ---- All kernel runs complete. `date`"; | ||
353 | print "\techo ---- All kernel runs complete. `date` >> " rd "/log"; | ||
354 | print "fi" | ||
349 | for (j = 1; j < jn; j++) { | 355 | for (j = 1; j < jn; j++) { |
350 | builddir=KVM "/b" j | 356 | builddir=KVM "/b" j |
351 | print "echo ----", cfr[j], cpusr[j] ovf ": Build/run results:"; | 357 | print "echo ----", cfr[j], cpusr[j] ovf ": Build/run results:"; |
@@ -385,10 +391,7 @@ echo | |||
385 | echo | 391 | echo |
386 | echo " --- `date` Test summary:" | 392 | echo " --- `date` Test summary:" |
387 | echo Results directory: $resdir/$ds | 393 | echo Results directory: $resdir/$ds |
388 | if test -z "$TORTURE_BUILDONLY" | 394 | kvm-recheck.sh $resdir/$ds |
389 | then | ||
390 | kvm-recheck.sh $resdir/$ds | ||
391 | fi | ||
392 | ___EOF___ | 395 | ___EOF___ |
393 | 396 | ||
394 | if test "$dryrun" = script | 397 | if test "$dryrun" = script |
@@ -403,7 +406,7 @@ then | |||
403 | sed -e 's/:.*$//' -e 's/^echo //' | 406 | sed -e 's/:.*$//' -e 's/^echo //' |
404 | exit 0 | 407 | exit 0 |
405 | else | 408 | else |
406 | # Not a dryru, so run the script. | 409 | # Not a dryrun, so run the script. |
407 | sh $T/script | 410 | sh $T/script |
408 | fi | 411 | fi |
409 | 412 | ||
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE01 b/tools/testing/selftests/rcutorture/configs/rcu/TREE01 index 9c827ec59a97..063b7079c621 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE01 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE01 | |||
@@ -15,7 +15,6 @@ CONFIG_RCU_FANOUT_EXACT=n | |||
15 | CONFIG_RCU_NOCB_CPU=y | 15 | CONFIG_RCU_NOCB_CPU=y |
16 | CONFIG_RCU_NOCB_CPU_ZERO=y | 16 | CONFIG_RCU_NOCB_CPU_ZERO=y |
17 | CONFIG_DEBUG_LOCK_ALLOC=n | 17 | CONFIG_DEBUG_LOCK_ALLOC=n |
18 | CONFIG_PROVE_RCU_DELAY=n | ||
19 | CONFIG_RCU_CPU_STALL_INFO=n | 18 | CONFIG_RCU_CPU_STALL_INFO=n |
20 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 19 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
21 | CONFIG_RCU_BOOST=n | 20 | CONFIG_RCU_BOOST=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE02 b/tools/testing/selftests/rcutorture/configs/rcu/TREE02 index 1a777b5f68b5..ea119ba2f7d4 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE02 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE02 | |||
@@ -18,7 +18,6 @@ CONFIG_RCU_FANOUT_EXACT=n | |||
18 | CONFIG_RCU_NOCB_CPU=n | 18 | CONFIG_RCU_NOCB_CPU=n |
19 | CONFIG_DEBUG_LOCK_ALLOC=y | 19 | CONFIG_DEBUG_LOCK_ALLOC=y |
20 | CONFIG_PROVE_LOCKING=n | 20 | CONFIG_PROVE_LOCKING=n |
21 | CONFIG_PROVE_RCU_DELAY=n | ||
22 | CONFIG_RCU_CPU_STALL_INFO=n | 21 | CONFIG_RCU_CPU_STALL_INFO=n |
23 | CONFIG_RCU_CPU_STALL_VERBOSE=y | 22 | CONFIG_RCU_CPU_STALL_VERBOSE=y |
24 | CONFIG_RCU_BOOST=n | 23 | CONFIG_RCU_BOOST=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE02-T b/tools/testing/selftests/rcutorture/configs/rcu/TREE02-T index 61c8d9ce5bb2..19cf9485f48a 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE02-T +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE02-T | |||
@@ -18,7 +18,6 @@ CONFIG_RCU_FANOUT_EXACT=n | |||
18 | CONFIG_RCU_NOCB_CPU=n | 18 | CONFIG_RCU_NOCB_CPU=n |
19 | CONFIG_DEBUG_LOCK_ALLOC=y | 19 | CONFIG_DEBUG_LOCK_ALLOC=y |
20 | CONFIG_PROVE_LOCKING=n | 20 | CONFIG_PROVE_LOCKING=n |
21 | CONFIG_PROVE_RCU_DELAY=n | ||
22 | CONFIG_RCU_CPU_STALL_INFO=n | 21 | CONFIG_RCU_CPU_STALL_INFO=n |
23 | CONFIG_RCU_CPU_STALL_VERBOSE=y | 22 | CONFIG_RCU_CPU_STALL_VERBOSE=y |
24 | CONFIG_RCU_BOOST=n | 23 | CONFIG_RCU_BOOST=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE03 b/tools/testing/selftests/rcutorture/configs/rcu/TREE03 index c1f111c1561b..f4567fb3e332 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE03 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE03 | |||
@@ -14,7 +14,6 @@ CONFIG_RCU_FANOUT_LEAF=4 | |||
14 | CONFIG_RCU_FANOUT_EXACT=n | 14 | CONFIG_RCU_FANOUT_EXACT=n |
15 | CONFIG_RCU_NOCB_CPU=n | 15 | CONFIG_RCU_NOCB_CPU=n |
16 | CONFIG_DEBUG_LOCK_ALLOC=n | 16 | CONFIG_DEBUG_LOCK_ALLOC=n |
17 | CONFIG_PROVE_RCU_DELAY=n | ||
18 | CONFIG_RCU_CPU_STALL_INFO=n | 17 | CONFIG_RCU_CPU_STALL_INFO=n |
19 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 18 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
20 | CONFIG_RCU_BOOST=y | 19 | CONFIG_RCU_BOOST=y |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE04 b/tools/testing/selftests/rcutorture/configs/rcu/TREE04 index 7dbd27ce17a4..0a262fbb0c12 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE04 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE04 | |||
@@ -18,7 +18,6 @@ CONFIG_RCU_FANOUT_LEAF=2 | |||
18 | CONFIG_RCU_FANOUT_EXACT=n | 18 | CONFIG_RCU_FANOUT_EXACT=n |
19 | CONFIG_RCU_NOCB_CPU=n | 19 | CONFIG_RCU_NOCB_CPU=n |
20 | CONFIG_DEBUG_LOCK_ALLOC=n | 20 | CONFIG_DEBUG_LOCK_ALLOC=n |
21 | CONFIG_PROVE_RCU_DELAY=n | ||
22 | CONFIG_RCU_CPU_STALL_INFO=y | 21 | CONFIG_RCU_CPU_STALL_INFO=y |
23 | CONFIG_RCU_CPU_STALL_VERBOSE=y | 22 | CONFIG_RCU_CPU_STALL_VERBOSE=y |
24 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=n | 23 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE05 b/tools/testing/selftests/rcutorture/configs/rcu/TREE05 index d0f32e574743..3a06b97e9a73 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE05 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE05 | |||
@@ -18,7 +18,6 @@ CONFIG_RCU_NOCB_CPU_NONE=y | |||
18 | CONFIG_DEBUG_LOCK_ALLOC=y | 18 | CONFIG_DEBUG_LOCK_ALLOC=y |
19 | CONFIG_PROVE_LOCKING=y | 19 | CONFIG_PROVE_LOCKING=y |
20 | CONFIG_PROVE_RCU=y | 20 | CONFIG_PROVE_RCU=y |
21 | CONFIG_PROVE_RCU_DELAY=y | ||
22 | CONFIG_RCU_CPU_STALL_INFO=n | 21 | CONFIG_RCU_CPU_STALL_INFO=n |
23 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 22 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
24 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=n | 23 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE06 b/tools/testing/selftests/rcutorture/configs/rcu/TREE06 index 2e477dfb9c57..8f084cca91bf 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE06 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE06 | |||
@@ -19,7 +19,6 @@ CONFIG_RCU_NOCB_CPU=n | |||
19 | CONFIG_DEBUG_LOCK_ALLOC=y | 19 | CONFIG_DEBUG_LOCK_ALLOC=y |
20 | CONFIG_PROVE_LOCKING=y | 20 | CONFIG_PROVE_LOCKING=y |
21 | CONFIG_PROVE_RCU=y | 21 | CONFIG_PROVE_RCU=y |
22 | CONFIG_PROVE_RCU_DELAY=n | ||
23 | CONFIG_RCU_CPU_STALL_INFO=n | 22 | CONFIG_RCU_CPU_STALL_INFO=n |
24 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 23 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
25 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y | 24 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE07 b/tools/testing/selftests/rcutorture/configs/rcu/TREE07 index 042f86ef362a..ab6225506909 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE07 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE07 | |||
@@ -17,7 +17,6 @@ CONFIG_RCU_FANOUT_LEAF=2 | |||
17 | CONFIG_RCU_FANOUT_EXACT=n | 17 | CONFIG_RCU_FANOUT_EXACT=n |
18 | CONFIG_RCU_NOCB_CPU=n | 18 | CONFIG_RCU_NOCB_CPU=n |
19 | CONFIG_DEBUG_LOCK_ALLOC=n | 19 | CONFIG_DEBUG_LOCK_ALLOC=n |
20 | CONFIG_PROVE_RCU_DELAY=n | ||
21 | CONFIG_RCU_CPU_STALL_INFO=y | 20 | CONFIG_RCU_CPU_STALL_INFO=y |
22 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 21 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
23 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=n | 22 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE08 b/tools/testing/selftests/rcutorture/configs/rcu/TREE08 index 3438cee1e3c5..69a2e255bf98 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE08 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE08 | |||
@@ -18,7 +18,6 @@ CONFIG_RCU_FANOUT_LEAF=2 | |||
18 | CONFIG_RCU_NOCB_CPU=y | 18 | CONFIG_RCU_NOCB_CPU=y |
19 | CONFIG_RCU_NOCB_CPU_ALL=y | 19 | CONFIG_RCU_NOCB_CPU_ALL=y |
20 | CONFIG_DEBUG_LOCK_ALLOC=n | 20 | CONFIG_DEBUG_LOCK_ALLOC=n |
21 | CONFIG_PROVE_RCU_DELAY=n | ||
22 | CONFIG_RCU_CPU_STALL_INFO=n | 21 | CONFIG_RCU_CPU_STALL_INFO=n |
23 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 22 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
24 | CONFIG_RCU_BOOST=n | 23 | CONFIG_RCU_BOOST=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE08-T b/tools/testing/selftests/rcutorture/configs/rcu/TREE08-T index bf4523d3e44c..a0f32fb8f17e 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE08-T +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE08-T | |||
@@ -18,7 +18,6 @@ CONFIG_RCU_FANOUT_LEAF=2 | |||
18 | CONFIG_RCU_NOCB_CPU=y | 18 | CONFIG_RCU_NOCB_CPU=y |
19 | CONFIG_RCU_NOCB_CPU_ALL=y | 19 | CONFIG_RCU_NOCB_CPU_ALL=y |
20 | CONFIG_DEBUG_LOCK_ALLOC=n | 20 | CONFIG_DEBUG_LOCK_ALLOC=n |
21 | CONFIG_PROVE_RCU_DELAY=n | ||
22 | CONFIG_RCU_CPU_STALL_INFO=n | 21 | CONFIG_RCU_CPU_STALL_INFO=n |
23 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 22 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
24 | CONFIG_RCU_BOOST=n | 23 | CONFIG_RCU_BOOST=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE09 b/tools/testing/selftests/rcutorture/configs/rcu/TREE09 index 81e4f7c0bf0b..b7a62a540ad1 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE09 +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE09 | |||
@@ -13,7 +13,6 @@ CONFIG_SUSPEND=n | |||
13 | CONFIG_HIBERNATION=n | 13 | CONFIG_HIBERNATION=n |
14 | CONFIG_RCU_NOCB_CPU=n | 14 | CONFIG_RCU_NOCB_CPU=n |
15 | CONFIG_DEBUG_LOCK_ALLOC=n | 15 | CONFIG_DEBUG_LOCK_ALLOC=n |
16 | CONFIG_PROVE_RCU_DELAY=n | ||
17 | CONFIG_RCU_CPU_STALL_INFO=n | 16 | CONFIG_RCU_CPU_STALL_INFO=n |
18 | CONFIG_RCU_CPU_STALL_VERBOSE=n | 17 | CONFIG_RCU_CPU_STALL_VERBOSE=n |
19 | CONFIG_RCU_BOOST=n | 18 | CONFIG_RCU_BOOST=n |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp b/tools/testing/selftests/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp index ef624ce73d8e..a55c00877fe4 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp +++ b/tools/testing/selftests/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp | |||
@@ -13,7 +13,6 @@ CONFIG_PREEMPT_VOLUNTARY=n | |||
13 | CONFIG_PREEMPT=y | 13 | CONFIG_PREEMPT=y |
14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y | 14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y |
15 | CONFIG_DEBUG_KERNEL=y | 15 | CONFIG_DEBUG_KERNEL=y |
16 | CONFIG_PROVE_RCU_DELAY=y | ||
17 | CONFIG_DEBUG_OBJECTS=y | 16 | CONFIG_DEBUG_OBJECTS=y |
18 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y | 17 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y |
19 | CONFIG_RT_MUTEXES=y | 18 | CONFIG_RT_MUTEXES=y |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp b/tools/testing/selftests/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp index ef624ce73d8e..a55c00877fe4 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp +++ b/tools/testing/selftests/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp | |||
@@ -13,7 +13,6 @@ CONFIG_PREEMPT_VOLUNTARY=n | |||
13 | CONFIG_PREEMPT=y | 13 | CONFIG_PREEMPT=y |
14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y | 14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y |
15 | CONFIG_DEBUG_KERNEL=y | 15 | CONFIG_DEBUG_KERNEL=y |
16 | CONFIG_PROVE_RCU_DELAY=y | ||
17 | CONFIG_DEBUG_OBJECTS=y | 16 | CONFIG_DEBUG_OBJECTS=y |
18 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y | 17 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y |
19 | CONFIG_RT_MUTEXES=y | 18 | CONFIG_RT_MUTEXES=y |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp b/tools/testing/selftests/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp index ef624ce73d8e..a55c00877fe4 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp +++ b/tools/testing/selftests/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp | |||
@@ -13,7 +13,6 @@ CONFIG_PREEMPT_VOLUNTARY=n | |||
13 | CONFIG_PREEMPT=y | 13 | CONFIG_PREEMPT=y |
14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y | 14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y |
15 | CONFIG_DEBUG_KERNEL=y | 15 | CONFIG_DEBUG_KERNEL=y |
16 | CONFIG_PROVE_RCU_DELAY=y | ||
17 | CONFIG_DEBUG_OBJECTS=y | 16 | CONFIG_DEBUG_OBJECTS=y |
18 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y | 17 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y |
19 | CONFIG_RT_MUTEXES=y | 18 | CONFIG_RT_MUTEXES=y |
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp b/tools/testing/selftests/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp index ef624ce73d8e..a55c00877fe4 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp +++ b/tools/testing/selftests/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp | |||
@@ -13,7 +13,6 @@ CONFIG_PREEMPT_VOLUNTARY=n | |||
13 | CONFIG_PREEMPT=y | 13 | CONFIG_PREEMPT=y |
14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y | 14 | #CHECK#CONFIG_TREE_PREEMPT_RCU=y |
15 | CONFIG_DEBUG_KERNEL=y | 15 | CONFIG_DEBUG_KERNEL=y |
16 | CONFIG_PROVE_RCU_DELAY=y | ||
17 | CONFIG_DEBUG_OBJECTS=y | 16 | CONFIG_DEBUG_OBJECTS=y |
18 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y | 17 | CONFIG_DEBUG_OBJECTS_RCU_HEAD=y |
19 | CONFIG_RT_MUTEXES=y | 18 | CONFIG_RT_MUTEXES=y |
diff --git a/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt b/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt index adbb76cffb49..3e588db86a17 100644 --- a/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt +++ b/tools/testing/selftests/rcutorture/doc/TREE_RCU-kconfig.txt | |||
@@ -14,7 +14,6 @@ CONFIG_NO_HZ_FULL_SYSIDLE -- Do one. | |||
14 | CONFIG_PREEMPT -- Do half. (First three and #8.) | 14 | CONFIG_PREEMPT -- Do half. (First three and #8.) |
15 | CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not. | 15 | CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not. |
16 | CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING. | 16 | CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING. |
17 | CONFIG_PROVE_RCU_DELAY -- Do one. | ||
18 | CONFIG_RCU_BOOST -- one of TREE_PREEMPT_RCU. | 17 | CONFIG_RCU_BOOST -- one of TREE_PREEMPT_RCU. |
19 | CONFIG_RCU_BOOST_PRIO -- set to 2 for _BOOST testing. | 18 | CONFIG_RCU_BOOST_PRIO -- set to 2 for _BOOST testing. |
20 | CONFIG_RCU_CPU_STALL_INFO -- do one with and without _VERBOSE. | 19 | CONFIG_RCU_CPU_STALL_INFO -- do one with and without _VERBOSE. |