1*8bb763d4STzung-Bi Shih // SPDX-License-Identifier: GPL-2.0 2*8bb763d4STzung-Bi Shih /* 3*8bb763d4STzung-Bi Shih * Copyright 2026 Google LLC 4*8bb763d4STzung-Bi Shih */ 5*8bb763d4STzung-Bi Shih 6*8bb763d4STzung-Bi Shih #include <linux/kernel.h> 7*8bb763d4STzung-Bi Shih #include <linux/module.h> 8*8bb763d4STzung-Bi Shih #include <linux/nmi.h> 9*8bb763d4STzung-Bi Shih #include <linux/watchdog.h> 10*8bb763d4STzung-Bi Shih 11*8bb763d4STzung-Bi Shih #include "watchdog_pretimeout.h" 12*8bb763d4STzung-Bi Shih 13*8bb763d4STzung-Bi Shih /** 14*8bb763d4STzung-Bi Shih * pretimeout_dump - Dump on watchdog pretimeout event 15*8bb763d4STzung-Bi Shih * @wdd: watchdog_device 16*8bb763d4STzung-Bi Shih * 17*8bb763d4STzung-Bi Shih * Dump all cpu backtrace on pretimeout event. 18*8bb763d4STzung-Bi Shih */ 19*8bb763d4STzung-Bi Shih static void pretimeout_dump(struct watchdog_device *wdd) 20*8bb763d4STzung-Bi Shih { 21*8bb763d4STzung-Bi Shih pr_alert("watchdog%d: pretimeout event\n", wdd->id); 22*8bb763d4STzung-Bi Shih if (!trigger_all_cpu_backtrace()) 23*8bb763d4STzung-Bi Shih pr_alert("trigger_all_cpu_backtrace() isn't available\n"); 24*8bb763d4STzung-Bi Shih } 25*8bb763d4STzung-Bi Shih 26*8bb763d4STzung-Bi Shih static struct watchdog_governor watchdog_gov_dump = { 27*8bb763d4STzung-Bi Shih .name = "dump", 28*8bb763d4STzung-Bi Shih .pretimeout = pretimeout_dump, 29*8bb763d4STzung-Bi Shih }; 30*8bb763d4STzung-Bi Shih 31*8bb763d4STzung-Bi Shih static int __init watchdog_gov_dump_register(void) 32*8bb763d4STzung-Bi Shih { 33*8bb763d4STzung-Bi Shih return watchdog_register_governor(&watchdog_gov_dump); 34*8bb763d4STzung-Bi Shih } 35*8bb763d4STzung-Bi Shih 36*8bb763d4STzung-Bi Shih static void __exit watchdog_gov_dump_unregister(void) 37*8bb763d4STzung-Bi Shih { 38*8bb763d4STzung-Bi Shih watchdog_unregister_governor(&watchdog_gov_dump); 39*8bb763d4STzung-Bi Shih } 40*8bb763d4STzung-Bi Shih module_init(watchdog_gov_dump_register); 41*8bb763d4STzung-Bi Shih module_exit(watchdog_gov_dump_unregister); 42*8bb763d4STzung-Bi Shih 43*8bb763d4STzung-Bi Shih MODULE_AUTHOR("Tzung-Bi Shih <tzungbi@kernel.org>"); 44*8bb763d4STzung-Bi Shih MODULE_DESCRIPTION("Dump watchdog pretimeout governor"); 45*8bb763d4STzung-Bi Shih MODULE_LICENSE("GPL"); 46