diff options
| -rwxr-xr-x | tools/testing/ktest/ktest.pl | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl index 8ce58d715aef..5ad891a08113 100755 --- a/tools/testing/ktest/ktest.pl +++ b/tools/testing/ktest/ktest.pl | |||
| @@ -189,6 +189,9 @@ my $newconfig = 0; | |||
| 189 | my %entered_configs; | 189 | my %entered_configs; |
| 190 | my %config_help; | 190 | my %config_help; |
| 191 | my %variable; | 191 | my %variable; |
| 192 | |||
| 193 | # force_config is the list of configs that we force enabled (or disabled) | ||
| 194 | # in a .config file. The MIN_CONFIG and ADD_CONFIG configs. | ||
| 192 | my %force_config; | 195 | my %force_config; |
| 193 | 196 | ||
| 194 | # do not force reboots on config problems | 197 | # do not force reboots on config problems |
| @@ -1837,6 +1840,7 @@ sub make_oldconfig { | |||
| 1837 | sub load_force_config { | 1840 | sub load_force_config { |
| 1838 | my ($config) = @_; | 1841 | my ($config) = @_; |
| 1839 | 1842 | ||
| 1843 | doprint "Loading force configs from $config\n"; | ||
| 1840 | open(IN, $config) or | 1844 | open(IN, $config) or |
| 1841 | dodie "failed to read $config"; | 1845 | dodie "failed to read $config"; |
| 1842 | while (<IN>) { | 1846 | while (<IN>) { |
| @@ -2389,9 +2393,24 @@ sub bisect { | |||
| 2389 | success $i; | 2393 | success $i; |
| 2390 | } | 2394 | } |
| 2391 | 2395 | ||
| 2396 | # config_ignore holds the configs that were set (or unset) for | ||
| 2397 | # a good config and we will ignore these configs for the rest | ||
| 2398 | # of a config bisect. These configs stay as they were. | ||
| 2392 | my %config_ignore; | 2399 | my %config_ignore; |
| 2400 | |||
| 2401 | # config_set holds what all configs were set as. | ||
| 2393 | my %config_set; | 2402 | my %config_set; |
| 2394 | 2403 | ||
| 2404 | # config_off holds the set of configs that the bad config had disabled. | ||
| 2405 | # We need to record them and set them in the .config when running | ||
| 2406 | # oldnoconfig, because oldnoconfig does not turn off new symbols, but | ||
| 2407 | # instead just keeps the defaults. | ||
| 2408 | my %config_off; | ||
| 2409 | |||
| 2410 | # config_off_tmp holds a set of configs to turn off for now | ||
| 2411 | my @config_off_tmp; | ||
| 2412 | |||
| 2413 | # config_list is the set of configs that are being tested | ||
| 2395 | my %config_list; | 2414 | my %config_list; |
| 2396 | my %null_config; | 2415 | my %null_config; |
| 2397 | 2416 | ||
| @@ -2470,6 +2489,16 @@ sub create_config { | |||
| 2470 | } | 2489 | } |
| 2471 | } | 2490 | } |
| 2472 | 2491 | ||
| 2492 | # turn off configs to keep off | ||
| 2493 | foreach my $config (keys %config_off) { | ||
| 2494 | print OUT "# $config is not set\n"; | ||
| 2495 | } | ||
| 2496 | |||
| 2497 | # turn off configs that should be off for now | ||
| 2498 | foreach my $config (@config_off_tmp) { | ||
| 2499 | print OUT "# $config is not set\n"; | ||
| 2500 | } | ||
| 2501 | |||
| 2473 | foreach my $config (keys %config_ignore) { | 2502 | foreach my $config (keys %config_ignore) { |
| 2474 | print OUT "$config_ignore{$config}\n"; | 2503 | print OUT "$config_ignore{$config}\n"; |
| 2475 | } | 2504 | } |
| @@ -2551,6 +2580,13 @@ sub run_config_bisect { | |||
| 2551 | do { | 2580 | do { |
| 2552 | my @tophalf = @start_list[0 .. $half]; | 2581 | my @tophalf = @start_list[0 .. $half]; |
| 2553 | 2582 | ||
| 2583 | # keep the bottom half off | ||
| 2584 | if ($half < $#start_list) { | ||
| 2585 | @config_off_tmp = @start_list[$half + 1 .. $#start_list]; | ||
| 2586 | } else { | ||
| 2587 | @config_off_tmp = (); | ||
| 2588 | } | ||
| 2589 | |||
| 2554 | create_config @tophalf; | 2590 | create_config @tophalf; |
| 2555 | read_current_config \%current_config; | 2591 | read_current_config \%current_config; |
| 2556 | 2592 | ||
| @@ -2567,7 +2603,11 @@ sub run_config_bisect { | |||
| 2567 | if (!$found) { | 2603 | if (!$found) { |
| 2568 | # try the other half | 2604 | # try the other half |
| 2569 | doprint "Top half produced no set configs, trying bottom half\n"; | 2605 | doprint "Top half produced no set configs, trying bottom half\n"; |
| 2606 | |||
| 2607 | # keep the top half off | ||
| 2608 | @config_off_tmp = @tophalf; | ||
| 2570 | @tophalf = @start_list[$half + 1 .. $#start_list]; | 2609 | @tophalf = @start_list[$half + 1 .. $#start_list]; |
| 2610 | |||
| 2571 | create_config @tophalf; | 2611 | create_config @tophalf; |
| 2572 | read_current_config \%current_config; | 2612 | read_current_config \%current_config; |
| 2573 | foreach my $config (@tophalf) { | 2613 | foreach my $config (@tophalf) { |
| @@ -2705,6 +2745,10 @@ sub config_bisect { | |||
| 2705 | $added_configs{$2} = $1; | 2745 | $added_configs{$2} = $1; |
| 2706 | $config_list{$2} = $1; | 2746 | $config_list{$2} = $1; |
| 2707 | } | 2747 | } |
| 2748 | } elsif (/^# ((CONFIG\S*).*)/) { | ||
| 2749 | # Keep these configs disabled | ||
| 2750 | $config_set{$2} = $1; | ||
| 2751 | $config_off{$2} = $1; | ||
| 2708 | } | 2752 | } |
| 2709 | } | 2753 | } |
| 2710 | close(IN); | 2754 | close(IN); |
| @@ -2727,6 +2771,8 @@ sub config_bisect { | |||
| 2727 | my %config_test; | 2771 | my %config_test; |
| 2728 | my $once = 0; | 2772 | my $once = 0; |
| 2729 | 2773 | ||
| 2774 | @config_off_tmp = (); | ||
| 2775 | |||
| 2730 | # Sometimes kconfig does weird things. We must make sure | 2776 | # Sometimes kconfig does weird things. We must make sure |
| 2731 | # that the config we autocreate has everything we need | 2777 | # that the config we autocreate has everything we need |
| 2732 | # to test, otherwise we may miss testing configs, or | 2778 | # to test, otherwise we may miss testing configs, or |
