mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 15:44:04 +02:00
The calculating action for CAR usage should be put before calling temporary ram support PPI, because the CAR is unvaiable after switch stack from temporary memory to permenent memory.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4795 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
ff33b87dd8
commit
a7715e7327
@ -23,6 +23,8 @@ Revision History
|
|||||||
|
|
||||||
#include <PeiMain.h>
|
#include <PeiMain.h>
|
||||||
|
|
||||||
|
#define INIT_CAR_VALUE 0x5AA55AA5
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
EFI_STATUS_CODE_DATA DataHeader;
|
EFI_STATUS_CODE_DATA DataHeader;
|
||||||
EFI_HANDLE Handle;
|
EFI_HANDLE Handle;
|
||||||
@ -437,6 +439,27 @@ Returns:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Private->SwitchStackSignal) {
|
if (Private->SwitchStackSignal) {
|
||||||
|
//
|
||||||
|
// Before switch stack from CAR to permenent memory, caculate the heap and stack
|
||||||
|
// usage in temporary memory for debuging.
|
||||||
|
//
|
||||||
|
DEBUG_CODE_BEGIN ();
|
||||||
|
UINTN *StackPointer;
|
||||||
|
|
||||||
|
for (StackPointer = (UINTN*)SecCoreData->StackBase;
|
||||||
|
(StackPointer < (UINTN*)((UINTN)SecCoreData->StackBase + SecCoreData->StackSize)) \
|
||||||
|
&& (*StackPointer == INIT_CAR_VALUE);
|
||||||
|
StackPointer ++);
|
||||||
|
|
||||||
|
DEBUG ((EFI_D_INFO, "Total Cache as RAM: %d bytes.\n", SecCoreData->TemporaryRamSize));
|
||||||
|
DEBUG ((EFI_D_INFO, " CAR stack ever used: %d bytes.\n",
|
||||||
|
(SecCoreData->StackSize - ((UINTN) StackPointer - (UINTN)SecCoreData->StackBase))
|
||||||
|
));
|
||||||
|
DEBUG ((EFI_D_INFO, " CAR heap used: %d bytes.\n",
|
||||||
|
((UINTN) Private->HobList.HandoffInformationTable->EfiFreeMemoryBottom -
|
||||||
|
(UINTN) Private->HobList.Raw)
|
||||||
|
));
|
||||||
|
DEBUG_CODE_END ();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reserve the size of new stack at bottom of physical memory
|
// Reserve the size of new stack at bottom of physical memory
|
||||||
|
@ -181,34 +181,6 @@ Returns:
|
|||||||
PERF_END (NULL,"PreMem", NULL, 0);
|
PERF_END (NULL,"PreMem", NULL, 0);
|
||||||
PERF_START (NULL,"PostMem", NULL, 0);
|
PERF_START (NULL,"PostMem", NULL, 0);
|
||||||
|
|
||||||
//
|
|
||||||
// The following code dumps out interesting cache as RAM usage information
|
|
||||||
// so we can keep tabs on how the cache as RAM is being utilized. The
|
|
||||||
// DEBUG_CODE_BEGIN macro is used to prevent this code from being compiled
|
|
||||||
// on a debug build.
|
|
||||||
//
|
|
||||||
DEBUG_CODE_BEGIN ();
|
|
||||||
UINTN *StackPointer;
|
|
||||||
UINTN StackValue;
|
|
||||||
|
|
||||||
StackValue = INIT_CAR_VALUE;
|
|
||||||
for (StackPointer = (UINTN *) OldCoreData->MaxTopOfCarHeap;
|
|
||||||
((UINTN) StackPointer < ((UINTN) OldCoreData->BottomOfCarHeap + OldCoreData->SizeOfCacheAsRam))
|
|
||||||
&& StackValue == INIT_CAR_VALUE;
|
|
||||||
StackPointer++) {
|
|
||||||
StackValue = *StackPointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
DEBUG ((EFI_D_INFO, "Total Cache as RAM: %d bytes.\n", OldCoreData->SizeOfCacheAsRam));
|
|
||||||
DEBUG ((EFI_D_INFO, " CAR stack ever used: %d bytes.\n",
|
|
||||||
((UINTN) OldCoreData->TopOfCarHeap - (UINTN) StackPointer)
|
|
||||||
));
|
|
||||||
DEBUG ((EFI_D_INFO, " CAR heap used: %d bytes.\n",
|
|
||||||
((UINTN) OldCoreData->HobList.HandoffInformationTable->EfiFreeMemoryBottom -
|
|
||||||
(UINTN) OldCoreData->HobList.Raw)
|
|
||||||
));
|
|
||||||
DEBUG_CODE_END ();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Alert any listeners that there is permanent memory available
|
// Alert any listeners that there is permanent memory available
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user