diff options
author | Star Zeng <star.zeng@intel.com> | 2016-04-11 11:00:47 +0800 |
---|---|---|
committer | Star Zeng <star.zeng@intel.com> | 2016-04-22 13:39:56 +0800 |
commit | 925f0d1ae144a0b57b70fe89a26d47660cf488c7 (patch) | |
tree | 1b7ee954fcef18c341651ac6122c64ce657c6ffb /MdeModulePkg/Core/Dxe/Mem/Pool.c | |
parent | 2bfac751a7229c5407b5e4571d95d3a07866ec3d (diff) | |
download | edk2-platforms-925f0d1ae144a0b57b70fe89a26d47660cf488c7.tar.xz |
MdeModulePkg DxeCore: Return memory type from internal free pool/pages
The following patch for MemoryAttributesTable will need the memory type.
And CoreUpdateProfile() can also use the memory type for check.
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Feng Tian <feng.tian@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Diffstat (limited to 'MdeModulePkg/Core/Dxe/Mem/Pool.c')
-rw-r--r-- | MdeModulePkg/Core/Dxe/Mem/Pool.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/MdeModulePkg/Core/Dxe/Mem/Pool.c b/MdeModulePkg/Core/Dxe/Mem/Pool.c index 528c8e8ce9..5496a09cfa 100644 --- a/MdeModulePkg/Core/Dxe/Mem/Pool.c +++ b/MdeModulePkg/Core/Dxe/Mem/Pool.c @@ -459,6 +459,7 @@ Done: Frees pool.
@param Buffer The allocated pool entry to free
+ @param PoolType Pointer to pool type
@retval EFI_INVALID_PARAMETER Buffer is not a valid value.
@retval EFI_SUCCESS Pool successfully freed.
@@ -467,7 +468,8 @@ Done: EFI_STATUS
EFIAPI
CoreInternalFreePool (
- IN VOID *Buffer
+ IN VOID *Buffer,
+ OUT EFI_MEMORY_TYPE *PoolType OPTIONAL
)
{
EFI_STATUS Status;
@@ -477,7 +479,7 @@ CoreInternalFreePool ( }
CoreAcquireMemoryLock ();
- Status = CoreFreePoolI (Buffer);
+ Status = CoreFreePoolI (Buffer, PoolType);
CoreReleaseMemoryLock ();
return Status;
}
@@ -497,9 +499,10 @@ CoreFreePool ( IN VOID *Buffer
)
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
+ EFI_MEMORY_TYPE PoolType;
- Status = CoreInternalFreePool (Buffer);
+ Status = CoreInternalFreePool (Buffer, &PoolType);
if (!EFI_ERROR (Status)) {
CoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), MemoryProfileActionFreePool, (EFI_MEMORY_TYPE) 0, 0, Buffer);
}
@@ -511,6 +514,7 @@ CoreFreePool ( Caller must have the memory lock held
@param Buffer The allocated pool entry to free
+ @param PoolType Pointer to pool type
@retval EFI_INVALID_PARAMETER Buffer not valid
@retval EFI_SUCCESS Buffer successfully freed.
@@ -518,7 +522,8 @@ CoreFreePool ( **/
EFI_STATUS
CoreFreePoolI (
- IN VOID *Buffer
+ IN VOID *Buffer,
+ OUT EFI_MEMORY_TYPE *PoolType OPTIONAL
)
{
POOL *Pool;
@@ -583,6 +588,10 @@ CoreFreePoolI ( Granularity = DEFAULT_PAGE_ALLOCATION;
}
+ if (PoolType != NULL) {
+ *PoolType = Head->Type;
+ }
+
//
// Determine the pool list
//
@@ -667,7 +676,7 @@ CoreFreePoolI ( //
if (((UINT32) Pool->MemoryType >= MEMORY_TYPE_OEM_RESERVED_MIN) && Pool->Used == 0) {
RemoveEntryList (&Pool->Link);
- CoreFreePoolI (Pool);
+ CoreFreePoolI (Pool, NULL);
}
return EFI_SUCCESS;
|