It can improve profile performance, especially when
PcdMemoryProfileMemoryType configured without EfiBootServicesData.
CoreUpdateProfile() can return quickly, but not depend on the further
code to find the buffer not recorded and then return.

Cc: Jiewen Yao <jiewen....@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                 |  2 +-
 MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c | 13 ++++---------
 MdeModulePkg/Core/Dxe/Mem/Page.c                |  2 +-
 MdeModulePkg/Core/Dxe/Mem/Pool.c                |  2 +-
 4 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMain.h
index 82a3a9b4f2b7..e6b9114d2ee5 100644
--- a/MdeModulePkg/Core/Dxe/DxeMain.h
+++ b/MdeModulePkg/Core/Dxe/DxeMain.h
@@ -2821,7 +2821,7 @@ BOOLEAN
 CoreUpdateProfile (
   IN EFI_PHYSICAL_ADDRESS   CallerAddress,
   IN MEMORY_PROFILE_ACTION  Action,
-  IN EFI_MEMORY_TYPE        MemoryType, // Valid for AllocatePages/AllocatePool
+  IN EFI_MEMORY_TYPE        MemoryType,
   IN UINTN                  Size,       // Valid for 
AllocatePages/FreePages/AllocatePool
   IN VOID                   *Buffer
   );
diff --git a/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c 
b/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c
index 158803746126..6626e101592e 100644
--- a/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c
+++ b/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c
@@ -1105,7 +1105,7 @@ BOOLEAN
 CoreUpdateProfile (
   IN PHYSICAL_ADDRESS       CallerAddress,
   IN MEMORY_PROFILE_ACTION  Action,
-  IN EFI_MEMORY_TYPE        MemoryType, // Valid for AllocatePages/AllocatePool
+  IN EFI_MEMORY_TYPE        MemoryType,
   IN UINTN                  Size,       // Valid for 
AllocatePages/FreePages/AllocatePool
   IN VOID                   *Buffer
   )
@@ -1121,15 +1121,10 @@ CoreUpdateProfile (
   }
 
   //
-  // Free operations have no memory type information, so skip the check.
+  // Only record limited MemoryType.
   //
-  if ((Action == MemoryProfileActionAllocatePages) || (Action == 
MemoryProfileActionAllocatePool)) {
-    //
-    // Only record limited MemoryType.
-    //
-    if (!CoreNeedRecordProfile (MemoryType)) {
-      return FALSE;
-    }
+  if (!CoreNeedRecordProfile (MemoryType)) {
+    return FALSE;
   }
 
   ContextData = GetMemoryProfileContext ();
diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c b/MdeModulePkg/Core/Dxe/Mem/Page.c
index dbdc71b59ca5..898b722a4319 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Page.c
+++ b/MdeModulePkg/Core/Dxe/Mem/Page.c
@@ -1444,7 +1444,7 @@ CoreFreePages (
 
   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);
+    CoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), 
MemoryProfileActionFreePages, MemoryType, EFI_PAGES_TO_SIZE (NumberOfPages), 
(VOID *) (UINTN) Memory);
     InstallMemoryAttributesTableOnMemoryAllocation (MemoryType);
   }
   return Status;
diff --git a/MdeModulePkg/Core/Dxe/Mem/Pool.c b/MdeModulePkg/Core/Dxe/Mem/Pool.c
index 5eced88efb75..fec20a9e6eee 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Pool.c
+++ b/MdeModulePkg/Core/Dxe/Mem/Pool.c
@@ -505,7 +505,7 @@ CoreFreePool (
 
   Status = CoreInternalFreePool (Buffer, &PoolType);
   if (!EFI_ERROR (Status)) {
-    CoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), 
MemoryProfileActionFreePool, (EFI_MEMORY_TYPE) 0, 0, Buffer);
+    CoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), 
MemoryProfileActionFreePool, PoolType, 0, Buffer);
     InstallMemoryAttributesTableOnMemoryAllocation (PoolType);
   }
   return Status;
-- 
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