[U-Boot] [PATCH 03/23] efi_loader: support 16 protocols per efi_object

Alexander Graf agraf at suse.de
Fri Sep 1 08:15:22 UTC 2017



On 01.09.17 03:45, Heinrich Schuchardt wrote:
> On 08/31/2017 04:01 PM, Alexander Graf wrote:
>> On 08/27/2017 12:51 AM, Heinrich Schuchardt wrote:
>>> 8 protocols per efi_object is insufficient for iPXE.
>>>
>>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>>> ---
>>>    include/efi_loader.h | 4 ++--
>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/include/efi_loader.h b/include/efi_loader.h
>>> index 6f71a6202b..e8fb4fbb0a 100644
>>> --- a/include/efi_loader.h
>>> +++ b/include/efi_loader.h
>>> @@ -99,8 +99,8 @@ struct efi_handler {
>>>    struct efi_object {
>>>        /* Every UEFI object is part of a global object list */
>>>        struct list_head link;
>>> -    /* We support up to 8 "protocols" an object can be accessed
>>> through */
>>> -    struct efi_handler protocols[8];
>>> +    /* We support up to 16 "protocols" an object can be accessed
>>> through */
>>> +    struct efi_handler protocols[16];
>>
>> Can you try to convert it into a list instead? Leif tried to make the
>> UEFI Shell work and stumbled over the same limitation, so I guess a
>> static array won't cut it for long.
>>
>>
>> Alex
>>
>>
> 
> Hello Alex,
> 
> is it safe to call malloc and free before efi_exit_boot_services?

Yes :). Before exiting boot services we're basically in normal U-Boot 
space with a U-Boot owned malloc region that we can allocate from.

> Currently we do not check that boottime services are not called after
> efi_exit_boot_services. Shouldn't every call to boottime services fail

Yes, IIUC it's simply illegal to call them afterwards.

> thereafter? The spec says: "After successfully calling
> ExitBootServices(), all boot services in the system are terminated."

I'm not sure. I'd be very surprised to see a payload actually call any 
boot service after exiting boot services. Runtime services is a 
different question, but those are very special anyway.

> We definitively do not want to call malloc at runtime because all
> available memory (except for EFI_MEMORY_RUNTIME) is managed by the
> operating system.

Yes, but efi objects only exist during boot time. Runtime services don't 
expose protocols or objects.


Alex


More information about the U-Boot mailing list