Messages in this thread Patch in this message | | | From | lizhe.67@bytedanc ... | Subject | [PATCH v2] softlockup: serialized softlockup's log | Date | Wed, 22 Nov 2023 18:02:12 +0800 |
| |
From: Li Zhe <lizhe.67@bytedance.com>
If multiple CPUs trigger softlockup at the same time with 'softlockup_all_cpu_backtrace=0', the softlockup's logs will appear staggeredly in dmesg, which will affect the viewing of the logs for developer. Since the code path for outputting softlockup logs is not a kernel hotspot and the performance requirements for the code are not strict, locks are used to serialize the softlockup log output to improve the readability of the logs.
Signed-off-by: Li Zhe <lizhe.67@bytedance.com> --- Changelogs:
v1->v2: - define the lock outside the scope of function - add precondition 'softlockup_all_cpu_backtrace=0' in commit message
kernel/watchdog.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/kernel/watchdog.c b/kernel/watchdog.c index 5cd6d4e26915..6c80dd8ff24b 100644 --- a/kernel/watchdog.c +++ b/kernel/watchdog.c @@ -28,6 +28,8 @@ #include <linux/kvm_para.h> static DEFINE_MUTEX(watchdog_mutex); +/* This lock is used to prevent concurrent actions of softlockup output logs */ +static DEFINE_SPINLOCK(watchdog_output_lock); #if defined(CONFIG_HARDLOCKUP_DETECTOR) || defined(CONFIG_HARDLOCKUP_DETECTOR_SPARC64) # define WATCHDOG_HARDLOCKUP_DEFAULT 1 @@ -514,6 +516,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) /* Start period for the next softlockup warning. */ update_report_ts(); + spin_lock(&watchdog_output_lock); pr_emerg("BUG: soft lockup - CPU#%d stuck for %us! [%s:%d]\n", smp_processor_id(), duration, current->comm, task_pid_nr(current)); @@ -523,6 +526,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) show_regs(regs); else dump_stack(); + spin_unlock(&watchdog_output_lock); if (softlockup_all_cpu_backtrace) { trigger_allbutcpu_cpu_backtrace(smp_processor_id()); -- 2.20.1
| |