mirror of https://github.com/ipxe/ipxe.git
[efi] Raise TPL during driver unload entry point
The efi_unload() function is currently missing the calls to raise and restore the TPL. This has the side effect of causing iPXE to return from the driver unload entry point at TPL_CALLBACK, which will cause unexpected behaviour (typically a system lockup) shortly afterwards. Fix by adding the missing calls to raise and restore the TPL. Debugged-by: Petr Borsodi <petr.borsodi@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/522/head
parent
3ad27fbe78
commit
a046da21a4
|
@ -316,9 +316,13 @@ EFI_STATUS efi_init ( EFI_HANDLE image_handle,
|
||||||
static EFI_STATUS EFIAPI efi_unload ( EFI_HANDLE image_handle __unused ) {
|
static EFI_STATUS EFIAPI efi_unload ( EFI_HANDLE image_handle __unused ) {
|
||||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||||
EFI_SYSTEM_TABLE *systab = efi_systab;
|
EFI_SYSTEM_TABLE *systab = efi_systab;
|
||||||
|
struct efi_saved_tpl tpl;
|
||||||
|
|
||||||
DBGC ( systab, "EFI image unloading\n" );
|
DBGC ( systab, "EFI image unloading\n" );
|
||||||
|
|
||||||
|
/* Raise TPL */
|
||||||
|
efi_raise_tpl ( &tpl );
|
||||||
|
|
||||||
/* Shut down */
|
/* Shut down */
|
||||||
shutdown_exit();
|
shutdown_exit();
|
||||||
|
|
||||||
|
@ -336,6 +340,9 @@ static EFI_STATUS EFIAPI efi_unload ( EFI_HANDLE image_handle __unused ) {
|
||||||
|
|
||||||
DBGC ( systab, "EFI image unloaded\n" );
|
DBGC ( systab, "EFI image unloaded\n" );
|
||||||
|
|
||||||
|
/* Restore TPL */
|
||||||
|
efi_restore_tpl ( &tpl );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue