]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[efi] Fix hang during ExitBootServices() 1136/head
authorRoss Lagerwall <ross.lagerwall@citrix.com>
Tue, 30 Jan 2024 10:52:29 +0000 (10:52 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 31 Jan 2024 13:23:56 +0000 (13:23 +0000)
commit65d69d33da445afc7ff56857af1881cf73666be4
tree5d5eab26731328a76eabac02bb086fa99f7aea6d
parent963ec1c4f379a49cf37d01472a770fff8e47470c
[efi] Fix hang during ExitBootServices()

When ExitBootServices() invokes efi_shutdown_hook(), there may be
nothing to generate an interrupt since the timer is disabled in the
first step of ExitBootServices().  Additionally, for VMs OVMF masks
everything from the PIC (except the timer) by default.  This means
that calling cpu_nap() may hang indefinitely.  This was seen in
practice in netfront_reset() when running in a VM on XenServer.

Fix this by skipping the halt if an EFI shutdown is in progress.

Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/arm/interface/efi/efiarm_nap.c
src/arch/loong64/interface/efi/efiloong64_nap.c
src/arch/x86/interface/efi/efix86_nap.c