Skip to content

Add PEI memory bin support [Rebase & FF]#1486

Open
makubacki wants to merge 7 commits into
OpenDevicePartnership:mainfrom
makubacki:add_pei_mem_bucket_support_2
Open

Add PEI memory bin support [Rebase & FF]#1486
makubacki wants to merge 7 commits into
OpenDevicePartnership:mainfrom
makubacki:add_pei_mem_bucket_support_2

Conversation

@makubacki
Copy link
Copy Markdown
Collaborator

Description

A few small commits for miscellaneous changes followed by the main commit for PEI memory bins.


sdk: Derive Clone and Copy for EFiMemoryTypeInformation

Allow EfiMemoryTypeInformation to be easily duplicated, as it is a simple struct containing only Copy types.


sdk: Add EFI_MAX_MEMORY_TYPE and INVALID_INFORMATION_INDEX constants

Provide a stable constant to represent the maximum valid EFI memory instead of hardcoding the value based on the last valid memory type.

INVALID_INFORMATION_INDEX is added as a sentinel value to indicate an invalid memory type index in the memory type information table.


sdk: Add more page helpers to base.rs

Adds the following helpers to help working with page operations:

  • align_pages_to_granularity(pages, granularity) - Aligns a page count up to the specified byte granularity. This is useful for calculating aligned page counts for memory types with allocation granularities larger than the page size.

  • page_shift_from_alignment(alignment) - Converts a page-aligned byte granularity to the corresponding bit shift value. This is useful for determining the shift needed to convert between addresses and page frame numbers.


patina_dxe_core: Add PEI memory bin support

Memory bins are pre-allocated, per-type regions of memory for EFI runtime memory types (ReservedMemory, RuntimeServicesCode, RuntimeServicesData, ACPIMemoryNVS, ACPIReclaimMemory). By over reserving these regions at a fixed size, the memory map presented to the OS has a much greater chance of remaining stable across boots, which is required for S4 (hibernate) resume.

This commit adds support for PEI memory bins allocated prior to DXE, such as in PEI, where the bin information is given to the Patina DXE core via HOBs.

A new module called MemoryBinManager is added. It tracks bin state: preferred ranges, allocation statistics, and the memory type information published to the EFI config table in addition to related bin logic for when producing the EFI memory map.

Two initialization paths are supported:

  • Path A - PEI-provided bins: A Resource Descriptor HOB with owner GUID gEfiMemoryTypeInformationGuid describes a contiguous region PEI set aside for bins. Bins are divided within that region with per-type granularity. Free GCD pages within each bin range are claimed with ownership preservation so other allocators cannot expand into them.

  • Path B - DXE-allocated bins: If a PEI region HOB does not exist, each bin type is allocated directly from the GCD using allocate-then-free with ownership preservation.

After bin initialization, seed_bin_statistics_from_hobs() scans Memory Allocation HOBs whose Name matches gEfiMemoryTypeInformationGuid to account for these potential PEI-phase allocations inside bin regions in initial bin statistics.

On every AllocatePages()/FreePages() call, record_allocation() and record_free() update the bin statistics for the relevant type. On free, if the pages fall within a bin range, GCD ownership is re-established to prevent other allocators from reclaiming those pages.

GetMemoryMap() calls apply_bin_descriptors() after populating the EFI memory map. This post-processing step converts EfiConventionalMemory entries that overlap bin ranges to the bin's memory type, splitting entries at bin boundaries as needed. The buffer-size calculation is updated to account for up to two extra descriptors per active bin.

install_memory_type_info_table() prefers the bin manager's peak-usage data when bins are initialized.

The previous reserve_memory_pages() API on PageAllocator and SpinLockedFixedSizeBlockAllocator is removed with logic moved into MemoryBinManager.


  • Impacts functionality?
  • Impacts security?
  • Breaking change?
  • Includes tests?
  • Includes documentation?

How This Was Tested

  • PEI bins active and inactive on QEMU Q35
  • Boot to EFI shell with SBSA
  • Boot to OS on 64-bit Intel physical platform
  • Note: Some additional physical platform testing with various features such as performance enabled is still in progress (PR in draft until done)

