[efi] Hold off watchdog timer while running

UEFI platforms may provide a watchdog timer, which will reboot the
machine if an operating system takes more than five minutes to load.
This can cause long-lived iPXE downloads (or interactive shell
sessions) to unexpectedly reboot.

Fix by resetting the watchdog timer every ten seconds while the iPXE
main processing loop continues to run.

Reported-by: Bradley B Williams <bradleybwilliams@swbell.net>
Reported-by: John Clark <john.r.clark.3@gmail.com>
Reported-by: wdriever@gmail.com
Reported-by: Charlie Beima <cbeima@indiana.edu>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2015-08-03 12:39:05 +01:00
parent b1caa48e4b
commit c6b299df20
5 changed files with 126 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
#ifndef _IPXE_EFI_WATCHDOG_H
#define _IPXE_EFI_WATCHDOG_H
/** @file
*
* EFI watchdog holdoff timer
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
extern struct retry_timer efi_watchdog;
/**
* Start EFI watchdog holdoff timer
*
*/
static inline void efi_watchdog_start ( void ) {
start_timer_nodelay ( &efi_watchdog );
}
/**
* Stop EFI watchdog holdoff timer
*
*/
static inline void efi_watchdog_stop ( void ) {
stop_timer ( &efi_watchdog );
}
#endif /* _IPXE_EFI_WATCHDOG_H */

View File

@@ -330,6 +330,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define ERRFILE_efi_wrap ( ERRFILE_OTHER | 0x00460000 )
#define ERRFILE_vmbus ( ERRFILE_OTHER | 0x00470000 )
#define ERRFILE_efi_time ( ERRFILE_OTHER | 0x00480000 )
#define ERRFILE_efi_watchdog ( ERRFILE_OTHER | 0x00490000 )
/** @} */