aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/vcs
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-08-07 17:13:24 +0200
committerAleksandr Nogikh <nogikh@google.com>2023-08-18 09:43:19 +0000
commitacb1ba7170ce2a5c91ccaa197eb9e1c450e0d73a (patch)
treecf39fe12589acae3b9cea91f62e2a49be0085090 /pkg/vcs
parent937e0ad7e36d66e10113314ad967fb5c929805f3 (diff)
pkg/vcs: don't supress rcu stall reports twice
First check if the cmdline config is already present.
Diffstat (limited to 'pkg/vcs')
-rw-r--r--pkg/vcs/linux_configs.go10
-rw-r--r--pkg/vcs/linux_configs_test.go18
2 files changed, 23 insertions, 5 deletions
diff --git a/pkg/vcs/linux_configs.go b/pkg/vcs/linux_configs.go
index 3d75bc509..8d972edd3 100644
--- a/pkg/vcs/linux_configs.go
+++ b/pkg/vcs/linux_configs.go
@@ -107,11 +107,11 @@ func setLinuxSanitizerConfigs(cf *kconfig.ConfigFile, types []crash.Type, dt deb
cf.Unset("HARDLOCKUP_DETECTOR")
cf.Unset("DETECT_HUNG_TASK")
// It looks like it's the only reliable way to completely disable hung errors.
- val := cf.Value("CMDLINE")
- pos := strings.LastIndexByte(val, '"')
- if pos >= 0 {
- cf.Set("CMDLINE",
- val[:pos]+" rcupdate.rcu_cpu_stall_suppress=1"+val[pos:])
+ cmdline := cf.Value("CMDLINE")
+ pos := strings.LastIndexByte(cmdline, '"')
+ const rcuStallSuppress = "rcupdate.rcu_cpu_stall_suppress=1"
+ if pos >= 0 && !strings.Contains(cmdline, rcuStallSuppress) {
+ cf.Set("CMDLINE", cmdline[:pos]+" "+rcuStallSuppress+cmdline[pos:])
}
},
crash.MemoryLeak: func() { cf.Unset("DEBUG_KMEMLEAK") },
diff --git a/pkg/vcs/linux_configs_test.go b/pkg/vcs/linux_configs_test.go
index 378714174..80be75db7 100644
--- a/pkg/vcs/linux_configs_test.go
+++ b/pkg/vcs/linux_configs_test.go
@@ -83,6 +83,24 @@ CONFIG_PROVE_LOCKING=y
}
}
+// Ensure we don't add "rcupdate.rcu_cpu_stall_suppress=1" twice.
+func TestNoDoubleRcuSuppress(t *testing.T) {
+ const base = `
+CONFIG_CMDLINE="param1=a rcupdate.rcu_cpu_stall_suppress=1 param2=b"
+CONFIG_BUG=y
+CONFIG_KASAN=y
+`
+ conf, err := kconfig.ParseConfigData([]byte(base), "base")
+ if err != nil {
+ t.Fatal(err)
+ }
+ setLinuxSanitizerConfigs(conf, []crash.Type{crash.Warning}, &debugtracer.NullTracer{})
+ assert.Equal(t,
+ `"param1=a rcupdate.rcu_cpu_stall_suppress=1 param2=b"`,
+ conf.Value("CMDLINE"),
+ )
+}
+
func assertConfigs(t *testing.T, cf *kconfig.ConfigFile, names ...string) {
var setConfigs []string
for _, name := range names {