Integration Instructions

  • If using edk2, ensure edk2 PR 12086 is present
  • If using Mu, ensure mu_basecore PR 1759 is present
  • Set the Feature PCD gEfiMdeModulePkgTokenSpaceGuid.PcdPeiMemoryBinsEnable to TRUE
  • Refer to edk2 memory bin and Patina memory bin documentation for further details

PEI Bins Active Example

PEI Output: Bin allocation

AllocateMemoryTypeInformationBins: Attempting to allocate 0xDBB000 bytes for all memory bins
InitializeMemoryTypeInformationBins: Memory bins address range 0x7E233000 - 0x7EFEDFFF

Patina DXE Output

  • memory_bin log target at trace
Patina DXE Output: Init
Found Memory Type Information HOB (48 bytes, 6 entries)
  MemTypeInfo: ACPIMemoryNVS pages=128 (GCD alloc will use 128)
  MemTypeInfo: ACPIReclaimMemory pages=43 (GCD alloc will use 43)
  MemTypeInfo: ReservedMemoryType pages=1296 (GCD alloc will use 1296)
  MemTypeInfo: RuntimeServicesCode pages=256 (GCD alloc will use 256)
  MemTypeInfo: RuntimeServicesData pages=1792 (GCD alloc will use 1792)
Memory Type Information HOB found with 6 entries.
Found MemoryTypeInformation Resource Descriptor HOB: base=0x7E233000 length=0xDBB000
Found PEI bin region at 0x7E233000, length 0xDBB000.
Initializing memory bins from PEI range: base=0x7E233000 length=0xDBB000 total_needed=0xDBB000
  Bin[10] ACPIMemoryNVS: base=0x7EF6E000 max=0x7EFEDFFF pages=0x80 (128 pages)
  Bin[9] ACPIReclaimMemory: base=0x7EF43000 max=0x7EF6DFFF pages=0x2B (43 pages)
  Bin[0] ReservedMemoryType: base=0x7EA33000 max=0x7EF42FFF pages=0x510 (1296 pages)
  Bin[5] RuntimeServicesCode: base=0x7E933000 max=0x7EA32FFF pages=0x100 (256 pages)
  Bin[6] RuntimeServicesData: base=0x7E233000 max=0x7E932FFF pages=0x700 (1792 pages)
Memory bins initialized from pre-allocated range.
Reserving bin[0] ReservedMemoryType range=[0x7EA33000..0x7EF42FFF] (1296 pages)
Reserved bin[0] ReservedMemoryType: claimed=1296 pages, existing=0 pages, conflicting=0 pages (of 1296 total)
Reserving bin[5] RuntimeServicesCode range=[0x7E933000..0x7EA32FFF] (256 pages)
Reserved bin[5] RuntimeServicesCode: claimed=256 pages, existing=0 pages, conflicting=0 pages (of 256 total)
Reserving bin[6] RuntimeServicesData range=[0x7E233000..0x7E932FFF] (1792 pages)
Reserved bin[6] RuntimeServicesData: claimed=1663 pages, existing=129 pages, conflicting=0 pages (of 1792 total)
Reserving bin[9] ACPIReclaimMemory range=[0x7EF43000..0x7EF6DFFF] (43 pages)
Reserved bin[9] ACPIReclaimMemory: claimed=43 pages, existing=0 pages, conflicting=0 pages (of 43 total)
Reserving bin[10] ACPIMemoryNVS range=[0x7EF6E000..0x7EFEDFFF] (128 pages)
Reserved bin[10] ACPIMemoryNVS: claimed=128 pages, existing=0 pages, conflicting=0 pages (of 128 total)
 PEI seed: RuntimeServicesData +1 pages at 0x7E931000. total=1
 PEI seed: RuntimeServicesData +64 pages at 0x7E8F1000. total=65
 PEI seed: RuntimeServicesData +64 pages at 0x7E8B1000. total=129
Seeded bin statistics from 3 PEI Memory Allocation HOBs.
Patina DXE Output: Memory Map
  • Note: There are some expected EfiReservedMemoryType allocations of RT types intentionally outside bin ranges.
