I can confirm same behavior, using bootx64.efi from esxi 7, the following 
produces the same behavior he reported:
#!ipxe
chain boot/efi/boot/bootx64.efi -c /path/to/boot.cfg also call 
efi_snp_release() of course.

> iPXE then invokes the OS kernel via StartImage(). At this point, the TPL is 
> whatever TPL was recorded when iPXE was started, which should be 
> TPL_APPLICATION.

Well, iPXE code may still run at this point. In fact it explicitly does for 
iPXE booted ESXi boot loader. efi_download.c has three functions that may be 
called by the loaded efi executable. At the very least they call 
efi_download_start. I don't know the full flow of the code, but I am wondering 
if efi_download_start use of intf_init or xfer_open before calling 
efi_snp_claim causes a RaiseTPL before efi_snp_claim stores the old TPL causing 
it to erroneously 'save' iPXE induced TPL_CALLBACK as the 'old' TPL? I am a bit 
preoccupied today, but I'd be tempted to modify efi_download_start() to call 
claim earlier and call efi_snp_release() on error. I'm a bit rusty and I 
botched even a simple change so I'm not sure.

If my naive guess happens to be in the ballpark, it doesn't explain a *seeming* 
improvement in our Linux boot testing, where iPXE DL protocol is not used and 
we also were seeing errors on kernel trying to exit boot servicing that 
happened *sometimes*. However this was a little fuzzier so it may not be 
completely accurate.



-- 
You are receiving this because you commented.
Reply to this email directly or view it on GitHub:
https://github.com/ipxe/ipxe/pull/113#issuecomment-651752678
_______________________________________________
ipxe-devel mailing list
ipxe-devel@lists.ipxe.org
https://lists.ipxe.org/mailman/listinfo/ipxe-devel

Reply via email to