aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/bisect/bisect.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-07-01 22:51:28 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-07-02 10:56:05 +0200
commitf30c14bfec4b49e528a756b28cc010925e2f286b (patch)
tree4a9a565f0719db6450e0832cfb09ec6b50254548 /pkg/bisect/bisect.go
parent39ffeee9d8f9f2d27899311d06591a7ffaba3b26 (diff)
pkg/bisect: fix noop change detection with config minimization
Config minimization did not update test results for the starting commit. Test result for the starting commit still refered to the original config, not the minimized config that was actually used during bisection.
Diffstat (limited to 'pkg/bisect/bisect.go')
-rw-r--r--pkg/bisect/bisect.go41
1 files changed, 23 insertions, 18 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index 6cbf5afe5..cbe0fe27f 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -210,9 +210,13 @@ func (env *env) bisect() (*Result, error) {
}
if len(cfg.Kernel.BaselineConfig) != 0 {
- if err := env.minimizeConfig(); err != nil {
+ testRes1, err := env.minimizeConfig()
+ if err != nil {
return nil, err
}
+ if testRes1 != nil {
+ testRes = testRes1
+ }
}
bad, good, rep1, results1, err := env.commitRange()
@@ -277,7 +281,7 @@ func (env *env) bisect() (*Result, error) {
return res, nil
}
-func (env *env) minimizeConfig() error {
+func (env *env) minimizeConfig() (*testResult, error) {
cfg := env.cfg
// Check if crash reproduces with baseline config.
env.kernelConfig = cfg.Kernel.BaselineConfig
@@ -285,16 +289,16 @@ func (env *env) minimizeConfig() error {
if err != nil {
env.log("testing baseline config failed: %v", err)
env.kernelConfig = cfg.Kernel.Config
- return err
+ return nil, err
}
if testRes.verdict == vcs.BisectBad {
env.log("crash reproduces with baseline config")
- return nil
+ return testRes, nil
}
if testRes.verdict == vcs.BisectSkip {
env.log("unable to test using baseline config, keep original config")
env.kernelConfig = cfg.Kernel.Config
- return nil
+ return nil, nil
}
predMinimize := func(test []byte) (vcs.BisectResult, error) {
env.kernelConfig = test
@@ -309,21 +313,22 @@ func (env *env) minimizeConfig() error {
cfg.Kernel.BaselineConfig, cfg.Trace, predMinimize)
if err != nil {
env.log("minimizing config failed: %v", err)
- return err
+ return nil, err
}
- if !bytes.Equal(env.kernelConfig, cfg.Kernel.Config) {
- // Check that crash is really reproduced with generated config.
- testRes, err = env.test()
- if err != nil {
- return fmt.Errorf("testing generated minimized config failed: %v", err)
- }
- if testRes.verdict != vcs.BisectBad {
- env.log("testing with generated minimized config doesn't reproduce the crash")
- env.kernelConfig = cfg.Kernel.Config
- return nil
- }
+ if bytes.Equal(env.kernelConfig, cfg.Kernel.Config) {
+ return nil, nil
}
- return nil
+ // Check that crash is really reproduced with generated config.
+ testRes, err = env.test()
+ if err != nil {
+ return nil, fmt.Errorf("testing generated minimized config failed: %v", err)
+ }
+ if testRes.verdict != vcs.BisectBad {
+ env.log("testing with generated minimized config doesn't reproduce the crash")
+ env.kernelConfig = cfg.Kernel.Config
+ return nil, nil
+ }
+ return testRes, nil
}
func (env *env) detectNoopChange(results map[string]*testResult, com *vcs.Commit) (bool, error) {