The following patch for MemoryAttributesTable will need the memory type.
And CoreUpdateProfile() can also use the memory type for check.

Cc: Jiewen Yao <jiewen....@intel.com>
Cc: Liming Gao <liming....@intel.com>
Cc: Feng Tian <feng.t...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.z...@intel.com>
---
 MdeModulePkg/Core/Dxe/DxeMain.h                 | 49 ++-----------------------
 MdeModulePkg/Core/Dxe/Mem/Imem.h                |  4 +-
 MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c |  6 +--
 MdeModulePkg/Core/Dxe/Mem/Page.c                | 13 +++++--
 MdeModulePkg/Core/Dxe/Mem/Pool.c                | 21 ++++++++---
 5 files changed, 34 insertions(+), 59 deletions(-)

diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMain.h
index fefe5bec19d3..edb7ff5b9fa5 100644
--- a/MdeModulePkg/Core/Dxe/DxeMain.h
+++ b/MdeModulePkg/Core/Dxe/DxeMain.h
@@ -1270,33 +1270,6 @@ CoreAllocatePages (
   );
 
 /**
-  Allocates pages from the memory map.
-
-  @param  Type                   The type of allocation to perform
-  @param  MemoryType             The type of memory to turn the allocated pages
-                                 into
-  @param  NumberOfPages          The number of pages to allocate
-  @param  Memory                 A pointer to receive the base allocated memory
-                                 address
-
-  @return Status. On success, Memory is filled in with the base address 
allocated
-  @retval EFI_INVALID_PARAMETER  Parameters violate checking rules defined in
-                                 spec.
-  @retval EFI_NOT_FOUND          Could not allocate pages match the 
requirement.
-  @retval EFI_OUT_OF_RESOURCES   No enough pages to allocate.
-  @retval EFI_SUCCESS            Pages successfully allocated.
-
-**/
-EFI_STATUS
-EFIAPI
-CoreInternalAllocatePages (
-  IN EFI_ALLOCATE_TYPE      Type,
-  IN EFI_MEMORY_TYPE        MemoryType,
-  IN UINTN                  NumberOfPages,
-  IN OUT EFI_PHYSICAL_ADDRESS  *Memory
-  );
-
-/**
   Frees previous allocated pages.
 
   @param  Memory                 Base address of memory being freed
@@ -1315,24 +1288,6 @@ CoreFreePages (
   );
 
 /**
-  Frees previous allocated pages.
-
-  @param  Memory                 Base address of memory being freed
-  @param  NumberOfPages          The number of pages to free
-
-  @retval EFI_NOT_FOUND          Could not find the entry that covers the range
-  @retval EFI_INVALID_PARAMETER  Address not aligned
-  @return EFI_SUCCESS         -Pages successfully freed.
-
-**/
-EFI_STATUS
-EFIAPI
-CoreInternalFreePages (
-  IN EFI_PHYSICAL_ADDRESS   Memory,
-  IN UINTN                  NumberOfPages
-  );
-
-/**
   This function returns a copy of the current memory map. The map is an array 
of
   memory descriptors, each of which describes a contiguous block of memory.
 
@@ -1435,6 +1390,7 @@ CoreFreePool (
   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.
@@ -1443,7 +1399,8 @@ CoreFreePool (
 EFI_STATUS
 EFIAPI
 CoreInternalFreePool (
-  IN VOID        *Buffer
+  IN VOID               *Buffer,
+  OUT EFI_MEMORY_TYPE   *PoolType OPTIONAL
   );
 
 /**
diff --git a/MdeModulePkg/Core/Dxe/Mem/Imem.h b/MdeModulePkg/Core/Dxe/Mem/Imem.h
index 6f4065e3b89b..fb53f95575f0 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Imem.h
+++ b/MdeModulePkg/Core/Dxe/Mem/Imem.h
@@ -112,6 +112,7 @@ CoreAllocatePoolI (
   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.
@@ -119,7 +120,8 @@ CoreAllocatePoolI (
 **/
 EFI_STATUS
 CoreFreePoolI (
-  IN VOID       *Buffer
+  IN VOID               *Buffer,
+  OUT EFI_MEMORY_TYPE   *PoolType OPTIONAL
   );
 
 
diff --git a/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c 
b/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c
index 1f17947808e9..158803746126 100644
--- a/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c
+++ b/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c
@@ -1,7 +1,7 @@
 /** @file
   Support routines for UEFI memory profile.
 
-  Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
@@ -730,7 +730,7 @@ UnregisterMemoryProfileImage (
     //
     // Use CoreInternalFreePool() that will not update profile for this 
FreePool action.
     //
-    CoreInternalFreePool (DriverInfoData);
+    CoreInternalFreePool (DriverInfoData, NULL);
   }
 
   return TRUE;
@@ -1083,7 +1083,7 @@ CoreUpdateProfileFree (
   //
   // Use CoreInternalFreePool() that will not update profile for this FreePool 
action.
   //
-  CoreInternalFreePool (AllocInfoData);
+  CoreInternalFreePool (AllocInfoData, NULL);
 
   return TRUE;
 }
diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c b/MdeModulePkg/Core/Dxe/Mem/Page.c
index 2f4ff8ecfdab..fa71bd87dfdc 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Page.c
+++ b/MdeModulePkg/Core/Dxe/Mem/Page.c
@@ -1345,6 +1345,7 @@ CoreAllocatePages (
 
   @param  Memory                 Base address of memory being freed
   @param  NumberOfPages          The number of pages to free
+  @param  MemoryType             Pointer to memory type
 
   @retval EFI_NOT_FOUND          Could not find the entry that covers the range
   @retval EFI_INVALID_PARAMETER  Address not aligned
@@ -1355,7 +1356,8 @@ EFI_STATUS
 EFIAPI
 CoreInternalFreePages (
   IN EFI_PHYSICAL_ADDRESS   Memory,
-  IN UINTN                  NumberOfPages
+  IN UINTN                  NumberOfPages,
+  OUT EFI_MEMORY_TYPE       *MemoryType OPTIONAL
   )
 {
   EFI_STATUS      Status;
@@ -1403,6 +1405,10 @@ CoreInternalFreePages (
   NumberOfPages += EFI_SIZE_TO_PAGES (Alignment) - 1;
   NumberOfPages &= ~(EFI_SIZE_TO_PAGES (Alignment) - 1);
 
+  if (MemoryType != NULL) {
+    *MemoryType = Entry->Type;
+  }
+
   Status = CoreConvertPages (Memory, NumberOfPages, EfiConventionalMemory);
 
   if (EFI_ERROR (Status)) {
@@ -1432,9 +1438,10 @@ CoreFreePages (
   IN UINTN                 NumberOfPages
   )
 {
-  EFI_STATUS  Status;
+  EFI_STATUS        Status;
+  EFI_MEMORY_TYPE   MemoryType;
 
-  Status = CoreInternalFreePages (Memory, NumberOfPages);
+  Status = CoreInternalFreePages (Memory, NumberOfPages, &MemoryType);
   if (!EFI_ERROR (Status)) {
     CoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), 
MemoryProfileActionFreePages, (EFI_MEMORY_TYPE) 0, EFI_PAGES_TO_SIZE 
(NumberOfPages), (VOID *) (UINTN) Memory);
   }
diff --git a/MdeModulePkg/Core/Dxe/Mem/Pool.c b/MdeModulePkg/Core/Dxe/Mem/Pool.c
index 528c8e8ce9a5..5496a09cfa72 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;
-- 
2.7.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to