~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/watchdog/watchdog-kernel-api.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/watchdog/watchdog-kernel-api.rst (Version linux-6.12-rc7) and /Documentation/watchdog/watchdog-kernel-api.rst (Version linux-4.4.302)


  1 ==============================================    
  2 The Linux WatchDog Timer Driver Core kernel AP    
  3 ==============================================    
  4                                                   
  5 Last reviewed: 12-Feb-2013                        
  6                                                   
  7 Wim Van Sebroeck <wim@iguana.be>                   
  8                                                   
  9 Introduction                                      
 10 ------------                                      
 11 This document does not describe what a WatchDo    
 12 It also does not describe the API which can be    
 13 with a WatchDog Timer. If you want to know thi    
 14 file: Documentation/watchdog/watchdog-api.rst     
 15                                                   
 16 So what does this document describe? It descri    
 17 WatchDog Timer Drivers that want to use the Wa    
 18 Framework. This framework provides all interfa    
 19 the same code does not have to be reproduced e    
 20 a watchdog timer driver then only needs to pro    
 21 (operations) that control the watchdog timer (    
 22                                                   
 23 The API                                           
 24 -------                                           
 25 Each watchdog timer driver that wants to use t    
 26 must #include <linux/watchdog.h> (you would ha    
 27 writing a watchdog device driver). This includ    
 28 register/unregister routines::                    
 29                                                   
 30         extern int watchdog_register_device(st    
 31         extern void watchdog_unregister_device    
 32                                                   
 33 The watchdog_register_device routine registers    
 34 The parameter of this routine is a pointer to     
 35 This routine returns zero on success and a neg    
 36                                                   
 37 The watchdog_unregister_device routine deregis    
 38 device. The parameter of this routine is the p    
 39 watchdog_device structure.                        
 40                                                   
 41 The watchdog subsystem includes an registratio    
 42 which allows you to register an watchdog as ea    
 43 the boot process.                                 
 44                                                   
 45 The watchdog device structure looks like this:    
 46                                                   
 47   struct watchdog_device {                        
 48         int id;                                   
 49         struct device *parent;                    
 50         const struct attribute_group **groups;    
 51         const struct watchdog_info *info;         
 52         const struct watchdog_ops *ops;           
 53         const struct watchdog_governor *gov;      
 54         unsigned int bootstatus;                  
 55         unsigned int timeout;                     
 56         unsigned int pretimeout;                  
 57         unsigned int min_timeout;                 
 58         unsigned int max_timeout;                 
 59         unsigned int min_hw_heartbeat_ms;         
 60         unsigned int max_hw_heartbeat_ms;         
 61         struct notifier_block reboot_nb;          
 62         struct notifier_block restart_nb;         
 63         void *driver_data;                        
 64         struct watchdog_core_data *wd_data;       
 65         unsigned long status;                     
 66         struct list_head deferred;                
 67   };                                              
 68                                                   
 69 It contains following fields:                     
 70                                                   
 71 * id: set by watchdog_register_device, id 0 is    
 72   /dev/watchdog0 cdev (dynamic major, minor 0)    
 73   /dev/watchdog miscdev. The id is set automat    
 74   watchdog_register_device.                       
 75 * parent: set this to the parent device (or NU    
 76   watchdog_register_device.                       
 77 * groups: List of sysfs attribute groups to cr    
 78   device.                                         
 79 * info: a pointer to a watchdog_info structure    
 80   additional information about the watchdog ti    
 81 * ops: a pointer to the list of watchdog opera    
 82 * gov: a pointer to the assigned watchdog devi    
 83 * timeout: the watchdog timer's timeout value     
 84   This is the time after which the system will    
 85   not send a heartbeat request if WDOG_ACTIVE     
 86 * pretimeout: the watchdog timer's pretimeout     
 87 * min_timeout: the watchdog timer's minimum ti    
 88   If set, the minimum configurable value for '    
 89 * max_timeout: the watchdog timer's maximum ti    
 90   as seen from userspace. If set, the maximum     
 91   'timeout'. Not used if max_hw_heartbeat_ms i    
 92 * min_hw_heartbeat_ms: Hardware limit for mini    
 93   in milli-seconds. This value is normally 0;     
 94   if the hardware can not tolerate lower inter    
 95 * max_hw_heartbeat_ms: Maximum hardware heartb    
 96   If set, the infrastructure will send heartbe    
 97   if 'timeout' is larger than max_hw_heartbeat    
 98   is set and userspace failed to send a heartb    
 99   seconds. max_hw_heartbeat_ms must be set if     
100   the stop function.                              
101 * reboot_nb: notifier block that is registered    
102   internal use only. If the driver calls watch    
103   will stop the watchdog on such notifications    
104 * restart_nb: notifier block that is registere    
105   internal use only. If a watchdog is capable     
106   should define ops->restart. Priority can be     
107   watchdog_set_restart_priority.                  
108 * bootstatus: status of the device after booti    
109   WDIOF_* status bits).                           
110 * driver_data: a pointer to the drivers privat    
111   This data should only be accessed via the wa    
112   watchdog_get_drvdata routines.                  
113 * wd_data: a pointer to watchdog core internal    
114 * status: this field contains a number of stat    
115   information about the status of the device (    
116   running/active, or is the nowayout bit set).    
117 * deferred: entry in wtd_deferred_reg_list whi    
118   register early initialized watchdogs.           
119                                                   
120 The list of watchdog operations is defined as:    
121                                                   
122   struct watchdog_ops {                           
123         struct module *owner;                     
124         /* mandatory operations */                
125         int (*start)(struct watchdog_device *)    
126         /* optional operations */                 
127         int (*stop)(struct watchdog_device *);    
128         int (*ping)(struct watchdog_device *);    
129         unsigned int (*status)(struct watchdog    
130         int (*set_timeout)(struct watchdog_dev    
131         int (*set_pretimeout)(struct watchdog_    
132         unsigned int (*get_timeleft)(struct wa    
133         int (*restart)(struct watchdog_device     
134         long (*ioctl)(struct watchdog_device *    
135   };                                              
136                                                   
137 It is important that you first define the modu    
138 driver's operations. This module owner will be    
139 the watchdog is active. (This to avoid a syste    
140 module and /dev/watchdog is still open).          
141                                                   
142 Some operations are mandatory and some are opt    
143 are:                                              
144                                                   
145 * start: this is a pointer to the routine that    
146   device.                                         
147   The routine needs a pointer to the watchdog     
148   parameter. It returns zero on success or a n    
149                                                   
150 Not all watchdog timer hardware supports the s    
151 all other routines/operations are optional. Th    
152 they are supported. These optional routines/op    
153                                                   
154 * stop: with this routine the watchdog timer d    
155                                                   
156   The routine needs a pointer to the watchdog     
157   parameter. It returns zero on success or a n    
158   Some watchdog timer hardware can only be sta    
159   driver supporting such hardware does not hav    
160                                                   
161   If a driver has no stop function, the watchd    
162   and start calling the driver's keepalive pin    
163   device is closed.                               
164                                                   
165   If a watchdog driver does not implement the     
166   max_hw_heartbeat_ms.                            
167 * ping: this is the routine that sends a keepa    
168   hardware.                                       
169                                                   
170   The routine needs a pointer to the watchdog     
171   parameter. It returns zero on success or a n    
172                                                   
173   Most hardware that does not support this as     
174   start function to restart the watchdog timer    
175   the watchdog timer driver core does: to send    
176   timer hardware it will either use the ping o    
177   start operation (when the ping operation is     
178                                                   
179   (Note: the WDIOC_KEEPALIVE ioctl call will o    
180   WDIOF_KEEPALIVEPING bit has been set in the     
181   info structure).                                
182 * status: this routine checks the status of th    
183   status of the device is reported with watchd    
184                                                   
185   WDIOF_MAGICCLOSE and WDIOF_KEEPALIVEPING are    
186   it is not necessary to report those bits fro    
187   function is provided by the driver, the watc    
188   provided in the bootstatus variable of struc    
189                                                   
190 * set_timeout: this routine checks and changes    
191   timer device. It returns 0 on success, -EINV    
192   and -EIO for "could not write value to the w    
193   routine should set the timeout value of the     
194   achieved timeout value (which may be differe    
195   because the watchdog does not necessarily ha    
196                                                   
197   Drivers implementing max_hw_heartbeat_ms set    
198   to the minimum of timeout and max_hw_heartbe    
199   timeout value of the watchdog_device either     
200   (if it is larger than max_hw_heartbeat_ms),     
201   (Note: the WDIOF_SETTIMEOUT needs to be set     
202   watchdog's info structure).                     
203                                                   
204   If the watchdog driver does not have to perf    
205   watchdog_device.timeout, this callback can b    
206                                                   
207   If set_timeout is not provided but, WDIOF_SE    
208   infrastructure updates the timeout value of     
209   to the requested value.                         
210                                                   
211   If the pretimeout feature is used (WDIOF_PRE    
212   also take care of checking if pretimeout is     
213   accordingly. This can't be done in the core     
214   duty of the driver.                             
215 * set_pretimeout: this routine checks and chan    
216   the watchdog. It is optional because not all    
217   notification. The timeout value is not an ab    
218   seconds before the actual timeout would happ    
219   -EINVAL for "parameter out of range" and -EI    
220   the watchdog". A value of 0 disables pretime    
221                                                   
222   (Note: the WDIOF_PRETIMEOUT needs to be set     
223   watchdog's info structure).                     
224                                                   
225   If the watchdog driver does not have to perf    
226   watchdog_device.pretimeout, this callback ca    
227   set_pretimeout is not provided but WDIOF_PRE    
228   infrastructure updates the pretimeout value     
229   to the requested value.                         
230                                                   
231 * get_timeleft: this routines returns the time    
232 * restart: this routine restarts the machine.     
233   negative errno code for failure.                
234 * ioctl: if this routine is present then it wi    
235   our own internal ioctl call handling. This r    
236   if a command is not supported. The parameter    
237   call are: watchdog_device, cmd and arg.         
238                                                   
239 The status bits should (preferably) be set wit    
240 bit-operations. The status bits that are defin    
241                                                   
242 * WDOG_ACTIVE: this status bit indicates wheth    
243   is active or not from user perspective. User    
244   heartbeat requests to the driver while this     
245 * WDOG_NO_WAY_OUT: this bit stores the nowayou    
246   If this bit is set then the watchdog timer w    
247 * WDOG_HW_RUNNING: Set by the watchdog driver     
248   running. The bit must be set if the watchdog    
249   stopped. The bit may also be set if the watc    
250   booting, before the watchdog device is opene    
251   infrastructure will send keepalives to the w    
252   WDOG_ACTIVE is not set.                         
253   Note: when you register the watchdog timer d    
254   then opening /dev/watchdog will skip the sta    
255   request instead.                                
256                                                   
257   To set the WDOG_NO_WAY_OUT status bit (befor    
258   timer device) you can either:                   
259                                                   
260   * set it statically in your watchdog_device     
261                                                   
262         .status = WATCHDOG_NOWAYOUT_INIT_STATU    
263                                                   
264     (this will set the value the same as CONFI    
265   * use the following helper function::           
266                                                   
267         static inline void watchdog_set_nowayo    
268                                                   
269                                                   
270 Note:                                             
271    The WatchDog Timer Driver Core supports the    
272    the nowayout feature. To use the magic clos    
273    WDIOF_MAGICCLOSE bit in the options field o    
274                                                   
275 The nowayout feature will overrule the magic c    
276                                                   
277 To get or set driver specific data the followi    
278 used::                                            
279                                                   
280   static inline void watchdog_set_drvdata(stru    
281                                           void    
282   static inline void *watchdog_get_drvdata(str    
283                                                   
284 The watchdog_set_drvdata function allows you t    
285 arguments of this function are the watchdog de    
286 driver specific data to and a pointer to the d    
287                                                   
288 The watchdog_get_drvdata function allows you t    
289 The argument of this function is the watchdog     
290 data from. The function returns the pointer to    
291                                                   
292 To initialize the timeout field, the following    
293                                                   
294   extern int watchdog_init_timeout(struct watc    
295                                    unsigned in    
296                                    struct devi    
297                                                   
298 The watchdog_init_timeout function allows you     
299 using the module timeout parameter or by retri    
300 the device tree (if the module timeout paramet    
301 to set the default timeout value as timeout va    
302 then use this function to set the user "prefer    
303 This routine returns zero on success and a neg    
304                                                   
305 To disable the watchdog on reboot, the user mu    
306                                                   
307   static inline void watchdog_stop_on_reboot(s    
308                                                   
309 To disable the watchdog when unregistering the    
310 the following helper. Note that this will only    
311 nowayout flag is not set.                         
312                                                   
313 ::                                                
314                                                   
315   static inline void watchdog_stop_on_unregist    
316                                                   
317 To change the priority of the restart handler     
318 used::                                            
319                                                   
320   void watchdog_set_restart_priority(struct wa    
321                                                   
322 User should follow the following guidelines fo    
323                                                   
324 * 0: should be called in last resort, has limi    
325 * 128: default restart handler, use if no othe    
326   available, and/or if restart is sufficient t    
327 * 255: highest priority, will preempt all othe    
328                                                   
329 To raise a pretimeout notification, the follow    
330                                                   
331   void watchdog_notify_pretimeout(struct watch    
332                                                   
333 The function can be called in the interrupt co    
334 governor framework (kbuild CONFIG_WATCHDOG_PRE    
335 an action is taken by a preconfigured pretimeo    
336 the watchdog device. If watchdog pretimeout go    
337 enabled, watchdog_notify_pretimeout() prints a    
338 the kernel log buffer.                            
339                                                   
340 To set the last known HW keepalive time for a     
341 should be used::                                  
342                                                   
343   int watchdog_set_last_hw_keepalive(struct wa    
344                                      unsigned     
345                                                   
346 This function must be called immediately after    
347 sets the last known hardware heartbeat to have    
348 current time. Calling this is only needed if t    
349 when probe is called, and the watchdog can onl    
350 min_hw_heartbeat_ms time has passed from the l    
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php