Your understanding is correct. Thanks, Michael
> -----Original Message----- > From: Wu, Hao A <hao.a...@intel.com> > Sent: Thursday, October 3, 2019 1:04 AM > To: Kubacki, Michael A <michael.a.kuba...@intel.com>; > devel@edk2.groups.io > Cc: Bi, Dandan <dandan...@intel.com>; Ard Biesheuvel > <ard.biesheu...@linaro.org>; Dong, Eric <eric.d...@intel.com>; Laszlo Ersek > <ler...@redhat.com>; Gao, Liming <liming....@intel.com>; Kinney, Michael > D <michael.d.kin...@intel.com>; Ni, Ray <ray...@intel.com>; Wang, Jian J > <jian.j.w...@intel.com>; Yao, Jiewen <jiewen....@intel.com> > Subject: RE: [PATCH V2 3/9] MdeModulePkg/Variable: Parameterize > VARIABLE_INFO_ENTRY buffer > > > -----Original Message----- > > From: Kubacki, Michael A > > Sent: Saturday, September 28, 2019 9:47 AM > > To: devel@edk2.groups.io > > Cc: Bi, Dandan; Ard Biesheuvel; Dong, Eric; Laszlo Ersek; Gao, Liming; > > Kinney, Michael D; Ni, Ray; Wang, Jian J; Wu, Hao A; Yao, Jiewen > > Subject: [PATCH V2 3/9] MdeModulePkg/Variable: Parameterize > > VARIABLE_INFO_ENTRY buffer > > > > UpdateVariableInfo () currently accepts parameters regarding updates > > to be made to a global variable of type VARIABLE_INFO_ENTRY. This > > change passes the structure by pointer to UpdateVariableInfo () so > > structures can be updated outside the fixed global variable. > > > For: > "... so structures can be updated outside the fixed global variable " > > Do you mean: > > VARIABLE_INFO_ENTRY structure pointers other than "&gVariableInfo" can > be passed to UpdateVariableInfo(). > > Is my understanding correct? If so, > Reviewed-by: Hao A Wu <hao.a...@intel.com> > > Best Regards, > Hao Wu > > > > > > Cc: Dandan Bi <dandan...@intel.com> > > Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> > > Cc: Eric Dong <eric.d...@intel.com> > > Cc: Laszlo Ersek <ler...@redhat.com> > > Cc: Liming Gao <liming....@intel.com> > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > > Cc: Ray Ni <ray...@intel.com> > > Cc: Jian J Wang <jian.j.w...@intel.com> > > Cc: Hao A Wu <hao.a...@intel.com> > > Cc: Jiewen Yao <jiewen....@intel.com> > > Signed-off-by: Michael Kubacki <michael.a.kuba...@intel.com> > > --- > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h | 18 > > +++++---- > > MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c | 14 +++--- > - > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c | 41 > > +++++++++++--------- > > 3 files changed, 39 insertions(+), 34 deletions(-) > > > > diff --git > > a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h > > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h > > index 0d231511ea..6f2000f3ee 100644 > > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h > > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h > > @@ -286,13 +286,14 @@ GetNextVariableEx ( > > the transaction. Data is allocated by this routine, but never > > freed. > > > > - @param[in] VariableName Name of the Variable to track. > > - @param[in] VendorGuid Guid of the Variable to track. > > - @param[in] Volatile TRUE if volatile FALSE if non-volatile. > > - @param[in] Read TRUE if GetVariable() was called. > > - @param[in] Write TRUE if SetVariable() was called. > > - @param[in] Delete TRUE if deleted via SetVariable(). > > - @param[in] Cache TRUE for a cache hit. > > + @param[in] VariableName Name of the Variable to track. > > + @param[in] VendorGuid Guid of the Variable to track. > > + @param[in] Volatile TRUE if volatile FALSE if non-volatile. > > + @param[in] Read TRUE if GetVariable() was called. > > + @param[in] Write TRUE if SetVariable() was called. > > + @param[in] Delete TRUE if deleted via SetVariable(). > > + @param[in] Cache TRUE for a cache hit. > > + @param[in,out] VariableInfo Pointer to a pointer of > > VARIABLE_INFO_ENTRY structures. > > > > **/ > > VOID > > @@ -303,7 +304,8 @@ UpdateVariableInfo ( > > IN BOOLEAN Read, > > IN BOOLEAN Write, > > IN BOOLEAN Delete, > > - IN BOOLEAN Cache > > + IN BOOLEAN Cache, > > + IN OUT VARIABLE_INFO_ENTRY **VariableInfo > > ); > > > > #endif > > diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c > > b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c > > index 816e8f7b8f..1a57d7e1ba 100644 > > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c > > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c > > @@ -1641,7 +1641,7 @@ UpdateVariable ( > > // go to delete this variable in variable HOB and > > // try to flush other variables from HOB to flash. > > // > > - UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, > FALSE, > > TRUE, FALSE); > > + UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, > > + FALSE, > > TRUE, FALSE, &gVariableInfo); > > FlushHobVariableToFlash (VariableName, VendorGuid); > > return EFI_SUCCESS; > > } > > @@ -1758,7 +1758,7 @@ UpdateVariable ( > > &State > > ); > > if (!EFI_ERROR (Status)) { > > - UpdateVariableInfo (VariableName, VendorGuid, Variable->Volatile, > > FALSE, FALSE, TRUE, FALSE); > > + UpdateVariableInfo (VariableName, VendorGuid, > > + Variable->Volatile, > > FALSE, FALSE, TRUE, FALSE, &gVariableInfo); > > if (!Variable->Volatile) { > > CacheVariable->CurrPtr->State = State; > > FlushHobVariableToFlash (VariableName, VendorGuid); @@ > > -1777,7 +1777,7 @@ UpdateVariable ( > > // > > // Variable content unchanged and no need to update timestamp, > > just return. > > // > > - UpdateVariableInfo (VariableName, VendorGuid, Variable->Volatile, > > FALSE, TRUE, FALSE, FALSE); > > + UpdateVariableInfo (VariableName, VendorGuid, > > + Variable->Volatile, > > FALSE, TRUE, FALSE, FALSE, &gVariableInfo); > > Status = EFI_SUCCESS; > > goto Done; > > } else if ((CacheVariable->CurrPtr->State == VAR_ADDED) || @@ > > -2006,7 +2006,7 @@ UpdateVariable ( > > CacheVariable->CurrPtr = (VARIABLE_HEADER *)((UINTN) > > CacheVariable->StartPtr + ((UINTN) Variable->CurrPtr - (UINTN) > > CacheVariable->Variable- > > >StartPtr)); > > CacheVariable->InDeletedTransitionPtr = NULL; > > } > > - UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, TRUE, > > FALSE, FALSE); > > + UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, > > + TRUE, > > FALSE, FALSE, &gVariableInfo); > > FlushHobVariableToFlash (VariableName, VendorGuid); > > } else { > > if (IsCommonUserVariable && ((VarSize + > > mVariableModuleGlobal- > > >CommonUserVariableTotalSize) > mVariableModuleGlobal- > > >CommonMaxUserVariableSpace)) { > > @@ -2156,7 +2156,7 @@ UpdateVariable ( > > CacheVariable->CurrPtr = (VARIABLE_HEADER *)((UINTN) > > CacheVariable->StartPtr + ((UINTN) Variable->CurrPtr - (UINTN) > > CacheVariable->Variable- > > >StartPtr)); > > CacheVariable->InDeletedTransitionPtr = NULL; > > } > > - UpdateVariableInfo (VariableName, VendorGuid, TRUE, FALSE, TRUE, > > FALSE, FALSE); > > + UpdateVariableInfo (VariableName, VendorGuid, TRUE, FALSE, > > + TRUE, > > FALSE, FALSE, &gVariableInfo); > > } > > goto Done; > > } > > @@ -2227,7 +2227,7 @@ UpdateVariable ( > > } > > > > if (!EFI_ERROR (Status)) { > > - UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, > > FALSE, FALSE); > > + UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, > > + TRUE, > > FALSE, FALSE, &gVariableInfo); > > if (!Volatile) { > > FlushHobVariableToFlash (VariableName, VendorGuid); > > } > > @@ -2306,7 +2306,7 @@ VariableServiceGetVariable ( > > } > > > > *DataSize = VarDataSize; > > - UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, > TRUE, > > FALSE, FALSE, FALSE); > > + UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, > > + TRUE, > > FALSE, FALSE, FALSE, &gVariableInfo); > > > > Status = EFI_SUCCESS; > > goto Done; > > diff --git > > a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c > > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c > > index 9bc5369a90..394195342d 100644 > > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c > > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c > > @@ -660,13 +660,14 @@ Done: > > the transaction. Data is allocated by this routine, but never > > freed. > > > > - @param[in] VariableName Name of the Variable to track. > > - @param[in] VendorGuid Guid of the Variable to track. > > - @param[in] Volatile TRUE if volatile FALSE if non-volatile. > > - @param[in] Read TRUE if GetVariable() was called. > > - @param[in] Write TRUE if SetVariable() was called. > > - @param[in] Delete TRUE if deleted via SetVariable(). > > - @param[in] Cache TRUE for a cache hit. > > + @param[in] VariableName Name of the Variable to track. > > + @param[in] VendorGuid Guid of the Variable to track. > > + @param[in] Volatile TRUE if volatile FALSE if non-volatile. > > + @param[in] Read TRUE if GetVariable() was called. > > + @param[in] Write TRUE if SetVariable() was called. > > + @param[in] Delete TRUE if deleted via SetVariable(). > > + @param[in] Cache TRUE for a cache hit. > > + @param[in,out] VariableInfo Pointer to a pointer of > > VARIABLE_INFO_ENTRY structures. > > > > **/ > > VOID > > @@ -677,35 +678,38 @@ UpdateVariableInfo ( > > IN BOOLEAN Read, > > IN BOOLEAN Write, > > IN BOOLEAN Delete, > > - IN BOOLEAN Cache > > + IN BOOLEAN Cache, > > + IN OUT VARIABLE_INFO_ENTRY **VariableInfo > > ) > > { > > VARIABLE_INFO_ENTRY *Entry; > > > > if (FeaturePcdGet (PcdVariableCollectStatistics)) { > > - > > + if (VariableName == NULL || VendorGuid == NULL || VariableInfo == > > NULL) { > > + return; > > + } > > if (AtRuntime ()) { > > // Don't collect statistics at runtime. > > return; > > } > > > > - if (gVariableInfo == NULL) { > > + if (*VariableInfo == NULL) { > > // > > // On the first call allocate a entry and place a pointer to it in > > // the EFI System Table. > > // > > - gVariableInfo = AllocateZeroPool (sizeof (VARIABLE_INFO_ENTRY)); > > - ASSERT (gVariableInfo != NULL); > > + *VariableInfo = AllocateZeroPool (sizeof (VARIABLE_INFO_ENTRY)); > > + ASSERT (*VariableInfo != NULL); > > > > - CopyGuid (&gVariableInfo->VendorGuid, VendorGuid); > > - gVariableInfo->Name = AllocateZeroPool (StrSize (VariableName)); > > - ASSERT (gVariableInfo->Name != NULL); > > - StrCpyS (gVariableInfo->Name, StrSize(VariableName)/sizeof(CHAR16), > > VariableName); > > - gVariableInfo->Volatile = Volatile; > > + CopyGuid (&(*VariableInfo)->VendorGuid, VendorGuid); > > + (*VariableInfo)->Name = AllocateZeroPool (StrSize (VariableName)); > > + ASSERT ((*VariableInfo)->Name != NULL); > > + StrCpyS ((*VariableInfo)->Name, > > + StrSize(VariableName)/sizeof(CHAR16), > > VariableName); > > + (*VariableInfo)->Volatile = Volatile; > > } > > > > > > - for (Entry = gVariableInfo; Entry != NULL; Entry = Entry->Next) { > > + for (Entry = (*VariableInfo); Entry != NULL; Entry = Entry->Next) > > + { > > if (CompareGuid (VendorGuid, &Entry->VendorGuid)) { > > if (StrCmp (VariableName, Entry->Name) == 0) { > > if (Read) { > > @@ -739,7 +743,6 @@ UpdateVariableInfo ( > > StrCpyS (Entry->Next->Name, > > StrSize(VariableName)/sizeof(CHAR16), > > VariableName); > > Entry->Next->Volatile = Volatile; > > } > > - > > } > > } > > } > > -- > > 2.16.2.windows.1 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#48446): https://edk2.groups.io/g/devel/message/48446 Mute This Topic: https://groups.io/mt/34318586/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-