Reviewed-by: jiewen....@intel.com
> -----Original Message----- > From: Zeng, Star > Sent: Friday, April 22, 2016 2:37 PM > To: edk2-devel@lists.01.org > Cc: Yao, Jiewen <jiewen....@intel.com>; Tian, Feng <feng.t...@intel.com> > Subject: [PATCH] MdeModulePkg DxeCore: Check free memory type by > CoreUpdateProfile() > > 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