DEBUG - GetMemoryMap: processing bin[0] ReservedMemoryType range=[0x7EA33000..0x7EF42FFF]
DEBUG - GetMemoryMap: processing bin[5] RuntimeServicesCode range=[0x7E933000..0x7EA32FFF]
DEBUG - GetMemoryMap: processing bin[6] RuntimeServicesData range=[0x7E233000..0x7E932FFF]
DEBUG - GetMemoryMap: processing bin[9] ACPIReclaimMemory range=[0x7EF43000..0x7EF6DFFF]
DEBUG - GetMemoryMap: processing bin[10] ACPIMemoryNVS range=[0x7EF6E000..0x7EFEDFFF]
EfiReservedMemoryType       at 0 for 80 pages
EfiBootServicesData         at 50000 for 1 pages
EfiConventionalMemory       at 51000 for 54 pages
EfiBootServicesData         at 87000 for 1 pages
EfiConventionalMemory       at 88000 for 24 pages
EfiConventionalMemory       at 100000 for 1856 pages
EfiBootServicesData         at 840000 for 3520 pages
EfiConventionalMemory       at 1600000 for 498110 pages
EfiBootServicesData         at 7AFBE000 for 32 pages
EfiConventionalMemory       at 7AFDE000 for 17 pages
EfiBootServicesData         at 7AFEF000 for 96 pages
EfiConventionalMemory       at 7B04F000 for 4353 pages
EfiBootServicesData         at 7C150000 for 1848 pages
EfiBootServicesCode         at 7C888000 for 27 pages
EfiBootServicesData         at 7C8A3000 for 538 pages
EfiBootServicesCode         at 7CABD000 for 1162 pages
EfiBootServicesData         at 7CF47000 for 256 pages
EfiBootServicesCode         at 7D047000 for 102 pages
EfiBootServicesData         at 7D0AD000 for 42 pages
EfiConventionalMemory       at 7D0D7000 for 1 pages
EfiBootServicesData         at 7D0D8000 for 4 pages
EfiBootServicesCode         at 7D0DC000 for 73 pages
EfiBootServicesData         at 7D125000 for 5 pages
EfiBootServicesCode         at 7D12A000 for 214 pages
EfiBootServicesData         at 7D200000 for 2562 pages
EfiBootServicesCode         at 7DC02000 for 28 pages
EfiBootServicesData         at 7DC1E000 for 32 pages
EfiBootServicesCode         at 7DC3E000 for 365 pages
EfiBootServicesData         at 7DDAB000 for 5 pages
EfiBootServicesCode         at 7DDB0000 for 19 pages
EfiBootServicesData         at 7DDC3000 for 1 pages
EfiBootServicesCode         at 7DDC4000 for 1 pages
EfiBootServicesData         at 7DDC5000 for 5 pages
EfiBootServicesCode         at 7DDCA000 for 1 pages
EfiBootServicesData         at 7DDCB000 for 1 pages
EfiBootServicesCode         at 7DDCC000 for 1 pages
EfiBootServicesData         at 7DDCD000 for 41 pages
EfiBootServicesCode         at 7DDF6000 for 16 pages
EfiBootServicesData         at 7DE06000 for 33 pages
EfiBootServicesCode         at 7DE27000 for 12 pages
EfiBootServicesData         at 7DE33000 for 1024 pages
EfiRuntimeServicesData      at 7E233000 for 1792 pages
EfiRuntimeServicesCode      at 7E933000 for 256 pages
EfiReservedMemoryType       at 7EA33000 for 1296 pages
EfiACPIReclaimMemory        at 7EF43000 for 43 pages
EfiACPIMemoryNVS            at 7EF6E000 for 128 pages
EfiBootServicesCode         at 7EFEE000 for 15 pages
EfiBootServicesData         at 7EFFD000 for 3 pages
EfiReservedMemoryType       at 7F000000 for 4096 pages
PROGRESS CODE: V03051001 I0
Memory  Previous  Current   Minimum    Next
 Type    Pages     Pages     Pages     Pages
======  ========  ========  ========  =======
  0A    00000080  00000080  00000000  00000080
  09    0000002B  0000002B  00000000  0000002B
  00    00000510  00000510  00000000  00000510
  05    00000100  00000100  00000000  00000100
  06    00000700  00000700  00000000  00000700

PEI Bins Inactive Example

Patina DXE Output

  • memory_bin log target at trace
