summaryrefslogtreecommitdiffstats
path: root/IntelFrameworkModulePkg
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-30 08:42:03 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-30 08:42:03 +0000
commitf0e90d148c573b013f16401e025ff875a85f3294 (patch)
tree14c58ec04811c0c3ac708e6c97c574c5a4ca1ca8 /IntelFrameworkModulePkg
parent11c62012114d0da49bc6a9f6b087f3409320a633 (diff)
downloadedk2-f0e90d148c573b013f16401e025ff875a85f3294.tar.gz
edk2-f0e90d148c573b013f16401e025ff875a85f3294.tar.bz2
edk2-f0e90d148c573b013f16401e025ff875a85f3294.zip
Sync patch r9053, r9072 from main trunk.
r9053 - 1. Do not use EfiACPIReclaimMemory type to log performance data because some OS might reuse that memory. Maybe EfiReservedMemoryType is the best solution for that usage model. r9072 - 1. Log performance data below 4G. 2. Reuse the allocated data region if it's already allocated. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/UDK2008@10726 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'IntelFrameworkModulePkg')
-rw-r--r--IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c54
1 files changed, 29 insertions, 25 deletions
diff --git a/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c b/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c
index 6fbb12b7c3..119a6e46d2 100644
--- a/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c
+++ b/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c
@@ -3,7 +3,7 @@
performance, all the function will only include if the performance
switch is set.
-Copyright (c) 2004 - 2008, Intel Corporation. <BR>
+Copyright (c) 2004 - 2009, Intel Corporation. <BR>
All rights reserved. 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
@@ -18,6 +18,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
PERF_HEADER mPerfHeader;
PERF_DATA mPerfData;
+EFI_PHYSICAL_ADDRESS mAcpiLowMemoryBase = 0x0FFFFFFFFULL;
/**
Get the short verion of PDB file name to be
@@ -144,7 +145,6 @@ WriteBootToOsPerformanceData (
)
{
EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS AcpiLowMemoryBase;
UINT32 AcpiLowMemoryLength;
UINT32 LimitCount;
EFI_HANDLE *Handles;
@@ -187,25 +187,6 @@ WriteBootToOsPerformanceData (
CountUp = FALSE;
}
- AcpiLowMemoryLength = 0x2000;
-
- //
- // Allocate a block of memory that contain performance data to OS
- //
- Status = gBS->AllocatePages (
- AllocateAnyPages,
- EfiACPIReclaimMemory,
- EFI_SIZE_TO_PAGES (AcpiLowMemoryLength),
- &AcpiLowMemoryBase
- );
- if (EFI_ERROR (Status)) {
- return ;
- }
-
-
- Ptr = (UINT8 *) ((UINT32) AcpiLowMemoryBase + sizeof (PERF_HEADER));
- LimitCount = (AcpiLowMemoryLength - sizeof (PERF_HEADER)) / sizeof (PERF_DATA);
-
//
// Put Detailed performance data into memory
//
@@ -218,9 +199,32 @@ WriteBootToOsPerformanceData (
&Handles
);
if (EFI_ERROR (Status)) {
- gBS->FreePages (AcpiLowMemoryBase, 1);
return ;
}
+
+
+ AcpiLowMemoryLength = 0x4000;
+ if (mAcpiLowMemoryBase == 0x0FFFFFFFF) {
+ //
+ // Allocate a block of memory that contain performance data to OS
+ //
+ Status = gBS->AllocatePages (
+ AllocateMaxAddress,
+ EfiReservedMemoryType,
+ EFI_SIZE_TO_PAGES (AcpiLowMemoryLength),
+ &mAcpiLowMemoryBase
+ );
+ if (EFI_ERROR (Status)) {
+ FreePool (Handles);
+ return ;
+ }
+ }
+
+
+ Ptr = (UINT8 *) ((UINT32) mAcpiLowMemoryBase + sizeof (PERF_HEADER));
+ LimitCount = (AcpiLowMemoryLength - sizeof (PERF_HEADER)) / sizeof (PERF_DATA);
+
+
//
// Get DXE drivers performance
@@ -296,10 +300,10 @@ Done:
mPerfHeader.Signiture = PERFORMANCE_SIGNATURE;
//
- // Put performance data to ACPI memory
+ // Put performance data to Reserved memory
//
CopyMem (
- (UINTN *) (UINTN) AcpiLowMemoryBase,
+ (UINTN *) (UINTN) mAcpiLowMemoryBase,
&mPerfHeader,
sizeof (PERF_HEADER)
);
@@ -309,7 +313,7 @@ Done:
&gPerformanceProtocolGuid,
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof (EFI_PHYSICAL_ADDRESS),
- &AcpiLowMemoryBase
+ &mAcpiLowMemoryBase
);
return ;