The patch titled Subject: watchdog: fix barriers when printing backtraces from all CPUs has been added to the -mm tree. Its filename is watchdog-fix-barriers-when-printing-backtraces-from-all-cpus.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/watchdog-fix-barriers-when-printing-backtraces-from-all-cpus.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/watchdog-fix-barriers-when-printing-backtraces-from-all-cpus.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Petr Mladek <pmladek@xxxxxxxx> Subject: watchdog: fix barriers when printing backtraces from all CPUs Any parallel softlockup reports are skipped when one CPU is already printing backtraces from all CPUs. The exclusive rights are synchronized using one bit in soft_lockup_nmi_warn. There is also one memory barrier that does not make much sense. Use two barriers on the right location to prevent mixing two reports. Link: https://lkml.kernel.org/r/20210311122130.6788-6-pmladek@xxxxxxxx Signed-off-by: Petr Mladek <pmladek@xxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxxxxx> Cc: Laurence Oberman <loberman@xxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Vincent Whitchurch <vincent.whitchurch@xxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- kernel/watchdog.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) --- a/kernel/watchdog.c~watchdog-fix-barriers-when-printing-backtraces-from-all-cpus +++ a/kernel/watchdog.c @@ -409,12 +409,18 @@ static enum hrtimer_restart watchdog_tim if (kvm_check_and_clear_guest_paused()) return HRTIMER_RESTART; + /* + * Prevent multiple soft-lockup reports if one cpu is already + * engaged in dumping all cpu back traces. + */ if (softlockup_all_cpu_backtrace) { - /* Prevent multiple soft-lockup reports if one cpu is already - * engaged in dumping cpu back traces - */ if (test_and_set_bit(0, &soft_lockup_nmi_warn)) return HRTIMER_RESTART; + /* + * Make sure that reports are serialized. Start + * printing after getting the exclusive rights. + */ + smp_mb__after_atomic(); } /* Start period for the next softlockup warning. */ @@ -431,14 +437,14 @@ static enum hrtimer_restart watchdog_tim dump_stack(); if (softlockup_all_cpu_backtrace) { - /* Avoid generating two back traces for current - * given that one is already made above - */ trigger_allbutself_cpu_backtrace(); - + /* + * Make sure that everything is printed before + * another CPU is allowed to report lockup again. + */ + smp_mb__before_atomic(); + /* Allow a further report. */ clear_bit(0, &soft_lockup_nmi_warn); - /* Barrier to sync with other cpus */ - smp_mb__after_atomic(); } add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK); _ Patches currently in -mm which might be from pmladek@xxxxxxxx are watchdog-rename-__touch_watchdog-to-a-better-descriptive-name.patch watchdog-explicitly-update-timestamp-when-reporting-softlockup.patch watchdog-softlockup-report-the-overall-time-of-softlockups.patch watchdog-softlockup-remove-logic-that-tried-to-prevent-repeated-reports.patch watchdog-fix-barriers-when-printing-backtraces-from-all-cpus.patch watchdog-cleanup-handling-of-false-positives.patch