Thanks for the feedback, I'll rename it back to 
VariableServiceGetNextVariableInternal ()
 and update the comments to refer to FindVariableEx () instead of FindVariable 
() in V3.

Thanks,
Michael

> -----Original Message-----
> From: Wu, Hao A <hao.a...@intel.com>
> Sent: Thursday, October 3, 2019 1:03 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 2/9] MdeModulePkg/Variable: Parameterize
> GetNextVariableEx() store list
> 
> A couple of inline comments below:
> 
> 
> > -----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 2/9] MdeModulePkg/Variable: Parameterize
> > GetNextVariableEx() store list
> >
> > The majority of logic related to GetNextVariableName () is currently
> > implemented in VariableServiceGetNextVariableInternal (). The list of
> > variable stores to search for the given variable name and variable
> > GUID is defined in the function body. This change renames the function
> > to GetNextVariableEx () since the function is no longer internal to a
> > specific source file and adds a new parameter so that the caller must
> > pass in the list of variable stores to be used in the variable search.
> 
> 
> I am not sure if 'GetNextVariableEx' is a good name for the function, since:
> 
> 1. There is no function named GetNextVariable(), so it is not clear what "Ex"
>    means here.
> 
> 2. The origin function VariableServiceGetNextVariableInternal() does get
> used
>    in multiple source files (Variable.c & VariableExLib.c). I am not sure what
>    is the intention for such renaming.
> 
> 
> >
> > 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 | 15
> ++-
> > -
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c        | 12 ++-
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c   |  8 +-
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c | 78
> > ++++++++++++--------
> >  4 files changed, 73 insertions(+), 40 deletions(-)
> >
> > diff --git
> > a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > index 9d77c4916c..0d231511ea 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h
> > @@ -248,27 +248,30 @@ FindVariableEx (
> >    );
> >
> >  /**
> > -  This code Finds the Next available variable.
> > +  This code finds the next available variable.
> >
> >    Caution: This function may receive untrusted input.
> >    This function may be invoked in SMM mode. This function will do
> > basic validation, before parse the data.
> >
> > -  @param[in]  VariableName  Pointer to variable name.
> > -  @param[in]  VendorGuid    Variable Vendor Guid.
> > -  @param[out] VariablePtr   Pointer to variable header address.
> > +  @param[in]  VariableName      Pointer to variable name.
> > +  @param[in]  VendorGuid        Variable Vendor Guid.
> > +  @param[in]  VariableStoreList A list of variable stores that should
> > + be used
> > to get the next variable.
> > +                                The maximum number of entries is the
> > + max value of
> > VARIABLE_STORE_TYPE.
> > +  @param[out] VariablePtr       Pointer to variable header address.
> >
> >    @retval EFI_SUCCESS           The function completed successfully.
> >    @retval EFI_NOT_FOUND         The next variable was not found.
> > -  @retval EFI_INVALID_PARAMETER If VariableName is not an empty
> > string, while VendorGuid is NULL.
> > +  @retval EFI_INVALID_PARAMETER If VariableName is nt an empty
> > + string,
> > while VendorGuid is NULL.
> >    @retval EFI_INVALID_PARAMETER The input values of VariableName and
> > VendorGuid are not a name and
> >                                  GUID of an existing variable.
> >
> >  **/
> >  EFI_STATUS
> >  EFIAPI
> > -VariableServiceGetNextVariableInternal (
> > +GetNextVariableEx (
> >    IN  CHAR16                *VariableName,
> >    IN  EFI_GUID              *VendorGuid,
> > +  IN  VARIABLE_STORE_HEADER **VariableStoreList,
> >    OUT VARIABLE_HEADER       **VariablePtr
> >    );
> >
> > diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > index 76536308e6..816e8f7b8f 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
> > @@ -2358,6 +2358,7 @@ VariableServiceGetNextVariableName (
> >    UINTN                   MaxLen;
> >    UINTN                   VarNameSize;
> >    VARIABLE_HEADER         *VariablePtr;
> > +  VARIABLE_STORE_HEADER
> > *VariableStoreHeader[VariableStoreTypeMax];
> >
> >    if (VariableNameSize == NULL || VariableName == NULL || VendorGuid
> > ==
> > NULL) {
> >      return EFI_INVALID_PARAMETER;
> > @@ -2377,7 +2378,16 @@ VariableServiceGetNextVariableName (
> >
> >    AcquireLockOnlyAtBootTime(&mVariableModuleGlobal-
> > >VariableGlobal.VariableServicesLock);
> >
> > -  Status = VariableServiceGetNextVariableInternal (VariableName,
> > VendorGuid, &VariablePtr);
> > +  //
> > +  // 0: Volatile, 1: HOB, 2: Non-Volatile.
> > +  // The index and attributes mapping must be kept in this order as
> > FindVariable
> > +  // makes use of this mapping to implement search algorithm.
> > +  //
> > +  VariableStoreHeader[VariableStoreTypeVolatile] =
> > (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal-
> > >VariableGlobal.VolatileVariableBase;
> > +  VariableStoreHeader[VariableStoreTypeHob]      =
> > (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal-
> > >VariableGlobal.HobVariableBase;
> > +  VariableStoreHeader[VariableStoreTypeNv]       = mNvVariableCache;
> > +
> > +  Status = GetNextVariableEx (VariableName, VendorGuid,
> > VariableStoreHeader, &VariablePtr);
> >    if (!EFI_ERROR (Status)) {
> >      VarNameSize = NameSizeOfVariable (VariablePtr);
> >      ASSERT (VarNameSize != 0);
> > diff --git
> > a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > index dc78f68fa9..232d9ffe25 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableExLib.c
> > @@ -98,10 +98,16 @@ VariableExLibFindNextVariable (
> >    EFI_STATUS                    Status;
> >    VARIABLE_HEADER               *VariablePtr;
> >    AUTHENTICATED_VARIABLE_HEADER *AuthVariablePtr;
> > +  VARIABLE_STORE_HEADER
> > *VariableStoreHeader[VariableStoreTypeMax];
> >
> > -  Status = VariableServiceGetNextVariableInternal (
> > +  VariableStoreHeader[VariableStoreTypeVolatile] =
> > (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal-
> > >VariableGlobal.VolatileVariableBase;
> > +  VariableStoreHeader[VariableStoreTypeHob]      =
> > (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal-
> > >VariableGlobal.HobVariableBase;
> > +  VariableStoreHeader[VariableStoreTypeNv]       = mNvVariableCache;
> > +
> > +  Status = GetNextVariableEx (
> >               VariableName,
> >               VendorGuid,
> > +             VariableStoreHeader,
> >               &VariablePtr
> >               );
> >    if (EFI_ERROR (Status)) {
> > diff --git
> > a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > index 7de0a90772..9bc5369a90 100644
> > --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c
> > @@ -476,14 +476,16 @@ FindVariableEx (  }
> >
> >  /**
> > -  This code Finds the Next available variable.
> > +  This code finds the next available variable.
> >
> >    Caution: This function may receive untrusted input.
> >    This function may be invoked in SMM mode. This function will do
> > basic validation, before parse the data.
> >
> > -  @param[in]  VariableName  Pointer to variable name.
> > -  @param[in]  VendorGuid    Variable Vendor Guid.
> > -  @param[out] VariablePtr   Pointer to variable header address.
> > +  @param[in]  VariableName      Pointer to variable name.
> > +  @param[in]  VendorGuid        Variable Vendor Guid.
> > +  @param[in]  VariableStoreList A list of variable stores that should
> > + be used
> > to get the next variable.
> > +                                The maximum number of entries is the
> > + max value of
> > VARIABLE_STORE_TYPE.
> > +  @param[out] VariablePtr       Pointer to variable header address.
> >
> >    @retval EFI_SUCCESS           The function completed successfully.
> >    @retval EFI_NOT_FOUND         The next variable was not found.
> > @@ -494,20 +496,41 @@ FindVariableEx (  **/  EFI_STATUS  EFIAPI
> > -VariableServiceGetNextVariableInternal (
> > +GetNextVariableEx (
> >    IN  CHAR16                *VariableName,
> >    IN  EFI_GUID              *VendorGuid,
> > +  IN  VARIABLE_STORE_HEADER **VariableStoreList,
> >    OUT VARIABLE_HEADER       **VariablePtr
> >    )
> >  {
> > -  VARIABLE_STORE_TYPE     Type;
> > +  EFI_STATUS              Status;
> > +  VARIABLE_STORE_TYPE     StoreType;
> >    VARIABLE_POINTER_TRACK  Variable;
> >    VARIABLE_POINTER_TRACK  VariableInHob;
> >    VARIABLE_POINTER_TRACK  VariablePtrTrack;
> > -  EFI_STATUS              Status;
> > -  VARIABLE_STORE_HEADER
> *VariableStoreHeader[VariableStoreTypeMax];
> >
> > -  Status = FindVariable (VariableName, VendorGuid, &Variable,
> > &mVariableModuleGlobal->VariableGlobal, FALSE);
> > +  Status = EFI_NOT_FOUND;
> > +
> > +  if (VariableStoreList == NULL) {
> > +    return EFI_INVALID_PARAMETER;
> > +  }
> > +
> > +  // Check if the variable exists in the given variable store list
> > + for (StoreType = (VARIABLE_STORE_TYPE) 0; StoreType <
> > VariableStoreTypeMax; StoreType++) {
> > +    if (VariableStoreList[StoreType] == NULL) {
> > +      continue;
> > +    }
> > +
> > +    Variable.StartPtr = GetStartPointer (VariableStoreList[StoreType]);
> > +    Variable.EndPtr   = GetEndPointer   (VariableStoreList[StoreType]);
> > +    Variable.Volatile = (BOOLEAN) (StoreType ==
> > + VariableStoreTypeVolatile);
> > +
> > +    Status = FindVariableEx (VariableName, VendorGuid, FALSE, &Variable);
> > +    if (!EFI_ERROR (Status)) {
> > +      break;
> > +    }
> > +  }
> > +
> >    if (Variable.CurrPtr == NULL || EFI_ERROR (Status)) {
> >      //
> >      // For VariableName is an empty string, FindVariable() will try
> > to find and
> 
> 
> Some description comments within this function that mention
> "FindVariable()"
> can be updated. Since the calling of the FindVariable() has been replaced by
> the above 'for' loop.
> 
> 
> Best Regards,
> Hao Wu
> 
> 
> > return
> > @@ -527,39 +550,30 @@ VariableServiceGetNextVariableInternal (
> >
> >    if (VariableName[0] != 0) {
> >      //
> > -    // If variable name is not NULL, get next variable.
> > +    // If variable name is not empty, get next variable.
> >      //
> >      Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);
> >    }
> >
> > -  //
> > -  // 0: Volatile, 1: HOB, 2: Non-Volatile.
> > -  // The index and attributes mapping must be kept in this order as
> > FindVariable
> > -  // makes use of this mapping to implement search algorithm.
> > -  //
> > -  VariableStoreHeader[VariableStoreTypeVolatile] =
> > (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal-
> > >VariableGlobal.VolatileVariableBase;
> > -  VariableStoreHeader[VariableStoreTypeHob]      =
> > (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal-
> > >VariableGlobal.HobVariableBase;
> > -  VariableStoreHeader[VariableStoreTypeNv]       = mNvVariableCache;
> > -
> >    while (TRUE) {
> >      //
> > -    // Switch from Volatile to HOB, to Non-Volatile.
> > +    // Switch to the next variable store if needed
> >      //
> >      while (!IsValidVariableHeader (Variable.CurrPtr, Variable.EndPtr)) {
> >        //
> >        // Find current storage index
> >        //
> > -      for (Type = (VARIABLE_STORE_TYPE) 0; Type < VariableStoreTypeMax;
> > Type++) {
> > -        if ((VariableStoreHeader[Type] != NULL) && (Variable.StartPtr ==
> > GetStartPointer (VariableStoreHeader[Type]))) {
> > +      for (StoreType = (VARIABLE_STORE_TYPE) 0; StoreType <
> > VariableStoreTypeMax; StoreType++) {
> > +        if ((VariableStoreList[StoreType] != NULL) &&
> > + (Variable.StartPtr ==
> > GetStartPointer (VariableStoreList[StoreType]))) {
> >            break;
> >          }
> >        }
> > -      ASSERT (Type < VariableStoreTypeMax);
> > +      ASSERT (StoreType < VariableStoreTypeMax);
> >        //
> >        // Switch to next storage
> >        //
> > -      for (Type++; Type < VariableStoreTypeMax; Type++) {
> > -        if (VariableStoreHeader[Type] != NULL) {
> > +      for (StoreType++; StoreType < VariableStoreTypeMax; StoreType++) {
> > +        if (VariableStoreList[StoreType] != NULL) {
> >            break;
> >          }
> >        }
> > @@ -568,12 +582,12 @@ VariableServiceGetNextVariableInternal (
> >        // 1. current storage is the last one, or
> >        // 2. no further storage
> >        //
> > -      if (Type == VariableStoreTypeMax) {
> > +      if (StoreType == VariableStoreTypeMax) {
> >          Status = EFI_NOT_FOUND;
> >          goto Done;
> >        }
> > -      Variable.StartPtr = GetStartPointer (VariableStoreHeader[Type]);
> > -      Variable.EndPtr   = GetEndPointer   (VariableStoreHeader[Type]);
> > +      Variable.StartPtr = GetStartPointer (VariableStoreList[StoreType]);
> > +      Variable.EndPtr   = GetEndPointer   (VariableStoreList[StoreType]);
> >        Variable.CurrPtr  = Variable.StartPtr;
> >      }
> >
> > @@ -605,11 +619,11 @@ VariableServiceGetNextVariableInternal (
> >          //
> >          // Don't return NV variable when HOB overrides it
> >          //
> > -        if ((VariableStoreHeader[VariableStoreTypeHob] != NULL) &&
> > (VariableStoreHeader[VariableStoreTypeNv] != NULL) &&
> > -            (Variable.StartPtr == GetStartPointer
> > (VariableStoreHeader[VariableStoreTypeNv]))
> > +        if ((VariableStoreList[VariableStoreTypeHob] != NULL) &&
> > (VariableStoreList[VariableStoreTypeNv] != NULL) &&
> > +            (Variable.StartPtr == GetStartPointer
> > (VariableStoreList[VariableStoreTypeNv]))
> >             ) {
> > -          VariableInHob.StartPtr = GetStartPointer
> > (VariableStoreHeader[VariableStoreTypeHob]);
> > -          VariableInHob.EndPtr   = GetEndPointer
> > (VariableStoreHeader[VariableStoreTypeHob]);
> > +          VariableInHob.StartPtr = GetStartPointer
> > (VariableStoreList[VariableStoreTypeHob]);
> > +          VariableInHob.EndPtr   = GetEndPointer
> > (VariableStoreList[VariableStoreTypeHob]);
> >            Status = FindVariableEx (
> >                       GetVariableNamePtr (Variable.CurrPtr),
> >                       GetVendorGuidPtr (Variable.CurrPtr),
> > --
> > 2.16.2.windows.1
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#48445): https://edk2.groups.io/g/devel/message/48445
Mute This Topic: https://groups.io/mt/34318585/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to