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

Reply via email to