From 1bd90a4c479759542f86dbac953855552cbb31fa Mon Sep 17 00:00:00 2001 From: klu2 Date: Tue, 12 Aug 2008 03:27:57 +0000 Subject: 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 --- MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'MdeModulePkg/Core/Pei/Dispatcher') diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c index 1ea443f6ef..3463987149 100644 --- a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c +++ b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c @@ -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); } -- cgit v1.2.3