Cc: Jiewen Yao <[email protected]>
Cc: Liming Gao <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <[email protected]>
---
MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c | 82 +++++++++++++-----------
1 file changed, 46 insertions(+), 36 deletions(-)
diff --git a/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c
b/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c
index 25deab6..653b894 100644
--- a/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c
+++ b/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c
@@ -730,8 +730,7 @@ UnregisterSmramProfileImage (
/**
Return if this memory type needs to be recorded into memory profile.
- If BIOS memory type (0 ~ EfiMaxMemoryType), it checks bit (1 << MemoryType).
- If OS memory type (0x80000000 ~ 0xFFFFFFFF), it checks bit63 -
0x8000000000000000.
+ Only need to record EfiRuntimeServicesCode and EfiRuntimeServicesData for
SMRAM profile.
@param MemoryType Memory type.
@@ -746,12 +745,13 @@ SmmCoreNeedRecordProfile (
{
UINT64 TestBit;
- if ((UINT32) MemoryType >= 0x80000000) {
- TestBit = BIT63;
- } else {
- TestBit = LShiftU64 (1, MemoryType);
+ if (MemoryType != EfiRuntimeServicesCode &&
+ MemoryType != EfiRuntimeServicesData) {
+ return FALSE;
}
+ TestBit = LShiftU64 (1, MemoryType);
+
if ((PcdGet64 (PcdMemoryProfileMemoryType) & TestBit) != 0) {
return TRUE;
} else {
@@ -761,8 +761,9 @@ SmmCoreNeedRecordProfile (
/**
Convert EFI memory type to profile memory index. The rule is:
- If BIOS memory type (0 ~ EfiMaxMemoryType), ProfileMemoryIndex = MemoryType.
- If OS memory type (0x80000000 ~ 0xFFFFFFFF), ProfileMemoryIndex =
EfiMaxMemoryType.
+ If BIOS memory type (0 ~ EfiMaxMemoryType - 1), ProfileMemoryIndex =
MemoryType.
+ As SMRAM profile is only to record EfiRuntimeServicesCode and
EfiRuntimeServicesData,
+ so return input memory type directly.
@param MemoryType Memory type.
@@ -774,11 +775,7 @@ GetProfileMemoryIndex (
IN EFI_MEMORY_TYPE MemoryType
)
{
- if ((UINT32) MemoryType >= 0x80000000) {
- return EfiMaxMemoryType;
- } else {
- return MemoryType;
- }
+ return MemoryType;
}
/**
@@ -1798,25 +1795,38 @@ GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mActionString[] =
{
L"FreePool",
};
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mMemoryTypeString[] = {
- L"EfiReservedMemoryType",
- L"EfiLoaderCode",
- L"EfiLoaderData",
- L"EfiBootServicesCode",
- L"EfiBootServicesData",
- L"EfiRuntimeServicesCode",
- L"EfiRuntimeServicesData",
- L"EfiConventionalMemory",
- L"EfiUnusableMemory",
- L"EfiACPIReclaimMemory",
- L"EfiACPIMemoryNVS",
- L"EfiMemoryMappedIO",
- L"EfiMemoryMappedIOPortSpace",
- L"EfiPalCode",
- L"EfiPersistentMemory",
- L"EfiOSReserved",
+typedef struct {
+ EFI_MEMORY_TYPE MemoryType;
+ CHAR16 *MemoryTypeStr;
+} PROFILE_MEMORY_TYPE_STRING;
+
+GLOBAL_REMOVE_IF_UNREFERENCED PROFILE_MEMORY_TYPE_STRING mMemoryTypeString[] =
{
+ {EfiRuntimeServicesCode, L"EfiRuntimeServicesCode"},
+ {EfiRuntimeServicesData, L"EfiRuntimeServicesData"}
};
+/**
+ Memory type to string.
+
+ @param[in] MemoryType Memory type.
+
+ @return Pointer to string.
+
+**/
+CHAR16 *
+ProfileMemoryTypeToStr (
+ IN EFI_MEMORY_TYPE MemoryType
+ )
+{
+ UINTN Index;
+ for (Index = 0; Index < sizeof (mMemoryTypeString) / sizeof
(mMemoryTypeString[0]); Index++) {
+ if (mMemoryTypeString[Index].MemoryType == MemoryType) {
+ return mMemoryTypeString[Index].MemoryTypeStr;
+ }
+ }
+
+ return L"UnexpectedMemoryType";
+}
/**
Dump SMRAM profile.
@@ -1856,11 +1866,11 @@ DumpSmramProfile (
DEBUG ((EFI_D_INFO, " CurrentTotalUsage - 0x%016lx\n",
Context->CurrentTotalUsage));
DEBUG ((EFI_D_INFO, " PeakTotalUsage - 0x%016lx\n",
Context->PeakTotalUsage));
- for (TypeIndex = 0; TypeIndex <= EfiMaxMemoryType; TypeIndex++) {
+ for (TypeIndex = 0; TypeIndex < sizeof (Context->CurrentTotalUsageByType) /
sizeof (Context->CurrentTotalUsageByType[0]); TypeIndex++) {
if ((Context->CurrentTotalUsageByType[TypeIndex] != 0) ||
(Context->PeakTotalUsageByType[TypeIndex] != 0)) {
- DEBUG ((EFI_D_INFO, " CurrentTotalUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, Context->CurrentTotalUsageByType[TypeIndex],
mMemoryTypeString[TypeIndex]));
- DEBUG ((EFI_D_INFO, " PeakTotalUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, Context->PeakTotalUsageByType[TypeIndex],
mMemoryTypeString[TypeIndex]));
+ DEBUG ((EFI_D_INFO, " CurrentTotalUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, Context->CurrentTotalUsageByType[TypeIndex], ProfileMemoryTypeToStr
(TypeIndex)));
+ DEBUG ((EFI_D_INFO, " PeakTotalUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, Context->PeakTotalUsageByType[TypeIndex], ProfileMemoryTypeToStr
(TypeIndex)));
}
}
DEBUG ((EFI_D_INFO, " TotalImageSize - 0x%016lx\n",
Context->TotalImageSize));
@@ -1887,11 +1897,11 @@ DumpSmramProfile (
DEBUG ((EFI_D_INFO, " FileType - 0x%02x\n",
DriverInfo->FileType));
DEBUG ((EFI_D_INFO, " CurrentUsage - 0x%016lx\n",
DriverInfo->CurrentUsage));
DEBUG ((EFI_D_INFO, " PeakUsage - 0x%016lx\n",
DriverInfo->PeakUsage));
- for (TypeIndex = 0; TypeIndex <= EfiMaxMemoryType; TypeIndex++) {
+ for (TypeIndex = 0; TypeIndex < sizeof (DriverInfo->CurrentUsageByType) /
sizeof (DriverInfo->CurrentUsageByType[0]); TypeIndex++) {
if ((DriverInfo->CurrentUsageByType[TypeIndex] != 0) ||
(DriverInfo->PeakUsageByType[TypeIndex] != 0)) {
- DEBUG ((EFI_D_INFO, " CurrentUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, DriverInfo->CurrentUsageByType[TypeIndex],
mMemoryTypeString[TypeIndex]));
- DEBUG ((EFI_D_INFO, " PeakUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, DriverInfo->PeakUsageByType[TypeIndex],
mMemoryTypeString[TypeIndex]));
+ DEBUG ((EFI_D_INFO, " CurrentUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, DriverInfo->CurrentUsageByType[TypeIndex], ProfileMemoryTypeToStr
(TypeIndex)));
+ DEBUG ((EFI_D_INFO, " PeakUsage[0x%02x] - 0x%016lx (%s)\n",
TypeIndex, DriverInfo->PeakUsageByType[TypeIndex], ProfileMemoryTypeToStr
(TypeIndex)));
}
}
DEBUG ((EFI_D_INFO, " AllocRecordCount - 0x%08x\n",
DriverInfo->AllocRecordCount));
--
1.9.5.msysgit.0
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel