| .. | .. |
|---|
| 29 | 29 | |
|---|
| 30 | 30 | #include <trace/hooks/softlockup.h> |
|---|
| 31 | 31 | |
|---|
| 32 | +#if IS_ENABLED(CONFIG_ROCKCHIP_MINIDUMP) |
|---|
| 33 | +#include <soc/rockchip/rk_minidump.h> |
|---|
| 34 | +#endif |
|---|
| 35 | + |
|---|
| 32 | 36 | static DEFINE_MUTEX(watchdog_mutex); |
|---|
| 33 | 37 | |
|---|
| 34 | 38 | #if defined(CONFIG_HARDLOCKUP_DETECTOR) || defined(CONFIG_HAVE_NMI_WATCHDOG) |
|---|
| .. | .. |
|---|
| 412 | 416 | if (per_cpu(hard_watchdog_warn, next_cpu) == true) |
|---|
| 413 | 417 | return; |
|---|
| 414 | 418 | |
|---|
| 419 | + atomic_notifier_call_chain(&hardlock_notifier_list, next_cpu, NULL); |
|---|
| 420 | + |
|---|
| 415 | 421 | if (hardlockup_panic) |
|---|
| 416 | 422 | panic("Watchdog detected hard LOCKUP on cpu %u", next_cpu); |
|---|
| 417 | 423 | else |
|---|
| 418 | 424 | WARN(1, "Watchdog detected hard LOCKUP on cpu %u", next_cpu); |
|---|
| 419 | 425 | |
|---|
| 420 | | - atomic_notifier_call_chain(&hardlock_notifier_list, 0, NULL); |
|---|
| 421 | 426 | per_cpu(hard_watchdog_warn, next_cpu) = true; |
|---|
| 422 | 427 | } else { |
|---|
| 423 | 428 | per_cpu(hard_watchdog_warn, next_cpu) = false; |
|---|
| .. | .. |
|---|
| 541 | 546 | |
|---|
| 542 | 547 | trace_android_vh_watchdog_timer_softlockup(duration, regs, !!softlockup_panic); |
|---|
| 543 | 548 | add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK); |
|---|
| 549 | +#if IS_ENABLED(CONFIG_ROCKCHIP_MINIDUMP) |
|---|
| 550 | + rk_minidump_update_cpu_regs(regs); |
|---|
| 551 | +#endif |
|---|
| 544 | 552 | if (softlockup_panic) |
|---|
| 545 | 553 | panic("softlockup: hung tasks"); |
|---|
| 546 | 554 | } |
|---|