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:
klu2
2008-08-12 03:27:57 +00:00
parent d949491623
commit 1bd90a4c47
2 changed files with 17 additions and 3 deletions

View File

@@ -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);
}