Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • early-display
  • variant-emmc-nvme-boot
  • 2023-01-25
  • v3
  • variant-emmc-nvme-boot
  • 2020-06-01
7 results

efi_boottime.c

Blame
  • Forked from Reform / reform-boundary-uboot
    Source project has a limited visibility.
    • Stefan Brüns's avatar
      42417bc8
      efi_loader: Track size of pool allocations to allow freeing · 42417bc8
      Stefan Brüns authored
      
      We need a functional free_pool implementation, as otherwise each
      allocate_pool causes growth of the memory descriptor table.
      
      Different to free_pages, free_pool does not provide the size for the
      to be freed allocation, thus we have to track the size ourselves.
      
      As the only EFI requirement for pool allocation is an alignment of
      8 bytes, we can keep allocating a range using the page allocator,
      reserve the first 8 bytes for our bookkeeping and hand out the
      remainder to the caller. This saves us from having to use any
      independent data structures for tracking.
      
      To simplify the conversion between pool allocations and the corresponding
      page allocation, we create an auxiliary struct efi_pool_allocation.
      
      Given the allocation size free_pool size can handoff freeing the page
      range, which was indirectly allocated by a call to allocate_pool,
      to free_pages.
      
      Signed-off-by: default avatarStefan Brüns <stefan.bruens@rwth-aachen.de>
      Reviewed-by: default avatarAlexander Graf <agraf@suse.de>
      Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
      42417bc8
      History
      efi_loader: Track size of pool allocations to allow freeing
      Stefan Brüns authored
      
      We need a functional free_pool implementation, as otherwise each
      allocate_pool causes growth of the memory descriptor table.
      
      Different to free_pages, free_pool does not provide the size for the
      to be freed allocation, thus we have to track the size ourselves.
      
      As the only EFI requirement for pool allocation is an alignment of
      8 bytes, we can keep allocating a range using the page allocator,
      reserve the first 8 bytes for our bookkeeping and hand out the
      remainder to the caller. This saves us from having to use any
      independent data structures for tracking.
      
      To simplify the conversion between pool allocations and the corresponding
      page allocation, we create an auxiliary struct efi_pool_allocation.
      
      Given the allocation size free_pool size can handoff freeing the page
      range, which was indirectly allocated by a call to allocate_pool,
      to free_pages.
      
      Signed-off-by: default avatarStefan Brüns <stefan.bruens@rwth-aachen.de>
      Reviewed-by: default avatarAlexander Graf <agraf@suse.de>
      Signed-off-by: default avatarAlexander Graf <agraf@suse.de>