Patina DXE Output: Init
Found Memory Type Information HOB (48 bytes, 6 entries)
  MemTypeInfo: ACPIMemoryNVS pages=128 (GCD alloc will use 128)
  MemTypeInfo: ACPIReclaimMemory pages=43 (GCD alloc will use 43)
  MemTypeInfo: ReservedMemoryType pages=1296 (GCD alloc will use 1296)
  MemTypeInfo: RuntimeServicesCode pages=256 (GCD alloc will use 256)
  MemTypeInfo: RuntimeServicesData pages=1792 (GCD alloc will use 1792)
Memory Type Information HOB found with 6 entries.
No MemoryTypeInformation Resource Descriptor HOB found. DXE will allocate bins.
No PEI bin region found. Allocating bins per-type from GCD.
  Bin[10] ACPIMemoryNVS: base=0x7E8D9000 max=0x7E958FFF pages=128
  Bin[9] ACPIReclaimMemory: base=0x7E8AE000 max=0x7E8D8FFF pages=43
  Bin[0] ReservedMemoryType: base=0x7DFF0000 max=0x7E4FFFFF pages=1296
  Bin[5] RuntimeServicesCode: base=0x7DEF0000 max=0x7DFEFFFF pages=256
  Bin[6] RuntimeServicesData: base=0x7D7F0000 max=0x7DEEFFFF pages=1792
Seeded bin statistics from 0 PEI Memory Allocation HOBs.
Patina DXE Output: Memory Map
  • Note: There are some expected allocations of RT types intentionally outside bin ranges due to PEI bins being inactive and RT memory allocated in PEI.
DEBUG - GetMemoryMap: processing bin[0] ReservedMemoryType range=[0x7DFF0000..0x7E4FFFFF]
DEBUG - GetMemoryMap: processing bin[5] RuntimeServicesCode range=[0x7DEF0000..0x7DFEFFFF]
DEBUG - GetMemoryMap: processing bin[6] RuntimeServicesData range=[0x7D7F0000..0x7DEEFFFF]
DEBUG - GetMemoryMap: processing bin[9] ACPIReclaimMemory range=[0x7E8AE000..0x7E8D8FFF]
DEBUG - GetMemoryMap: processing bin[10] ACPIMemoryNVS range=[0x7E8D9000..0x7E958FFF]
EfiReservedMemoryType       at 0 for 80 pages
EfiBootServicesData         at 50000 for 1 pages
EfiConventionalMemory       at 51000 for 54 pages
EfiBootServicesData         at 87000 for 1 pages
EfiConventionalMemory       at 88000 for 24 pages
EfiConventionalMemory       at 100000 for 1856 pages
EfiBootServicesData         at 840000 for 3520 pages
EfiConventionalMemory       at 1600000 for 498110 pages
EfiBootServicesData         at 7AFBE000 for 32 pages
EfiConventionalMemory       at 7AFDE000 for 17 pages
EfiBootServicesData         at 7AFEF000 for 96 pages
EfiConventionalMemory       at 7B04F000 for 4219 pages
EfiBootServicesData         at 7C0CA000 for 1848 pages
EfiBootServicesCode         at 7C802000 for 27 pages
EfiBootServicesData         at 7C81D000 for 538 pages
EfiBootServicesCode         at 7CA37000 for 1086 pages
EfiBootServicesData         at 7CE75000 for 261 pages
EfiConventionalMemory       at 7CF7A000 for 1 pages
EfiBootServicesData         at 7CF7B000 for 5 pages
EfiBootServicesCode         at 7CF80000 for 368 pages
EfiBootServicesData         at 7D0F0000 for 1792 pages
EfiRuntimeServicesData      at 7D7F0000 for 1792 pages
EfiRuntimeServicesCode      at 7DEF0000 for 256 pages
EfiReservedMemoryType       at 7DFF0000 for 1296 pages
EfiBootServicesData         at 7E500000 for 769 pages
EfiBootServicesCode         at 7E801000 for 59 pages
EfiRuntimeServicesData      at 7E83C000 for 4 pages
EfiReservedMemoryType       at 7E840000 for 2 pages
EfiBootServicesData         at 7E842000 for 42 pages
EfiBootServicesCode         at 7E86C000 for 66 pages
EfiACPIReclaimMemory        at 7E8AE000 for 43 pages
EfiACPIMemoryNVS            at 7E8D9000 for 128 pages
EfiBootServicesData         at 7E959000 for 32 pages
EfiBootServicesCode         at 7E979000 for 365 pages
EfiBootServicesData         at 7EAE6000 for 5 pages
EfiBootServicesCode         at 7EAEB000 for 19 pages
EfiBootServicesData         at 7EAFE000 for 1 pages
EfiBootServicesCode         at 7EAFF000 for 1 pages
EfiBootServicesData         at 7EB00000 for 5 pages
EfiBootServicesCode         at 7EB05000 for 1 pages
EfiBootServicesData         at 7EB06000 for 1 pages
EfiBootServicesCode         at 7EB07000 for 1 pages
EfiBootServicesData         at 7EB08000 for 41 pages
EfiBootServicesCode         at 7EB31000 for 16 pages
EfiBootServicesData         at 7EB41000 for 33 pages
EfiBootServicesCode         at 7EB62000 for 12 pages
EfiBootServicesData         at 7EB6E000 for 1024 pages
EfiRuntimeServicesData      at 7EF6E000 for 129 pages
EfiBootServicesCode         at 7EFEF000 for 14 pages
EfiBootServicesData         at 7EFFD000 for 3 pages
EfiReservedMemoryType       at 7F000000 for 4096 pages
PROGRESS CODE: V03051001 I0
Memory  Previous  Current   Minimum    Next
 Type    Pages     Pages     Pages     Pages
