david/ipxe
david
/
ipxe
Archived
1
0
Fork 0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/interface/efi
Michael Brown 5cf5ffea28 [efi] Work around temporal anomaly encountered during ExitBootServices()
EFI provides no clean way for device drivers to shut down in
preparation for handover to a booted operating system.  The platform
firmware simply doesn't bother to call the drivers' Stop() methods.
Instead, drivers must register an EVT_SIGNAL_EXIT_BOOT_SERVICES event
to be signalled when ExitBootServices() is called, and clean up
without any reference to the EFI driver model.

Unfortunately, all timers silently stop working when ExitBootServices()
is called.  Even more unfortunately, and for no discernible reason,
this happens before any EVT_SIGNAL_EXIT_BOOT_SERVICES events are
signalled.  The net effect of this entertaining design choice is that
any timeout loops on the shutdown path (e.g. for gracefully closing
outstanding TCP connections) may wait indefinitely.

There is no way to report failure from currticks(), since the API
lazily assumes that the host system continues to travel through time
in the usual direction.  Work around EFI's violation of this
assumption by falling back to a simple free-running monotonic counter.

Debugged-by: Maor Dickman <maord@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2016-12-07 13:46:37 +00:00
..
efi_autoboot.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
efi_block.c [efi] Add basic EFI SAN booting capability 2016-11-16 23:03:37 +00:00
efi_bofm.c [efi] Remove raw EFI_HANDLE values from debug messages 2015-08-27 15:40:44 +01:00
efi_console.c [efi] Add missing definitions for function key scancodes 2016-02-12 13:08:52 +00:00
efi_debug.c [efi] Add EFI_BLOCK_IO2_PROTOCOL header and GUID definition 2016-10-16 23:27:50 +01:00
efi_download.c [efi] Avoid unnecessarily passing pointers to EFI_HANDLEs 2014-07-31 12:50:09 +01:00
efi_driver.c [efi] Avoid infinite loops when asked to stop non-existent devices 2015-09-28 03:20:59 +01:00
efi_entropy.c [efi] Generalise EFI entropy generation to non-x86 CPUs 2016-05-04 14:34:24 +01:00
efi_fbcon.c [efi] Work around broken GetFontInfo() implementations 2016-03-10 18:09:59 +00:00
efi_file.c [efi] Centralise EFI file system info GUIDs 2015-12-09 17:36:08 +00:00
efi_guid.c [efi] Add EFI_BLOCK_IO2_PROTOCOL header and GUID definition 2016-10-16 23:27:50 +01:00
efi_hii.c [efi] Fix uninitialised data in HII IFR structures 2016-06-29 15:17:12 +01:00
efi_init.c [efi] Work around temporal anomaly encountered during ExitBootServices() 2016-12-07 13:46:37 +00:00
efi_local.c [efi] Provide access to files stored on EFI filesystems 2016-03-14 21:11:01 +00:00
efi_pci.c [pci] Support systems with multiple PCI root bridges 2016-06-09 09:36:28 +01:00
efi_pxe.c [efi] Expose DHCP packets via the Apple NetBoot protocol 2016-05-29 13:10:14 +01:00
efi_reboot.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:50:42 +00:00
efi_smbios.c [smbios] Provide SMBIOS version number via smbios_version() 2013-03-20 00:12:30 +00:00
efi_snp.c [efi] Do not copy garbage bytes into SNP device path MAC address 2016-06-22 09:07:20 +01:00
efi_snp_hii.c [efi] Install the HII config access protocol on a child of the SNP handle 2016-07-08 14:16:32 +01:00
efi_strings.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
efi_time.c [efi] Add EFI time source 2015-04-14 11:55:08 +01:00
efi_timer.c [efi] Work around temporal anomaly encountered during ExitBootServices() 2016-12-07 13:46:37 +00:00
efi_uaccess.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
efi_umalloc.c [legal] Relicense files under GPL2_OR_LATER_OR_UBDL 2015-03-02 14:17:31 +00:00
efi_usb.c [usb] Allow USB endpoints to specify a reserved header length for refills 2016-01-19 00:01:11 +00:00
efi_utils.c [efi] Provide efi_devpath_len() 2015-09-13 12:54:31 +01:00
efi_watchdog.c [efi] Add missing "ULL" suffix on 64-bit constant 2015-08-03 13:05:21 +01:00
efi_wrap.c [efi] Improve efi_wrap debugging 2015-08-27 15:54:25 +01:00
efidrvprefix.c [efi] Move architecture-independent EFI prefixes to interface/efi 2016-03-17 14:51:14 +00:00
efiprefix.c [efi] Move architecture-independent EFI prefixes to interface/efi 2016-03-17 14:51:14 +00:00