If ExitBootServices fails due to a stale efi_mapkey then GetMemoryMap must be called again. In this case it is also possible for the memory map to grow, so repeat the initial GetMemoryMap call to fetch the new size.
Also roll bi_add_efi_data_and_exit into bi_load_efi_data as there's no need for it to be a separate function.
PR: 202455
MFC with: rS292338
MFC after: 1 week
Reported by: Berislav Purgar <bpurgar@gmail.com>
Tested by: Berislav Purgar <bpurgar@gmail.com>
Sponsored by: The FreeBSD Foundation