x86, efi: retry ExitBootServices() on failure
authorZach Bobroff <zacharyb@ami.com>
Fri, 7 Jun 2013 12:02:50 +0000 (13:02 +0100)
committerMatt Fleming <matt.fleming@intel.com>
Tue, 11 Jun 2013 06:51:54 +0000 (07:51 +0100)
commitd3768d885c6ccbf8a137276843177d76c49033a7
treea50eb1b4b1b0ff59a55633562b7096bc091889af
parent43ab0476a648053e5998bf081f47f215375a4502
x86, efi: retry ExitBootServices() on failure

ExitBootServices is absolutely supposed to return a failure if any
ExitBootServices event handler changes the memory map.  Basically the
get_map loop should run again if ExitBootServices returns an error the
first time.  I would say it would be fair that if ExitBootServices gives
an error the second time then Linux would be fine in returning control
back to BIOS.

The second change is the following line:

again:
        size += sizeof(*mem_map) * 2;

Originally you were incrementing it by the size of one memory map entry.
The issue here is all related to the low_alloc routine you are using.
In this routine you are making allocations to get the memory map itself.
Doing this allocation or allocations can affect the memory map by more
than one record.

[ mfleming - changelog, code style ]
Signed-off-by: Zach Bobroff <zacharyb@ami.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
arch/x86/boot/compressed/eboot.c