On Jun 28, 2013, at 11:16 AM, Jordan Justen <[email protected]> wrote:

> On Thu, Jun 27, 2013 at 5:56 PM, Zeng, Star <[email protected]> wrote:
>> The purpose is to reduce the burden to merge the header
>> many times when there are many PeiGetVariable() or
>> PeiGetNextVariableName() calls.
> 
> About how many times would it need to be merged? 10? 1000?
> 
> This boot path should only occur in rare circumstances, right?
> 
> Is a HOB the best mechanism that we have for storing a global buffer
> for a PEI driver? I guess I could also see a PCD being used to store
> an allocated buffer pointer. Or, you could install a PPI to the
> allocated buffer. But, all of these (including HOBs) seem to be
> intended for different purposes than your usage model.
> 

Jordan,

The basic problem in early PEI is you are running from FLASH so global 
variables do not work. Most PPIs are registered from a template that is in ROM 
too, so it is hard to play the Protocol game where you hide state behind the 
This pointer with the CR macro. So a GUIDed HOB is a way to emulate a global 
variable in PEI. 

Thanks,

Andrew Fish

> -Jordan
> 
>> -----Original Message-----
>> From: Jordan Justen [mailto:[email protected]]
>> Sent: Friday, June 28, 2013 6:11 AM
>> To: Zeng, Star
>> Cc: [email protected]
>> Subject: Re: [edk2] [PATCH 1/2] MdeModulePkg and SecurityPkg: PEI variable 
>> does not robustly handle crashes during Reclaim().
>> 
>> In MdeModulePkg/Universal/Variable/Pei/Variable.c GetVariableHeader, why do 
>> you need to create the HOB? Could you have a VARIABLE_HEADER structure local 
>> variable (on the stack) in FindVariableEx, and merge the header into that 
>> variable instead?
>> 
>> (Same question for SecurityPkg/VariableAuthenticated/Pei/Variable.c...)
>> 
>> -Jordan
>> 
>> On Mon, Jun 24, 2013 at 4:29 AM, Zeng, Star <[email protected]> wrote:
>>> ==========
>>> 
>>> MdeModulePkg: Variable drivers robustly handle crashes during Reclaim().
>>> 
>>> 
>>> 
>>> PEI variable implementation checks only the variable header signature
>>> for validity. This does not seem robust if system crash occurred
>>> during previous
>>> Reclaim() operation. If the crash occurred while FTW was rewriting the
>>> variable FV, the signature could be valid even though the rest of the
>>> FV isn't valid.
>>> 
>>> Solution: Add a FaultTolerantWritePei driver to check and provide the
>>> FTW last write status, then PEI variable and early phase(before FTW
>>> protocol
>>> ready) of DXE variable can check the status and determine if all or
>>> partial variable data has been backed up in spare block, and then use
>>> the backed up data.
>>> 
>>> 
>>> 
>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>> 
>>> Signed-off-by: Star Zeng <[email protected]>
>>> 
>>> ==========
>>> 
>>> SecurityPkg: Variable drivers robustly handle crashes during Reclaim().
>>> 
>>> 
>>> 
>>> PEI variable implementation checks only the variable header signature
>>> for validity. This does not seem robust if system crash occurred
>>> during previous
>>> Reclaim() operation. If the crash occurred while FTW was rewriting the
>>> variable FV, the signature could be valid even though the rest of the
>>> FV isn't valid.
>>> 
>>> Solution: PEI variable and early phase(before FTW protocol ready) of
>>> DXE variable can check the FTW last write status provided by
>>> FaultTolerantWritePei and determine if all or partial variable data
>>> has been backed up in spare block, and then use the backed up data.
>>> 
>>> 
>>> 
>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>> 
>>> Signed-off-by: Star Zeng <[email protected]>
>>> 
>>> ==========
>>> 
>>> 
>>> 
>>> [Impact]
>>> 
>>> 1. If Platforms use VariablePei.inf now, they need to add
>>> FaultTolerantWritePei.inf into the platform *.dsc and *.inf. Because
>>> PEI variable will be updated to depend on the added FaultTolerantWritePei.
>>> 
>>> 2. The signature of working block header needs to be updated to
>>> gWorkingBlockSignatureGuid because FTW write header and record will be
>>> updated and exposed to support crossing archs. Low impact to platform
>>> because FaultTolerantWrite DXE driver can help correct or add the
>>> working block header at the first boot if platform *.fdf uses the old
>>> signature GUID or no working block header init data.
>>> 
>>> 
>>> 
>>> 
>>> 
>>> Thanks!
>>> 
>>> Star
>>> 
>>> 
>>> ----------------------------------------------------------------------
>>> -------- This SF.net email is sponsored by Windows:
>>> 
>>> Build for Windows Store.
>>> 
>>> http://p.sf.net/sfu/windows-dev2dev
>>> _______________________________________________
>>> edk2-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>>> 
> 
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Windows:
> 
> Build for Windows Store.
> 
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-devel


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to