Reviewed-by: Liming Gao <[email protected]>
> -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Zhang, Chao B > Sent: Tuesday, May 17, 2016 3:38 PM > To: [email protected] > Cc: Zhang, Chao B <[email protected]>; Gao, Liming > <[email protected]> > Subject: [edk2] [PATCH] MdeModulePkg: PeiCore: Fix PEI Multiple Sub-FV > Support issue > > FirmwareVolmeInfoPpiNotifyCallback is re-enterable during FV process. > PrivateData->FVCount increases when processing each sub FVs. Need to > cache Parent FV count in stack before processing any sub FV. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Chao Zhang <[email protected]> > --- > MdeModulePkg/Core/Pei/FwVol/FwVol.c | 22 +++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > diff --git a/MdeModulePkg/Core/Pei/FwVol/FwVol.c > b/MdeModulePkg/Core/Pei/FwVol/FwVol.c > index 8f6e2ef..6ca41ee 100644 > --- a/MdeModulePkg/Core/Pei/FwVol/FwVol.c > +++ b/MdeModulePkg/Core/Pei/FwVol/FwVol.c > @@ -2,7 +2,7 @@ > Pei Core Firmware File System service routines. > > Copyright (c) 2015 HP Development Company, L.P. > -Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> > 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 > @@ -545,7 +545,8 @@ FirmwareVolmeInfoPpiNotifyCallback ( > EFI_PEI_FILE_HANDLE FileHandle; > VOID *DepexData; > BOOLEAN IsFvInfo2; > - > + UINTN CurFvCount; > + > Status = EFI_SUCCESS; > PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices); > > @@ -610,10 +611,11 @@ FirmwareVolmeInfoPpiNotifyCallback ( > PrivateData->Fv[PrivateData->FvCount].FvPpi = FvPpi; > PrivateData->Fv[PrivateData->FvCount].FvHandle = FvHandle; > PrivateData->Fv[PrivateData->FvCount].AuthenticationStatus = > FvInfo2Ppi.AuthenticationStatus; > + CurFvCount = PrivateData->FvCount; > DEBUG (( > EFI_D_INFO, > "The %dth FV start address is 0x%11p, size is 0x%08x, handle is > 0x%p\n", > - (UINT32) PrivateData->FvCount, > + (UINT32) CurFvCount, > (VOID *) FvInfo2Ppi.FvInfo, > FvInfo2Ppi.FvInfoSize, > FvHandle > @@ -647,8 +649,8 @@ FirmwareVolmeInfoPpiNotifyCallback ( > } > } > > - DEBUG ((EFI_D_INFO, "Found firmware volume Image File %p in > FV[%d] %p\n", FileHandle, PrivateData->FvCount - 1, FvHandle)); > - ProcessFvFile (PrivateData, &PrivateData->Fv[PrivateData->FvCount - > 1], > FileHandle); > + DEBUG ((EFI_D_INFO, "Found firmware volume Image File %p in > FV[%d] %p\n", FileHandle, CurFvCount, FvHandle)); > + ProcessFvFile (PrivateData, &PrivateData->Fv[CurFvCount], > FileHandle); > } > } while (FileHandle != NULL); > } else { > @@ -2216,7 +2218,8 @@ ThirdPartyFvPpiNotifyCallback ( > UINTN FvIndex; > EFI_PEI_FILE_HANDLE FileHandle; > VOID *DepexData; > - > + UINTN CurFvCount; > + > PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices); > FvPpi = (EFI_PEI_FIRMWARE_VOLUME_PPI*) Ppi; > > @@ -2264,10 +2267,11 @@ ThirdPartyFvPpiNotifyCallback ( > PrivateData->Fv[PrivateData->FvCount].FvPpi = FvPpi; > PrivateData->Fv[PrivateData->FvCount].FvHandle = FvHandle; > PrivateData->Fv[PrivateData->FvCount].AuthenticationStatus = > AuthenticationStatus; > + CurFvCount = PrivateData->FvCount; > DEBUG (( > EFI_D_INFO, > "The %dth FV start address is 0x%11p, size is 0x%08x, handle is > 0x%p\n", > - (UINT32) PrivateData->FvCount, > + (UINT32) CurFvCount, > (VOID *) FvInfo, > FvInfoSize, > FvHandle > @@ -2301,8 +2305,8 @@ ThirdPartyFvPpiNotifyCallback ( > } > } > > - DEBUG ((EFI_D_INFO, "Found firmware volume Image File %p in > FV[%d] %p\n", FileHandle, PrivateData->FvCount - 1, FvHandle)); > - ProcessFvFile (PrivateData, &PrivateData->Fv[PrivateData->FvCount - > 1], > FileHandle); > + DEBUG ((EFI_D_INFO, "Found firmware volume Image File %p in > FV[%d] %p\n", FileHandle, CurFvCount, FvHandle)); > + ProcessFvFile (PrivateData, &PrivateData->Fv[CurFvCount], > FileHandle); > } > } while (FileHandle != NULL); > } while (TRUE); > -- > 1.9.5.msysgit.1 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

