[U-Boot] [PATCH 1/1] efi_loader: create handles from normal memory

Handles are not used at runtime. They are freed by the firmware when the last protocol interface is uninstalled. So there is no reason to use EFI memory when creating handles.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- lib/efi_loader/efi_boottime.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index b7ab2e8208e..50d311548e2 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -431,16 +431,15 @@ void efi_add_handle(struct efi_object *obj) efi_status_t efi_create_handle(efi_handle_t *handle) { struct efi_object *obj; - efi_status_t r;
- r = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES, - sizeof(struct efi_object), - (void **)&obj); - if (r != EFI_SUCCESS) - return r; + obj = calloc(1, sizeof(struct efi_object)); + if (!obj) + return EFI_OUT_OF_RESOURCES; + efi_add_handle(obj); *handle = obj->handle; - return r; + + return EFI_SUCCESS; }
/**

On 27.05.18 16:47, Heinrich Schuchardt wrote:
Handles are not used at runtime. They are freed by the firmware when the last protocol interface is uninstalled. So there is no reason to use EFI memory when creating handles.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
I agree that efi object structs are supposed to be opaque and thus we can use any allocation mechanism we like.
What I also see is that efi_delete_handle() even calls free() on objects, so spawning them from efi memory rather than malloc memory is also just wrong.
In short, I think your patch is completely correct :).
Alex

On 06/03/2018 03:23 PM, Alexander Graf wrote:
On 27.05.18 16:47, Heinrich Schuchardt wrote:
Handles are not used at runtime. They are freed by the firmware when the last protocol interface is uninstalled. So there is no reason to use EFI memory when creating handles.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
I agree that efi object structs are supposed to be opaque and thus we can use any allocation mechanism we like.
What I also see is that efi_delete_handle() even calls free() on objects, so spawning them from efi memory rather than malloc memory is also just wrong.
The bit that is missing is to call efi_delete_handle() when the last protocol interface is uninstalled. Before doing so we must ensure that no static memory is used and the first element of the handles is an efi_obj. I did not yet check if we reached that point.
Best regards
Heinrich
In short, I think your patch is completely correct :).
Alex
participants (2)
-
Alexander Graf
-
Heinrich Schuchardt