1
2
3
4
5
6
7
8
9
10
11
12
13#define pr_fmt(fmt) "watchdog: " fmt
14
15#include <linux/mm.h>
16#include <linux/cpu.h>
17#include <linux/nmi.h>
18#include <linux/init.h>
19#include <linux/module.h>
20#include <linux/sysctl.h>
21#include <linux/tick.h>
22#include <linux/sched/clock.h>
23#include <linux/sched/debug.h>
24#include <linux/sched/isolation.h>
25#include <linux/stop_machine.h>
26
27#include <asm/irq_regs.h>
28#include <linux/kvm_para.h>
29
30static DEFINE_MUTEX(watchdog_mutex);
31
32#if defined(CONFIG_HARDLOCKUP_DETECTOR) || defined(CONFIG_HAVE_NMI_WATCHDOG)
33# define WATCHDOG_DEFAULT (SOFT_WATCHDOG_ENABLED | NMI_WATCHDOG_ENABLED)
34# define NMI_WATCHDOG_DEFAULT 1
35#else
36# define WATCHDOG_DEFAULT (SOFT_WATCHDOG_ENABLED)
37# define NMI_WATCHDOG_DEFAULT 0
38#endif
39
40unsigned long __read_mostly watchdog_enabled;
41int __read_mostly watchdog_user_enabled = 1;
42int __read_mostly nmi_watchdog_user_enabled = NMI_WATCHDOG_DEFAULT;
43int __read_mostly soft_watchdog_user_enabled = 1;
44int __read_mostly watchdog_thresh = 10;
45int __read_mostly nmi_watchdog_available;
46
47struct cpumask watchdog_allowed_mask __read_mostly;
48
49struct cpumask watchdog_cpumask __read_mostly;
50unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask);
51
52#ifdef CONFIG_HARDLOCKUP_DETECTOR
53
54
55
56unsigned int __read_mostly hardlockup_panic =
57 CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE;
58
59
60
61
62
63
64
65
66void __init hardlockup_detector_disable(void)
67{
68 nmi_watchdog_user_enabled = 0;
69}
70
71static int __init hardlockup_panic_setup(char *str)
72{
73 if (!strncmp(str, "panic", 5))
74 hardlockup_panic = 1;
75 else if (!strncmp(str, "nopanic", 7))
76 hardlockup_panic = 0;
77 else if (!strncmp(str, "0", 1))
78 nmi_watchdog_user_enabled = 0;
79 else if (!strncmp(str, "1", 1))
80 nmi_watchdog_user_enabled = 1;
81 return 1;
82}
83__setup("nmi_watchdog=", hardlockup_panic_setup);
84
85# ifdef CONFIG_SMP
86int __read_mostly sysctl_hardlockup_all_cpu_backtrace;
87
88static int __init hardlockup_all_cpu_backtrace_setup(char *str)
89{
90 sysctl_hardlockup_all_cpu_backtrace = !!simple_strtol(str, NULL, 0);
91 return 1;
92}
93__setup("hardlockup_all_cpu_backtrace=", hardlockup_all_cpu_backtrace_setup);
94# endif
95#endif
96
97
98
99
100
101
102
103
104
105int __weak watchdog_nmi_enable(unsigned int cpu)
106{
107 hardlockup_detector_perf_enable();
108 return 0;
109}
110
111void __weak watchdog_nmi_disable(unsigned int cpu)
112{
113 hardlockup_detector_perf_disable();
114}
115
116
117int __weak __init watchdog_nmi_probe(void)
118{
119 return hardlockup_detector_perf_init();
120}
121
122
123
124
125
126
127
128
129
130void __weak watchdog_nmi_stop(void) { }
131
132
133
134
135
136
137
138
139
140
141
142
143void __weak watchdog_nmi_start(void) { }
144
145
146
147
148
149
150
151static void lockup_detector_update_enable(void)
152{
153 watchdog_enabled = 0;
154 if (!watchdog_user_enabled)
155 return;
156 if (nmi_watchdog_available && nmi_watchdog_user_enabled)
157 watchdog_enabled |= NMI_WATCHDOG_ENABLED;
158 if (soft_watchdog_user_enabled)
159 watchdog_enabled |= SOFT_WATCHDOG_ENABLED;
160}
161
162#ifdef CONFIG_SOFTLOCKUP_DETECTOR
163
164
165unsigned int __read_mostly softlockup_panic =
166 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE;
167
168static bool softlockup_initialized __read_mostly;
169static u64 __read_mostly sample_period;
170
171static DEFINE_PER_CPU(unsigned long, watchdog_touch_ts);
172static DEFINE_PER_CPU(struct hrtimer, watchdog_hrtimer);
173static DEFINE_PER_CPU(bool, softlockup_touch_sync);
174static DEFINE_PER_CPU(bool, soft_watchdog_warn);
175static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts);
176static DEFINE_PER_CPU(unsigned long, soft_lockup_hrtimer_cnt);
177static DEFINE_PER_CPU(struct task_struct *, softlockup_task_ptr_saved);
178static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved);
179static unsigned long soft_lockup_nmi_warn;
180
181static int __init softlockup_panic_setup(char *str)
182{
183 softlockup_panic = simple_strtoul(str, NULL, 0);
184 return 1;
185}
186__setup("softlockup_panic=", softlockup_panic_setup);
187
188static int __init nowatchdog_setup(char *str)
189{
190 watchdog_user_enabled = 0;
191 return 1;
192}
193__setup("nowatchdog", nowatchdog_setup);
194
195static int __init nosoftlockup_setup(char *str)
196{
197 soft_watchdog_user_enabled = 0;
198 return 1;
199}
200__setup("nosoftlockup", nosoftlockup_setup);
201
202#ifdef CONFIG_SMP
203int __read_mostly sysctl_softlockup_all_cpu_backtrace;
204
205static int __init softlockup_all_cpu_backtrace_setup(char *str)
206{
207 sysctl_softlockup_all_cpu_backtrace = !!simple_strtol(str, NULL, 0);
208 return 1;
209}
210__setup("softlockup_all_cpu_backtrace=", softlockup_all_cpu_backtrace_setup);
211#endif
212
213static void __lockup_detector_cleanup(void);
214
215
216
217
218
219
220
221
222static int get_softlockup_thresh(void)
223{
224 return watchdog_thresh * 2;
225}
226
227
228
229
230
231
232static unsigned long get_timestamp(void)
233{
234 return running_clock() >> 30LL;
235}
236
237static void set_sample_period(void)
238{
239
240
241
242
243
244
245
246 sample_period = get_softlockup_thresh() * ((u64)NSEC_PER_SEC / 5);
247 watchdog_update_hrtimer_threshold(sample_period);
248}
249
250
251static void __touch_watchdog(void)
252{
253 __this_cpu_write(watchdog_touch_ts, get_timestamp());
254}
255
256
257
258
259
260
261
262
263
264notrace void touch_softlockup_watchdog_sched(void)
265{
266
267
268
269
270 raw_cpu_write(watchdog_touch_ts, 0);
271}
272
273notrace void touch_softlockup_watchdog(void)
274{
275 touch_softlockup_watchdog_sched();
276 wq_watchdog_touch(raw_smp_processor_id());
277}
278EXPORT_SYMBOL(touch_softlockup_watchdog);
279
280void touch_all_softlockup_watchdogs(void)
281{
282 int cpu;
283
284
285
286
287
288
289
290
291
292
293 for_each_cpu(cpu, &watchdog_allowed_mask)
294 per_cpu(watchdog_touch_ts, cpu) = 0;
295 wq_watchdog_touch(-1);
296}
297
298void touch_softlockup_watchdog_sync(void)
299{
300 __this_cpu_write(softlockup_touch_sync, true);
301 __this_cpu_write(watchdog_touch_ts, 0);
302}
303
304static int is_softlockup(unsigned long touch_ts)
305{
306 unsigned long now = get_timestamp();
307
308 if ((watchdog_enabled & SOFT_WATCHDOG_ENABLED) && watchdog_thresh){
309
310 if (time_after(now, touch_ts + get_softlockup_thresh()))
311 return now - touch_ts;
312 }
313 return 0;
314}
315
316
317bool is_hardlockup(void)
318{
319 unsigned long hrint = __this_cpu_read(hrtimer_interrupts);
320
321 if (__this_cpu_read(hrtimer_interrupts_saved) == hrint)
322 return true;
323
324 __this_cpu_write(hrtimer_interrupts_saved, hrint);
325 return false;
326}
327
328static void watchdog_interrupt_count(void)
329{
330 __this_cpu_inc(hrtimer_interrupts);
331}
332
333static DEFINE_PER_CPU(struct completion, softlockup_completion);
334static DEFINE_PER_CPU(struct cpu_stop_work, softlockup_stop_work);
335
336
337
338
339
340
341
342
343
344static int softlockup_fn(void *data)
345{
346 __this_cpu_write(soft_lockup_hrtimer_cnt,
347 __this_cpu_read(hrtimer_interrupts));
348 __touch_watchdog();
349 complete(this_cpu_ptr(&softlockup_completion));
350
351 return 0;
352}
353
354
355static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
356{
357 unsigned long touch_ts = __this_cpu_read(watchdog_touch_ts);
358 struct pt_regs *regs = get_irq_regs();
359 int duration;
360 int softlockup_all_cpu_backtrace = sysctl_softlockup_all_cpu_backtrace;
361
362 if (!watchdog_enabled)
363 return HRTIMER_NORESTART;
364
365
366 watchdog_interrupt_count();
367
368
369 if (completion_done(this_cpu_ptr(&softlockup_completion))) {
370 reinit_completion(this_cpu_ptr(&softlockup_completion));
371 stop_one_cpu_nowait(smp_processor_id(),
372 softlockup_fn, NULL,
373 this_cpu_ptr(&softlockup_stop_work));
374 }
375
376
377 hrtimer_forward_now(hrtimer, ns_to_ktime(sample_period));
378
379 if (touch_ts == 0) {
380 if (unlikely(__this_cpu_read(softlockup_touch_sync))) {
381
382
383
384
385 __this_cpu_write(softlockup_touch_sync, false);
386 sched_clock_tick();
387 }
388
389
390 kvm_check_and_clear_guest_paused();
391 __touch_watchdog();
392 return HRTIMER_RESTART;
393 }
394
395
396
397
398
399
400
401 duration = is_softlockup(touch_ts);
402 if (unlikely(duration)) {
403
404
405
406
407
408 if (kvm_check_and_clear_guest_paused())
409 return HRTIMER_RESTART;
410
411
412 if (__this_cpu_read(soft_watchdog_warn) == true) {
413
414
415
416
417
418
419
420
421 if (__this_cpu_read(softlockup_task_ptr_saved) !=
422 current) {
423 __this_cpu_write(soft_watchdog_warn, false);
424 __touch_watchdog();
425 }
426 return HRTIMER_RESTART;
427 }
428
429 if (softlockup_all_cpu_backtrace) {
430
431
432
433 if (test_and_set_bit(0, &soft_lockup_nmi_warn)) {
434
435 __this_cpu_write(soft_watchdog_warn, true);
436 return HRTIMER_RESTART;
437 }
438 }
439
440 pr_emerg("BUG: soft lockup - CPU#%d stuck for %us! [%s:%d]\n",
441 smp_processor_id(), duration,
442 current->comm, task_pid_nr(current));
443 __this_cpu_write(softlockup_task_ptr_saved, current);
444 print_modules();
445 print_irqtrace_events(current);
446 if (regs)
447 show_regs(regs);
448 else
449 dump_stack();
450
451 if (softlockup_all_cpu_backtrace) {
452
453
454
455 trigger_allbutself_cpu_backtrace();
456
457 clear_bit(0, &soft_lockup_nmi_warn);
458
459 smp_mb__after_atomic();
460 }
461
462 add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
463 if (softlockup_panic)
464 panic("softlockup: hung tasks");
465 __this_cpu_write(soft_watchdog_warn, true);
466 } else
467 __this_cpu_write(soft_watchdog_warn, false);
468
469 return HRTIMER_RESTART;
470}
471
472static void watchdog_enable(unsigned int cpu)
473{
474 struct hrtimer *hrtimer = this_cpu_ptr(&watchdog_hrtimer);
475 struct completion *done = this_cpu_ptr(&softlockup_completion);
476
477 WARN_ON_ONCE(cpu != smp_processor_id());
478
479 init_completion(done);
480 complete(done);
481
482
483
484
485
486 hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
487 hrtimer->function = watchdog_timer_fn;
488 hrtimer_start(hrtimer, ns_to_ktime(sample_period),
489 HRTIMER_MODE_REL_PINNED);
490
491
492 __touch_watchdog();
493
494 if (watchdog_enabled & NMI_WATCHDOG_ENABLED)
495 watchdog_nmi_enable(cpu);
496}
497
498static void watchdog_disable(unsigned int cpu)
499{
500 struct hrtimer *hrtimer = this_cpu_ptr(&watchdog_hrtimer);
501
502 WARN_ON_ONCE(cpu != smp_processor_id());
503
504
505
506
507
508
509 watchdog_nmi_disable(cpu);
510 hrtimer_cancel(hrtimer);
511 wait_for_completion(this_cpu_ptr(&softlockup_completion));
512}
513
514static int softlockup_stop_fn(void *data)
515{
516 watchdog_disable(smp_processor_id());
517 return 0;
518}
519
520static void softlockup_stop_all(void)
521{
522 int cpu;
523
524 if (!softlockup_initialized)
525 return;
526
527 for_each_cpu(cpu, &watchdog_allowed_mask)
528 smp_call_on_cpu(cpu, softlockup_stop_fn, NULL, false);
529
530 cpumask_clear(&watchdog_allowed_mask);
531}
532
533static int softlockup_start_fn(void *data)
534{
535 watchdog_enable(smp_processor_id());
536 return 0;
537}
538
539static void softlockup_start_all(void)
540{
541 int cpu;
542
543 cpumask_copy(&watchdog_allowed_mask, &watchdog_cpumask);
544 for_each_cpu(cpu, &watchdog_allowed_mask)
545 smp_call_on_cpu(cpu, softlockup_start_fn, NULL, false);
546}
547
548int lockup_detector_online_cpu(unsigned int cpu)
549{
550 watchdog_enable(cpu);
551 return 0;
552}
553
554int lockup_detector_offline_cpu(unsigned int cpu)
555{
556 watchdog_disable(cpu);
557 return 0;
558}
559
560static void lockup_detector_reconfigure(void)
561{
562 cpus_read_lock();
563 watchdog_nmi_stop();
564
565 softlockup_stop_all();
566 set_sample_period();
567 lockup_detector_update_enable();
568 if (watchdog_enabled && watchdog_thresh)
569 softlockup_start_all();
570
571 watchdog_nmi_start();
572 cpus_read_unlock();
573
574
575
576
577 __lockup_detector_cleanup();
578}
579
580
581
582
583
584
585
586
587static __init void lockup_detector_setup(void)
588{
589
590
591
592
593 lockup_detector_update_enable();
594
595 if (!IS_ENABLED(CONFIG_SYSCTL) &&
596 !(watchdog_enabled && watchdog_thresh))
597 return;
598
599 mutex_lock(&watchdog_mutex);
600 lockup_detector_reconfigure();
601 softlockup_initialized = true;
602 mutex_unlock(&watchdog_mutex);
603}
604
605#else
606static void lockup_detector_reconfigure(void)
607{
608 cpus_read_lock();
609 watchdog_nmi_stop();
610 lockup_detector_update_enable();
611 watchdog_nmi_start();
612 cpus_read_unlock();
613}
614static inline void lockup_detector_setup(void)
615{
616 lockup_detector_reconfigure();
617}
618#endif
619
620static void __lockup_detector_cleanup(void)
621{
622 lockdep_assert_held(&watchdog_mutex);
623 hardlockup_detector_perf_cleanup();
624}
625
626
627
628
629
630
631void lockup_detector_cleanup(void)
632{
633 mutex_lock(&watchdog_mutex);
634 __lockup_detector_cleanup();
635 mutex_unlock(&watchdog_mutex);
636}
637
638
639
640
641
642
643
644void lockup_detector_soft_poweroff(void)
645{
646 watchdog_enabled = 0;
647}
648
649#ifdef CONFIG_SYSCTL
650
651
652static void proc_watchdog_update(void)
653{
654
655 cpumask_and(&watchdog_cpumask, &watchdog_cpumask, cpu_possible_mask);
656 lockup_detector_reconfigure();
657}
658
659
660
661
662
663
664
665
666
667
668
669
670
671static int proc_watchdog_common(int which, struct ctl_table *table, int write,
672 void __user *buffer, size_t *lenp, loff_t *ppos)
673{
674 int err, old, *param = table->data;
675
676 mutex_lock(&watchdog_mutex);
677
678 if (!write) {
679
680
681
682
683 *param = (watchdog_enabled & which) != 0;
684 err = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
685 } else {
686 old = READ_ONCE(*param);
687 err = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
688 if (!err && old != READ_ONCE(*param))
689 proc_watchdog_update();
690 }
691 mutex_unlock(&watchdog_mutex);
692 return err;
693}
694
695
696
697
698int proc_watchdog(struct ctl_table *table, int write,
699 void __user *buffer, size_t *lenp, loff_t *ppos)
700{
701 return proc_watchdog_common(NMI_WATCHDOG_ENABLED|SOFT_WATCHDOG_ENABLED,
702 table, write, buffer, lenp, ppos);
703}
704
705
706
707
708int proc_nmi_watchdog(struct ctl_table *table, int write,
709 void __user *buffer, size_t *lenp, loff_t *ppos)
710{
711 if (!nmi_watchdog_available && write)
712 return -ENOTSUPP;
713 return proc_watchdog_common(NMI_WATCHDOG_ENABLED,
714 table, write, buffer, lenp, ppos);
715}
716
717
718
719
720int proc_soft_watchdog(struct ctl_table *table, int write,
721 void __user *buffer, size_t *lenp, loff_t *ppos)
722{
723 return proc_watchdog_common(SOFT_WATCHDOG_ENABLED,
724 table, write, buffer, lenp, ppos);
725}
726
727
728
729
730int proc_watchdog_thresh(struct ctl_table *table, int write,
731 void __user *buffer, size_t *lenp, loff_t *ppos)
732{
733 int err, old;
734
735 mutex_lock(&watchdog_mutex);
736
737 old = READ_ONCE(watchdog_thresh);
738 err = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
739
740 if (!err && write && old != READ_ONCE(watchdog_thresh))
741 proc_watchdog_update();
742
743 mutex_unlock(&watchdog_mutex);
744 return err;
745}
746
747
748
749
750
751
752
753int proc_watchdog_cpumask(struct ctl_table *table, int write,
754 void __user *buffer, size_t *lenp, loff_t *ppos)
755{
756 int err;
757
758 mutex_lock(&watchdog_mutex);
759
760 err = proc_do_large_bitmap(table, write, buffer, lenp, ppos);
761 if (!err && write)
762 proc_watchdog_update();
763
764 mutex_unlock(&watchdog_mutex);
765 return err;
766}
767#endif
768
769void __init lockup_detector_init(void)
770{
771 if (tick_nohz_full_enabled())
772 pr_info("Disabling watchdog on nohz_full cores by default\n");
773
774 cpumask_copy(&watchdog_cpumask,
775 housekeeping_cpumask(HK_FLAG_TIMER));
776
777 if (!watchdog_nmi_probe())
778 nmi_watchdog_available = true;
779 lockup_detector_setup();
780}
781