mirror of https://github.com/acidanthera/audk.git
Add PeimDispatcherReenter to fix bug of PeiDispatch can not be quit correctly.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5628 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
d949491623
commit
1bd90a4c47
|
@ -335,7 +335,16 @@ PeiDispatcher (
|
|||
// satisfied, this dipatcher should run only once.
|
||||
//
|
||||
do {
|
||||
|
||||
//
|
||||
// In case that reenter PeiCore happens, the last pass record is still available.
|
||||
//
|
||||
if (!Private->PeimDispatcherReenter) {
|
||||
Private->PeimNeedingDispatch = FALSE;
|
||||
Private->PeimDispatchOnThisPass = FALSE;
|
||||
} else {
|
||||
Private->PeimDispatcherReenter = FALSE;
|
||||
}
|
||||
|
||||
for (FvCount = Private->CurrentPeimFvCount; FvCount < Private->FvCount; FvCount++) {
|
||||
Private->CurrentPeimFvCount = FvCount;
|
||||
VolumeHandle = Private->Fv[FvCount].FvHeader;
|
||||
|
@ -581,6 +590,11 @@ PeiDispatcher (
|
|||
//
|
||||
PrivateInMem->PeiMemoryInstalled = TRUE;
|
||||
|
||||
//
|
||||
// Indicate that PeiCore reenter
|
||||
//
|
||||
Private->PeimDispatcherReenter = TRUE;
|
||||
|
||||
//
|
||||
// Shadow PEI Core. When permanent memory is avaiable, shadow
|
||||
// PEI Core and PEIMs to get high performance.
|
||||
|
@ -689,8 +703,7 @@ InitializeDispatcherData (
|
|||
)
|
||||
{
|
||||
if (OldCoreData == NULL) {
|
||||
PrivateData->PeimNeedingDispatch = FALSE;
|
||||
PrivateData->PeimDispatchOnThisPass = FALSE;
|
||||
PrivateData->PeimDispatcherReenter = FALSE;
|
||||
PeiInitializeFv (PrivateData, SecCoreData);
|
||||
}
|
||||
|
||||
|
|
|
@ -139,6 +139,7 @@ typedef struct{
|
|||
EFI_PEI_FILE_HANDLE CurrentFileHandle;
|
||||
BOOLEAN PeimNeedingDispatch;
|
||||
BOOLEAN PeimDispatchOnThisPass;
|
||||
BOOLEAN PeimDispatcherReenter;
|
||||
UINTN AllFvCount;
|
||||
EFI_PEI_FV_HANDLE AllFv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];
|
||||
EFI_PEI_HOB_POINTERS HobList;
|
||||
|
|
Loading…
Reference in New Issue