======  ========  ========  ========  =======
  0A    00000080  00000080  00000000  00000080
  09    0000002B  0000002B  00000000  0000002B
  00    00000510  00000510  00000000  00000510
  05    00000100  00000100  00000000  00000100
  06    00000700  00000700  00000000  00000700

@makubacki makubacki requested review from cfernald, kuqin12 and os-d April 29, 2026 14:53
@makubacki makubacki self-assigned this Apr 29, 2026
@patina-automation
Copy link
Copy Markdown
Contributor

patina-automation Bot commented Apr 29, 2026

✅ QEMU Validation Passed

All QEMU validation jobs completed successfully.

Note: Q35 is only built on Windows hosts (QEMU boot is disabled due to a QEMU vfat issue).

Workflow run: https://github.com/OpenDevicePartnership/patina/actions/runs/25883287456

Boot Time to EFI Shell

Platform Elapsed
Q35 (Linux Host) 27.1s
SBSA (Linux Host) 34.9s

Dependencies

Repository Ref
patina 4dd8235
patina-dxe-core-qemu e178e37
patina-fw-patcher d656f1d
patina-qemu firmware v3.0.0
patina-qemu build script e0231b7

This comment was automatically generated by the Patina QEMU PR Validation Post workflow.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 29, 2026

Codecov Report

❌ Patch coverage is 86.78756% with 153 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
patina_dxe_core/src/memory_bin.rs 90.11% 95 Missing ⚠️
patina_dxe_core/src/allocator.rs 56.82% 57 Missing ⚠️
patina_dxe_core/src/gcd.rs 66.67% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@cfernald
Copy link
Copy Markdown
Contributor

cfernald commented May 5, 2026

@makubacki, you've requested reviews, but the PR is still in draft. Is this ready to be reviewed?

Comment thread sdk/patina/src/base.rs Outdated
Comment thread docs/src/dxe_core/memory_bins.md
Comment thread docs/src/dxe_core/memory_bins.md
Comment thread docs/src/dxe_core/memory_bins.md Outdated
Comment thread patina_dxe_core/src/allocator/uefi_allocator.rs
Comment thread patina_dxe_core/src/memory_bin.rs Outdated
Comment thread patina_dxe_core/src/memory_bin.rs Outdated
Comment thread patina_dxe_core/src/memory_bin.rs Outdated
Comment thread patina_dxe_core/src/memory_bin.rs Outdated
Comment thread patina_dxe_core/src/memory_bin.rs Outdated
makubacki added 3 commits May 13, 2026 18:20
Allow EfiMemoryTypeInformation to be easily duplicated, as it is a
simple struct containing only Copy types.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Provide a stable constant to represent the maximum valid EFI memory
instead of hardcoding the value based on the last valid memory type.

INVALID_INFORMATION_INDEX is added as a sentinel value to indicate an
invalid memory type index in the memory type information table.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Adds the following helpers to help working with page operations:

- `align_pages_to_granularity(pages, granularity)` - Aligns a page
  count up to the specified byte granularity. This is useful for
  calculating aligned page counts for memory types with allocation
  granularities larger than the page size.

