From acb1ba7170ce2a5c91ccaa197eb9e1c450e0d73a Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Mon, 7 Aug 2023 17:13:24 +0200 Subject: pkg/vcs: don't supress rcu stall reports twice First check if the cmdline config is already present. --- pkg/vcs/linux_configs.go | 10 +++++----- pkg/vcs/linux_configs_test.go | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) (limited to 'pkg/vcs') 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 { -- cgit mrf-deployment