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