diff --git a/xtldr/amd64/memory.c b/xtldr/amd64/memory.c index 64acabf..ee29723 100644 --- a/xtldr/amd64/memory.c +++ b/xtldr/amd64/memory.c @@ -119,6 +119,14 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); if(Status != STATUS_EFI_SUCCESS) { + /* Retry as UEFI spec says to do it twice */ + Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); + } + + /* Check if exitted boot services successfully */ + if(Status != STATUS_EFI_SUCCESS) + { + /* Failed to exit boot services */ BlDbgPrint(L"Failed to exit boot services (Status code: %lx)\n", Status); return STATUS_EFI_ABORTED; } diff --git a/xtldr/i686/memory.c b/xtldr/i686/memory.c index 2ba4c3b..ae99f4c 100644 --- a/xtldr/i686/memory.c +++ b/xtldr/i686/memory.c @@ -216,6 +216,14 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); if(Status != STATUS_EFI_SUCCESS) { + /* Retry as UEFI spec says to do it twice */ + Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); + } + + /* Check if exitted boot services successfully */ + if(Status != STATUS_EFI_SUCCESS) + { + /* Failed to exit boot services */ BlDbgPrint(L"Failed to exit boot services (Status code: %lx)\n", Status); return STATUS_EFI_ABORTED; }