- `page_shift_from_alignment(alignment)` - Converts a
  page-aligned byte granularity to the corresponding bit shift value.
  This is useful for determining the shift needed to convert between
  addresses and page frame numbers.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
@makubacki makubacki force-pushed the add_pei_mem_bucket_support_2 branch 5 times, most recently from 6d1543a to 0516433 Compare May 14, 2026 19:54
makubacki added 4 commits May 14, 2026 16:02
Memory bins are pre-allocated, per-type regions of memory for EFI
runtime memory types (ReservedMemory, RuntimeServicesCode,
RuntimeServicesData, ACPIMemoryNVS, ACPIReclaimMemory). By over
reserving these regions at a fixed size, the memory map presented to
the OS has a much greater chance of remaining stable across boots,
which is required for S4 (hibernate) resume.

This commit adds support for PEI memory bins allocated prior to DXE,
such as in PEI, where the bin information is given to the Patina DXE
core via HOBs.

A new module called MemoryBinManager is added. It tracks bin state:
preferred ranges, allocation statistics, and the memory type
information published to the EFI config table in addition to related
bin logic for when producing the EFI memory map.

Two initialization paths are supported:

  Path A - PEI-provided bins: A Resource Descriptor HOB with owner GUID
  gEfiMemoryTypeInformationGuid describes a contiguous region PEI set
  aside for bins. Bins are divided within that region with per-type
  granularity. Free GCD pages within each bin range are claimed with
  ownership preservation so other allocators cannot expand into them.

  Path B - DXE-allocated bins: If a PEI region HOB does not exist, each
  bin type is allocated directly from the GCD using allocate-then-free
  with ownership preservation.

After bin initialization, seed_bin_statistics_from_hobs() scans Memory
Allocation HOBs whose Name matches gEfiMemoryTypeInformationGuid to
account for these potential PEI-phase allocations inside bin regions
in initial bin statistics.

On every AllocatePages()/FreePages() call, record_allocation() and
record_free() update the bin statistics for the relevant type. On free,
if the pages fall within a bin range, GCD ownership is re-established
to prevent other allocators from reclaiming those pages.

GetMemoryMap() calls apply_bin_descriptors() after populating the EFI
memory map. This post-processing step converts EfiConventionalMemory
entries that overlap bin ranges to the bin's memory type, splitting
entries at bin boundaries as needed. The buffer-size calculation is
updated to account for up to two extra descriptors per active bin.

install_memory_type_info_table() prefers the bin manager's peak-usage
data when bins are initialized.

The previous reserve_memory_pages() API on PageAllocator and
SpinLockedFixedSizeBlockAllocator is removed with logic moved into
MemoryBinManager.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Refactor Path B (DXE-allocated bins) to allocate a single contiguous
block from the GCD instead of separate per-type allocations. The block
is freed and then follows the same path as PEI-provided bins (Path A).

In the process, some code is unified and the logic to map bin memory
type allocators to their ranges can be simplified.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
The GCD struct held a large EFiMemoryTypeInformation array that each
FixedSizeBlockAllocator wrote to with NonNull on every alloc, free,
and pool expansion. This was used as a config table fallback for
memory type allocation stats.

This change replaces the NonNull<EFiMemoryTypeInformation> field in
the FSB with a plain memory_type: efi::MemoryType field. In the
process, this also eliminates two unsafe pointer dereferences and an
update_gcd_stats() call on every allocation.

An allocator stats dump now calculates stats on demand.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
- Enhance memory bin trace level logging detail.
- Update memory_type_name() to return a static string to eliminate
  heap allocations in the call.
- Dump memory bin stats at debug level in get_memory_map() when the
  memory_bin log target is enabled.
- Dump allocator stats at trace level in get_memory_map() when trace
  trace logging is enabled.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
@makubacki makubacki force-pushed the add_pei_mem_bucket_support_2 branch from 0516433 to 4dd8235 Compare May 14, 2026 20:02
@makubacki makubacki marked this pull request as ready for review May 14, 2026 20:29
@makubacki
Copy link
Copy Markdown
Collaborator Author

@makubacki, you've requested reviews, but the PR is still in draft. Is this ready to be reviewed?

Testing was still in progress at the time. I've taken it out of draft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

impact:testing Affects testing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants