xref: /linux/drivers/watchdog/pretimeout_dump.c (revision 67f8bc848ee31831336bd478e57d2f993551902e)
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