[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: grub_efi_finish_boot_services not spec-compliant
From: |
Seth Goldberg |
Subject: |
Re: grub_efi_finish_boot_services not spec-compliant |
Date: |
Sun, 24 Feb 2013 15:46:47 -0800 |
On Feb 23, 2013, at 9:13 PM, Andrey Borzenkov <address@hidden> wrote:
> В Sat, 23 Feb 2013 20:35:17 -0800
> Seth Goldberg <address@hidden> пишет:
>
>> Hi there,
>>
>> On some systems, ExitBootServices() will fail due to a change in the memory
>> map during execution of the boot services call. The UEFI spec says that in
>> that event, GetMemoryMap() should be repeated, then the new key passed to
>> another call to ExitBootServices(). Note that the spec doesn't give an
>> upper bound on the number of times to do this dance. The logic in
>> grub_efi_finish_boot_services() just tries once, leading to a failure to
>> properly shut down boot services and various issue booting UEFI-compliant
>> operating systems.
>
> I have seen reports about ELILO failing due to changed memory map too,
> but ELILO does retry GetMemoryMap() and still fails
> (https://bugzilla.novell.com/show_bug.cgi?id=800035). Did you test if
> increasing number of attempts to get memory map fixes it in your case?
> What hardware is it?
Actually, ELILO violates the UEFI spec by calling other UEFI APIs (like
memory allocation APIs) after the failed call to ExitBootServices, which is
probably why it fails on those systems that require the retry. The spec
explicitly states that ONLY GetMemoryMap is safe to call after a failed call to
ExitBootServices.
In my case, it is necessary to repeat the GetMemoryMap / ExitBootServices pair
an additional time for it to succeed.
--S
>
> _______________________________________________
> Grub-devel mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/grub-devel