[RFC PATCH 0/2] Clean up protocol installation API
Ilias Apalodimas
ilias.apalodimas at linaro.org
Wed Oct 5 17:26:00 CEST 2022
This RFC is trying to clean up the usage of the internal functions used
to manage the protocol and handle lifetimes. Currently we arbitrarily
use either InstallProtocol, InstallMultipleProtocol and a combination of
efi_add_protocol, efi_create_handle, efi_delete_handle(). The latter
is the most problematic one since it blindly removes all protocols from
a handle and finally the handle itself. This is prone to coding errors
Since someone might inadvertently delete a handle while other consumers
still use a protocol.
InstallProtocol is also ambiguous since the EFI spec only demands
InstallMultipleProtocol to test and guarantee a duplicate device path is
not inadvertently installed on two different handles. So this patch
series is preparing the ground in order for InstallMultipleProtocol and
UnInstallMultipleProtocol to be used internally in U-Boot.
There is an example on bootefi.c demonstrating how the cleanup would
eventually look like. If we agree on the direction, I'll clean up the
remaining callsites with InstallMultipleProtocol.
Size differences between old/new binary show that eventually we will
manage to reduce the overall code size by getting rid all the
unneeded EFI_CALL invocations
add/remove: 4/0 grow/shrink: 1/6 up/down: 1128/-892 (236)
Function old new delta
__efi_install_multiple_protocol_interfaces - 496 +496
__efi_uninstall_multiple_protocol_interfaces - 412 +412
efi_uninstall_multiple_protocol_interfaces_ext - 108 +108
efi_install_multiple_protocol_interfaces_ext - 108 +108
efi_run_image 288 292 +4
efi_initrd_register 220 212 -8
efi_console_register 344 336 -8
efi_disk_add_dev.part 644 632 -12
efi_root_node_register 256 240 -16
efi_uninstall_multiple_protocol_interfaces 472 84 -388
efi_install_multiple_protocol_interfaces 544 84 -460
Total: Before=547442, After=547678, chg +0.04%
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Data old new delta
Total: Before=101061, After=101061, chg +0.00%
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
RO Data old new delta
Total: Before=42925, After=42925, chg +0.00%
Ilias Apalodimas (2):
efi_loader: define internal implementation of
install/uninstallmultiple
cmd: replace efi_create_handle/add_protocol with
InstallMultipleProtocol
cmd/bootefi.c | 13 ++-
include/efi.h | 2 +
include/efi_loader.h | 6 +-
lib/efi_loader/efi_boottime.c | 180 ++++++++++++++++++++++++-------
lib/efi_loader/efi_capsule.c | 15 +--
lib/efi_loader/efi_console.c | 14 +--
lib/efi_loader/efi_disk.c | 10 +-
lib/efi_loader/efi_load_initrd.c | 15 ++-
lib/efi_loader/efi_root_node.c | 44 ++++----
9 files changed, 203 insertions(+), 96 deletions(-)
--
2.34.1
More information about the U-Boot
mailing list