From f8aabf6e4c199e92498512e1d0cf9a347b62e491 Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Fri, 6 Mar 2015 02:56:20 +0000 Subject: MdeModulePkg: carve pool pages into the largest chunks possible In preparation of the next patch, that serves allocations from higher-up bins if the current bin is depleted, this patch updates the carving up strategy to populate the largest bins first. To ensure that there will always be an allocation of the appropriate size made, the current allocation request is served first from the newly allocated memory region. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17014 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Core/Dxe/Mem/Pool.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'MdeModulePkg/Core') diff --git a/MdeModulePkg/Core/Dxe/Mem/Pool.c b/MdeModulePkg/Core/Dxe/Mem/Pool.c index 0c5cf3d284..23409d35c4 100644 --- a/MdeModulePkg/Core/Dxe/Mem/Pool.c +++ b/MdeModulePkg/Core/Dxe/Mem/Pool.c @@ -352,9 +352,15 @@ CoreAllocatePoolI ( } // - // Carve up new page into free pool blocks + // Serve the allocation request from the head of the allocated block // - Offset = 0; + Head = (POOL_HEAD *) NewPage; + Offset = LIST_TO_SIZE (Index); + + // + // Carve up remaining space into free pool blocks + // + Index = SIZE_TO_LIST (Granularity) - 1; while (Offset < Granularity) { ASSERT (Index < MAX_POOL_LIST); FSize = LIST_TO_SIZE(Index); @@ -371,7 +377,7 @@ CoreAllocatePoolI ( } ASSERT (Offset == Granularity); - Index = SIZE_TO_LIST(Size); + goto Done; } // -- cgit v1.2.3