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