mirror of https://github.com/acidanthera/audk.git
MdeModulePkg PiSmmCore: Enhance memory profile for memory leak detection
1. Produce SMM memory profile protocol. 2. Consume PcdMemoryProfilePropertyMask to support disable recording at the start. 3. Consume PcdMemoryProfileDriverPath to control which drivers need memory profile data. Cc: Jiewen Yao <jiewen.yao@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>
This commit is contained in:
parent
c16b7fe71a
commit
e524f68064
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
SMM Memory page management functions.
|
||||
|
||||
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 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
|
||||
|
@ -226,7 +226,14 @@ SmmAllocatePages (
|
|||
|
||||
Status = SmmInternalAllocatePages (Type, MemoryType, NumberOfPages, Memory);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
SmmCoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), MemoryProfileActionAllocatePages, MemoryType, EFI_PAGES_TO_SIZE (NumberOfPages), (VOID *) (UINTN) *Memory);
|
||||
SmmCoreUpdateProfile (
|
||||
(EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0),
|
||||
MemoryProfileActionAllocatePages,
|
||||
MemoryType,
|
||||
EFI_PAGES_TO_SIZE (NumberOfPages),
|
||||
(VOID *) (UINTN) *Memory,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
@ -344,7 +351,14 @@ SmmFreePages (
|
|||
|
||||
Status = SmmInternalFreePages (Memory, NumberOfPages);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
SmmCoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), MemoryProfileActionFreePages, 0, EFI_PAGES_TO_SIZE (NumberOfPages), (VOID *) (UINTN) Memory);
|
||||
SmmCoreUpdateProfile (
|
||||
(EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0),
|
||||
MemoryProfileActionFreePages,
|
||||
EfiMaxMemoryType,
|
||||
EFI_PAGES_TO_SIZE (NumberOfPages),
|
||||
(VOID *) (UINTN) Memory,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
SMM Core Main Entry Point
|
||||
|
||||
Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 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
|
||||
|
@ -632,6 +632,7 @@ SmmMain (
|
|||
}
|
||||
|
||||
RegisterSmramProfileHandler ();
|
||||
SmramProfileInstallProtocol ();
|
||||
|
||||
SmmCoreInstallLoadedImage ();
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
The internal header file includes the common header files, defines
|
||||
internal structure and functions used by SmmCore module.
|
||||
|
||||
Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 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
|
||||
|
@ -42,6 +42,7 @@
|
|||
#include <Library/BaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/PeCoffLib.h>
|
||||
#include <Library/PeCoffGetEntryPointLib.h>
|
||||
#include <Library/CacheMaintenanceLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/ReportStatusCodeLib.h>
|
||||
|
@ -884,17 +885,28 @@ SmramProfileInit (
|
|||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Install SMRAM profile protocol.
|
||||
|
||||
**/
|
||||
VOID
|
||||
SmramProfileInstallProtocol (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Register SMM image to SMRAM profile.
|
||||
|
||||
@param DriverEntry SMM image info.
|
||||
@param RegisterToDxe Register image to DXE.
|
||||
|
||||
@retval TRUE Register success.
|
||||
@retval FALSE Register fail.
|
||||
@return EFI_SUCCESS Register successfully.
|
||||
@return EFI_UNSUPPORTED Memory profile unsupported,
|
||||
or memory profile for the image is not required.
|
||||
@return EFI_OUT_OF_RESOURCES No enough resource for this register.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFI_STATUS
|
||||
RegisterSmramProfileImage (
|
||||
IN EFI_SMM_DRIVER_ENTRY *DriverEntry,
|
||||
IN BOOLEAN RegisterToDxe
|
||||
|
@ -906,11 +918,13 @@ RegisterSmramProfileImage (
|
|||
@param DriverEntry SMM image info.
|
||||
@param UnregisterToDxe Unregister image from DXE.
|
||||
|
||||
@retval TRUE Unregister success.
|
||||
@retval FALSE Unregister fail.
|
||||
@return EFI_SUCCESS Unregister successfully.
|
||||
@return EFI_UNSUPPORTED Memory profile unsupported,
|
||||
or memory profile for the image is not required.
|
||||
@return EFI_NOT_FOUND The image is not found.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFI_STATUS
|
||||
UnregisterSmramProfileImage (
|
||||
IN EFI_SMM_DRIVER_ENTRY *DriverEntry,
|
||||
IN BOOLEAN UnregisterToDxe
|
||||
|
@ -922,20 +936,31 @@ UnregisterSmramProfileImage (
|
|||
@param CallerAddress Address of caller who call Allocate or Free.
|
||||
@param Action This Allocate or Free action.
|
||||
@param MemoryType Memory type.
|
||||
EfiMaxMemoryType means the MemoryType is unknown.
|
||||
@param Size Buffer size.
|
||||
@param Buffer Buffer address.
|
||||
@param ActionString String for memory profile action.
|
||||
Only needed for user defined allocate action.
|
||||
|
||||
@retval TRUE Profile udpate success.
|
||||
@retval FALSE Profile update fail.
|
||||
@return EFI_SUCCESS Memory profile is updated.
|
||||
@return EFI_UNSUPPORTED Memory profile is unsupported,
|
||||
or memory profile for the image is not required,
|
||||
or memory profile for the memory type is not required.
|
||||
@return EFI_ACCESS_DENIED It is during memory profile data getting.
|
||||
@return EFI_ABORTED Memory profile recording is not enabled.
|
||||
@return EFI_OUT_OF_RESOURCES No enough resource to update memory profile for allocate action.
|
||||
@return EFI_NOT_FOUND No matched allocate info found for free action.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SmmCoreUpdateProfile (
|
||||
IN EFI_PHYSICAL_ADDRESS CallerAddress,
|
||||
IN PHYSICAL_ADDRESS CallerAddress,
|
||||
IN MEMORY_PROFILE_ACTION Action,
|
||||
IN EFI_MEMORY_TYPE MemoryType, // Valid for AllocatePages/AllocatePool
|
||||
IN UINTN Size, // Valid for AllocatePages/FreePages/AllocatePool
|
||||
IN VOID *Buffer
|
||||
IN VOID *Buffer,
|
||||
IN CHAR8 *ActionString OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
## @file
|
||||
# This module provide an SMM CIS compliant implementation of SMM Core.
|
||||
#
|
||||
# Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2009 - 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
|
||||
|
@ -48,6 +48,7 @@
|
|||
BaseLib
|
||||
BaseMemoryLib
|
||||
PeCoffLib
|
||||
PeCoffGetEntryPointLib
|
||||
CacheMaintenanceLib
|
||||
DebugLib
|
||||
ReportStatusCodeLib
|
||||
|
@ -81,6 +82,7 @@
|
|||
gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable ## CONSUMES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdMemoryProfileMemoryType ## CONSUMES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdMemoryProfilePropertyMask ## CONSUMES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdMemoryProfileDriverPath ## CONSUMES
|
||||
|
||||
[Guids]
|
||||
gAprioriGuid ## SOMETIMES_CONSUMES ## File
|
||||
|
@ -92,6 +94,8 @@
|
|||
## SOMETIMES_CONSUMES ## GUID # Locate protocol
|
||||
## SOMETIMES_PRODUCES ## GUID # SmiHandlerRegister
|
||||
gEdkiiMemoryProfileGuid
|
||||
## SOMETIMES_PRODUCES ## GUID # Install protocol
|
||||
gEdkiiSmmMemoryProfileGuid
|
||||
gZeroGuid ## SOMETIMES_CONSUMES ## GUID
|
||||
|
||||
[UserExtensions.TianoCore."ExtraFiles"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
SMM Memory pool management functions.
|
||||
|
||||
Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 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
|
||||
|
@ -260,7 +260,14 @@ SmmAllocatePool (
|
|||
|
||||
Status = SmmInternalAllocatePool (PoolType, Size, Buffer);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
SmmCoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), MemoryProfileActionAllocatePool, PoolType, Size, *Buffer);
|
||||
SmmCoreUpdateProfile (
|
||||
(EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0),
|
||||
MemoryProfileActionAllocatePool,
|
||||
PoolType,
|
||||
Size,
|
||||
*Buffer,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
@ -319,7 +326,14 @@ SmmFreePool (
|
|||
|
||||
Status = SmmInternalFreePool (Buffer);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
SmmCoreUpdateProfile ((EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0), MemoryProfileActionFreePool, 0, 0, Buffer);
|
||||
SmmCoreUpdateProfile (
|
||||
(EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0),
|
||||
MemoryProfileActionFreePool,
|
||||
EfiMaxMemoryType,
|
||||
0,
|
||||
Buffer,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue