public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [edk2-redfish-client][PATCH 1/6] RedfishClientPkg/RedfishETagDxe: fix issue and enhancement.
@ 2023-11-23 14:33 Nickle Wang via groups.io
  2023-11-28  3:13 ` Chang, Abner via groups.io
  0 siblings, 1 reply; 2+ messages in thread
From: Nickle Wang via groups.io @ 2023-11-23 14:33 UTC (permalink / raw)
  To: devel; +Cc: Abner Chang, Igor Kulchytskyy, Nick Ramirez

-Fix typo (replace Listheader to ListHeader).
-Replace "%a," to "%a:".
-Add more debug message.
-Remove the exit-boot-service event and use after-provisioning
event to save ETag data. Variable may not be writable during
exit-boot-service callback.

Signed-off-by: Nickle Wang <nicklew@nvidia.com>
Cc: Abner Chang <abner.chang@amd.com>
Cc: Igor Kulchytskyy <igork@ami.com>
Cc: Nick Ramirez <nramirez@nvidia.com>
---
 .../RedfishETagDxe/RedfishETagDxe.inf         |  5 +-
 .../RedfishETagDxe/RedfishETagDxe.h           |  4 +-
 .../RedfishETagDxe/RedfishETagDxe.c           | 84 ++++++++++---------
 3 files changed, 50 insertions(+), 43 deletions(-)

diff --git a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
index 4aecdb41..3626f775 100644
--- a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
+++ b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
@@ -1,7 +1,7 @@
 ## @file
 #
 #  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-#  Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+#  Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
 #
 #  SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -35,6 +35,7 @@
   UefiBootServicesTableLib
   UefiRuntimeServicesTableLib
   UefiDriverEntryPoint
+  RedfishEventLib
 
 [Protocols]
   gEdkIIRedfishETagProtocolGuid           ## PRODUCED ##
@@ -44,4 +45,4 @@
   gEfiRedfishClientVariableGuid           ## CONSUMED ##
 
 [Depex]
-  TRUE
+  gEfiVariableArchProtocolGuid
diff --git a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h
index 3542f289..c8302830 100644
--- a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h
+++ b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h
@@ -2,6 +2,7 @@
   Common header file for RedfishETagDxe driver.
 
   (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
+  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
 
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -25,6 +26,7 @@
 #include <Library/UefiDriverEntryPoint.h>
 #include <Library/UefiLib.h>
 #include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/RedfishEventLib.h>
 
 #include <Protocol/EdkIIRedfishETagProtocol.h>
 
@@ -49,7 +51,7 @@ typedef struct {
 // Definition of REDFISH_ETAG_LIST
 //
 typedef struct {
-  LIST_ENTRY    Listheader;
+  LIST_ENTRY    ListHeader;
   UINTN         TotalSize;
   UINTN         Count;
 } REDFISH_ETAG_LIST;
diff --git a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c
index f731d39d..f303604a 100644
--- a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c
+++ b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c
@@ -124,7 +124,7 @@ AddETagRecord (
     return EFI_OUT_OF_RESOURCES;
   }
 
-  InsertTailList (&List->Listheader, &NewRecord->List);
+  InsertTailList (&List->ListHeader, &NewRecord->List);
   ++List->Count;
   List->TotalSize += NewRecord->Size;
 
@@ -225,20 +225,20 @@ DumpETagList (
     DEBUG ((DEBUG_ERROR, "%s\n", Msg));
   }
 
-  if (IsListEmpty (&ETagList->Listheader)) {
+  if (IsListEmpty (&ETagList->ListHeader)) {
     DEBUG ((DEBUG_MANAGEABILITY, "ETag list is empty\n"));
     return EFI_NOT_FOUND;
   }
 
   DEBUG ((DEBUG_MANAGEABILITY, "Count: %d Total Size: %d\n", ETagList->Count, ETagList->TotalSize));
   Record = NULL;
-  List   = GetFirstNode (&ETagList->Listheader);
-  while (!IsNull (&ETagList->Listheader, List)) {
+  List   = GetFirstNode (&ETagList->ListHeader);
+  while (!IsNull (&ETagList->ListHeader, List)) {
     Record = REDFISH_ETAG_RECORD_FROM_LIST (List);
 
     DEBUG ((DEBUG_MANAGEABILITY, "ETag: %a Uri: %a Size: %d\n", Record->ETag, Record->Uri, Record->Size));
 
-    List = GetNextNode (&ETagList->Listheader, List);
+    List = GetNextNode (&ETagList->ListHeader, List);
   }
 
   return EFI_SUCCESS;
@@ -304,16 +304,16 @@ ReleaseETagList (
     return EFI_INVALID_PARAMETER;
   }
 
-  if (IsListEmpty (&ETagList->Listheader)) {
+  if (IsListEmpty (&ETagList->ListHeader)) {
     return EFI_SUCCESS;
   }
 
   Record = NULL;
   Next   = NULL;
-  List   = GetFirstNode (&ETagList->Listheader);
-  while (!IsNull (&ETagList->Listheader, List)) {
+  List   = GetFirstNode (&ETagList->ListHeader);
+  while (!IsNull (&ETagList->ListHeader, List)) {
     Record = REDFISH_ETAG_RECORD_FROM_LIST (List);
-    Next   = GetNextNode (&ETagList->Listheader, List);
+    Next   = GetNextNode (&ETagList->ListHeader, List);
 
     DeleteETagRecord (ETagList, Record);
 
@@ -352,14 +352,14 @@ SaveETagList (
     return EFI_INVALID_PARAMETER;
   }
 
-  if (IsListEmpty (&ETagList->Listheader)) {
+  if (IsListEmpty (&ETagList->ListHeader)) {
     return EFI_SUCCESS;
   }
 
   //
   // Calculate the total size we need to keep ETag list.
   //
-  VarSize = ETagList->TotalSize + 1; // terminator character
+  VarSize = ETagList->TotalSize + sizeof (CHAR8); // terminator character
   VarData = AllocateZeroPool (VarSize);
   if (VarData == NULL) {
     return EFI_OUT_OF_RESOURCES;
@@ -367,8 +367,8 @@ SaveETagList (
 
   Seeker = VarData;
   Record = NULL;
-  List   = GetFirstNode (&ETagList->Listheader);
-  while (!IsNull (&ETagList->Listheader, List)) {
+  List   = GetFirstNode (&ETagList->ListHeader);
+  while (!IsNull (&ETagList->ListHeader, List)) {
     Record = REDFISH_ETAG_RECORD_FROM_LIST (List);
 
     StrSize = AsciiStrSize (Record->Uri);
@@ -386,7 +386,7 @@ SaveETagList (
 
     ++Seeker;
 
-    List = GetNextNode (&ETagList->Listheader, List);
+    List = GetNextNode (&ETagList->ListHeader, List);
   }
 
   *Seeker = '\0';
@@ -468,7 +468,7 @@ InitialETagList (
     //
     Seeker = AsciiStrStr (UriPointer, "|");
     if (Seeker == NULL) {
-      DEBUG ((DEBUG_ERROR, "%a, data corrupted\n", __func__));
+      DEBUG ((DEBUG_ERROR, "%a: data corrupted\n", __func__));
       Status = EFI_DEVICE_ERROR;
       goto ON_ERROR;
     }
@@ -481,7 +481,7 @@ InitialETagList (
     //
     Seeker = AsciiStrStr (ETagPointer, "\n");
     if (Seeker == NULL) {
-      DEBUG ((DEBUG_ERROR, "%a, data corrupted\n", __func__));
+      DEBUG ((DEBUG_ERROR, "%a: data corrupted\n", __func__));
       Status = EFI_DEVICE_ERROR;
       goto ON_ERROR;
     }
@@ -532,11 +532,13 @@ RedfishETagGet (
     return EFI_INVALID_PARAMETER;
   }
 
+  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a\n", __func__, Uri));
+
   Private = REDFISH_ETAG_PRIVATE_FROM_THIS (This);
 
   *ETag = NULL;
 
-  Target = FindETagRecord (&Private->ETagList.Listheader, Uri);
+  Target = FindETagRecord (&Private->ETagList.ListHeader, Uri);
   if (Target == NULL) {
     return EFI_NOT_FOUND;
   }
@@ -551,7 +553,8 @@ RedfishETagGet (
 
   @param[in]   This                Pointer to EDKII_REDFISH_ETAG_PROTOCOL instance.
   @param[in]   Uri                 The target Uri which related to ETag.
-  @param[in]   ETag                The ETag to add. If ETag is NULL, the record of corresponding URI will be removed.
+  @param[in]   ETag                The ETag to add. If ETag is NULL, the record of
+                                   corresponding URI will be removed.
 
   @retval EFI_SUCCESS              This handler has been stoped successfully.
   @retval Others                   Some error happened.
@@ -573,10 +576,12 @@ RedfishETagSet (
     return EFI_INVALID_PARAMETER;
   }
 
+  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a -> %a\n", __func__, Uri, (ETag == NULL ? "NULL" : ETag)));
+
   Private = REDFISH_ETAG_PRIVATE_FROM_THIS (This);
 
   Status = EFI_NOT_FOUND;
-  Target = FindETagRecord (&Private->ETagList.Listheader, Uri);
+  Target = FindETagRecord (&Private->ETagList.ListHeader, Uri);
   if (Target != NULL) {
     //
     // Remove old one and create new one.
@@ -620,14 +625,16 @@ RedfishETagFlush (
 
   Status = SaveETagList (&Private->ETagList, Private->VariableName);
   if (EFI_ERROR (Status)) {
-    DEBUG ((DEBUG_ERROR, "%a, save ETag list to variable: %s failed: %r\n", __func__, Private->VariableName, Status));
+    DEBUG ((DEBUG_ERROR, "%a: save ETag list to variable: %s failed: %r\n", __func__, Private->VariableName, Status));
   }
 
+  DEBUG ((DEBUG_MANAGEABILITY, "%a: save ETag list to variable: %s\n", __func__, Private->VariableName));
+
   return Status;
 }
 
 /**
-  Callback function executed when the ExitBootService event group is signaled.
+  Callback function executed when the AfterProvisioning event group is signaled.
 
   @param[in]   Event    Event whose notification function is being invoked.
   @param[out]  Context  Pointer to the Context buffer
@@ -635,13 +642,13 @@ RedfishETagFlush (
 **/
 VOID
 EFIAPI
-RedfishETagOnExitBootService (
+RedfishETagOnRedfishAfterProvisioning (
   IN  EFI_EVENT  Event,
   OUT VOID       *Context
   )
 {
   //
-  // Memory is about to be released. Keep list into variable.
+  // Redfish provisioning is finished. Keep ETag into variable.
   //
   RedfishETagFlush (&mRedfishETagPrivate->Protocol);
 }
@@ -670,7 +677,7 @@ RedfishETagDriverUnload (
                     (VOID *)&mRedfishETagPrivate->Protocol
                     );
     if (EFI_ERROR (Status)) {
-      DEBUG ((DEBUG_ERROR, "%a, can not uninstall gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
+      DEBUG ((DEBUG_ERROR, "%a: can not uninstall gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
       ASSERT (FALSE);
     }
 
@@ -725,7 +732,7 @@ RedfishETagDriverEntryPoint (
     return EFI_OUT_OF_RESOURCES;
   }
 
-  InitializeListHead (&mRedfishETagPrivate->ETagList.Listheader);
+  InitializeListHead (&mRedfishETagPrivate->ETagList.ListHeader);
   mRedfishETagPrivate->VariableName = AllocateCopyPool (StrSize (ETAG_VARIABLE_NAME), ETAG_VARIABLE_NAME);
   if (mRedfishETagPrivate->VariableName == NULL) {
     Status = EFI_OUT_OF_RESOURCES;
@@ -742,33 +749,30 @@ RedfishETagDriverEntryPoint (
                   (VOID *)&mRedfishETagPrivate->Protocol
                   );
   if (EFI_ERROR (Status)) {
-    DEBUG ((DEBUG_ERROR, "%a, can not install gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
+    DEBUG ((DEBUG_ERROR, "%a: can not install gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
     ASSERT (FALSE);
     goto ON_ERROR;
   }
 
   //
-  // Create Exit Boot Service event.
+  // Read existing record from variable.
   //
-  Status = gBS->CreateEventEx (
-                  EVT_NOTIFY_SIGNAL,
-                  TPL_CALLBACK,
-                  RedfishETagOnExitBootService,
-                  NULL,
-                  &gEfiEventExitBootServicesGuid,
-                  &mRedfishETagPrivate->Event
-                  );
+  DEBUG ((DEBUG_MANAGEABILITY, "%a: Initial ETag List from variable: %s\n", __func__, mRedfishETagPrivate->VariableName));
+  Status = InitialETagList (&mRedfishETagPrivate->ETagList, mRedfishETagPrivate->VariableName);
   if (EFI_ERROR (Status)) {
-    DEBUG ((DEBUG_ERROR, "%a: Fail to register Exit Boot Service event.", __func__));
-    goto ON_ERROR;
+    DEBUG ((DEBUG_MANAGEABILITY, "%a: Initial ETag List: %r\n", __func__, Status));
   }
 
   //
-  // Read existing record from variable.
+  // Register after provisioning event
   //
-  Status = InitialETagList (&mRedfishETagPrivate->ETagList, mRedfishETagPrivate->VariableName);
+  Status = CreateAfterProvisioningEvent (
+             RedfishETagOnRedfishAfterProvisioning,
+             NULL,
+             &mRedfishETagPrivate->Event
+             );
   if (EFI_ERROR (Status)) {
-    DEBUG ((DEBUG_MANAGEABILITY, "%a, Initial ETag List: %r\n", __func__, Status));
+    DEBUG ((DEBUG_ERROR, "%a: failed to register after-provisioning event: %r\n", __func__, Status));
   }
 
   return EFI_SUCCESS;
-- 
2.17.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111671): https://edk2.groups.io/g/devel/message/111671
Mute This Topic: https://groups.io/mt/102767541/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [edk2-devel] [edk2-redfish-client][PATCH 1/6] RedfishClientPkg/RedfishETagDxe: fix issue and enhancement.
  2023-11-23 14:33 [edk2-devel] [edk2-redfish-client][PATCH 1/6] RedfishClientPkg/RedfishETagDxe: fix issue and enhancement Nickle Wang via groups.io
@ 2023-11-28  3:13 ` Chang, Abner via groups.io
  0 siblings, 0 replies; 2+ messages in thread
From: Chang, Abner via groups.io @ 2023-11-28  3:13 UTC (permalink / raw)
  To: Nickle Wang, devel@edk2.groups.io; +Cc: Igor Kulchytskyy, Nick Ramirez

[AMD Official Use Only - General]

Hi Nickle,
The code change generally looks fine. However, we can improve the debug code enablement in the source file. I had created a BZ ticket (Bug #4606 ) for this enhancement and assigned it to myself.

For this change,
Reviewed-by: Abner Chang <abner.chang@amd.com>

> -----Original Message-----
> From: Nickle Wang <nicklew@nvidia.com>
> Sent: Thursday, November 23, 2023 10:34 PM
> To: devel@edk2.groups.io
> Cc: Chang, Abner <Abner.Chang@amd.com>; Igor Kulchytskyy
> <igork@ami.com>; Nick Ramirez <nramirez@nvidia.com>
> Subject: [edk2-redfish-client][PATCH 1/6] RedfishClientPkg/RedfishETagDxe:
> fix issue and enhancement.
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> -Fix typo (replace Listheader to ListHeader).
> -Replace "%a," to "%a:".
> -Add more debug message.
> -Remove the exit-boot-service event and use after-provisioning
> event to save ETag data. Variable may not be writable during
> exit-boot-service callback.
>
> Signed-off-by: Nickle Wang <nicklew@nvidia.com>
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Igor Kulchytskyy <igork@ami.com>
> Cc: Nick Ramirez <nramirez@nvidia.com>
> ---
>  .../RedfishETagDxe/RedfishETagDxe.inf         |  5 +-
>  .../RedfishETagDxe/RedfishETagDxe.h           |  4 +-
>  .../RedfishETagDxe/RedfishETagDxe.c           | 84 ++++++++++---------
>  3 files changed, 50 insertions(+), 43 deletions(-)
>
> diff --git a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
> b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
> index 4aecdb41..3626f775 100644
> --- a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
> +++ b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
> @@ -1,7 +1,7 @@
>  ## @file
>  #
>  #  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> -#  Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved.
> +#  Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved.
>  #
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
>  #
> @@ -35,6 +35,7 @@
>    UefiBootServicesTableLib
>    UefiRuntimeServicesTableLib
>    UefiDriverEntryPoint
> +  RedfishEventLib
>
>  [Protocols]
>    gEdkIIRedfishETagProtocolGuid           ## PRODUCED ##
> @@ -44,4 +45,4 @@
>    gEfiRedfishClientVariableGuid           ## CONSUMED ##
>
>  [Depex]
> -  TRUE
> +  gEfiVariableArchProtocolGuid
> diff --git a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h
> b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h
> index 3542f289..c8302830 100644
> --- a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h
> +++ b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.h
> @@ -2,6 +2,7 @@
>    Common header file for RedfishETagDxe driver.
>
>    (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
> +  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved.
>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -25,6 +26,7 @@
>  #include <Library/UefiDriverEntryPoint.h>
>  #include <Library/UefiLib.h>
>  #include <Library/UefiRuntimeServicesTableLib.h>
> +#include <Library/RedfishEventLib.h>
>
>  #include <Protocol/EdkIIRedfishETagProtocol.h>
>
> @@ -49,7 +51,7 @@ typedef struct {
>  // Definition of REDFISH_ETAG_LIST
>  //
>  typedef struct {
> -  LIST_ENTRY    Listheader;
> +  LIST_ENTRY    ListHeader;
>    UINTN         TotalSize;
>    UINTN         Count;
>  } REDFISH_ETAG_LIST;
> diff --git a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c
> b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c
> index f731d39d..f303604a 100644
> --- a/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c
> +++ b/RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.c
> @@ -124,7 +124,7 @@ AddETagRecord (
>      return EFI_OUT_OF_RESOURCES;
>    }
>
> -  InsertTailList (&List->Listheader, &NewRecord->List);
> +  InsertTailList (&List->ListHeader, &NewRecord->List);
>    ++List->Count;
>    List->TotalSize += NewRecord->Size;
>
> @@ -225,20 +225,20 @@ DumpETagList (
>      DEBUG ((DEBUG_ERROR, "%s\n", Msg));
>    }
>
> -  if (IsListEmpty (&ETagList->Listheader)) {
> +  if (IsListEmpty (&ETagList->ListHeader)) {
>      DEBUG ((DEBUG_MANAGEABILITY, "ETag list is empty\n"));
>      return EFI_NOT_FOUND;
>    }
>
>    DEBUG ((DEBUG_MANAGEABILITY, "Count: %d Total Size: %d\n", ETagList-
> >Count, ETagList->TotalSize));
>    Record = NULL;
> -  List   = GetFirstNode (&ETagList->Listheader);
> -  while (!IsNull (&ETagList->Listheader, List)) {
> +  List   = GetFirstNode (&ETagList->ListHeader);
> +  while (!IsNull (&ETagList->ListHeader, List)) {
>      Record = REDFISH_ETAG_RECORD_FROM_LIST (List);
>
>      DEBUG ((DEBUG_MANAGEABILITY, "ETag: %a Uri: %a Size: %d\n", Record-
> >ETag, Record->Uri, Record->Size));
>
> -    List = GetNextNode (&ETagList->Listheader, List);
> +    List = GetNextNode (&ETagList->ListHeader, List);
>    }
>
>    return EFI_SUCCESS;
> @@ -304,16 +304,16 @@ ReleaseETagList (
>      return EFI_INVALID_PARAMETER;
>    }
>
> -  if (IsListEmpty (&ETagList->Listheader)) {
> +  if (IsListEmpty (&ETagList->ListHeader)) {
>      return EFI_SUCCESS;
>    }
>
>    Record = NULL;
>    Next   = NULL;
> -  List   = GetFirstNode (&ETagList->Listheader);
> -  while (!IsNull (&ETagList->Listheader, List)) {
> +  List   = GetFirstNode (&ETagList->ListHeader);
> +  while (!IsNull (&ETagList->ListHeader, List)) {
>      Record = REDFISH_ETAG_RECORD_FROM_LIST (List);
> -    Next   = GetNextNode (&ETagList->Listheader, List);
> +    Next   = GetNextNode (&ETagList->ListHeader, List);
>
>      DeleteETagRecord (ETagList, Record);
>
> @@ -352,14 +352,14 @@ SaveETagList (
>      return EFI_INVALID_PARAMETER;
>    }
>
> -  if (IsListEmpty (&ETagList->Listheader)) {
> +  if (IsListEmpty (&ETagList->ListHeader)) {
>      return EFI_SUCCESS;
>    }
>
>    //
>    // Calculate the total size we need to keep ETag list.
>    //
> -  VarSize = ETagList->TotalSize + 1; // terminator character
> +  VarSize = ETagList->TotalSize + sizeof (CHAR8); // terminator character
>    VarData = AllocateZeroPool (VarSize);
>    if (VarData == NULL) {
>      return EFI_OUT_OF_RESOURCES;
> @@ -367,8 +367,8 @@ SaveETagList (
>
>    Seeker = VarData;
>    Record = NULL;
> -  List   = GetFirstNode (&ETagList->Listheader);
> -  while (!IsNull (&ETagList->Listheader, List)) {
> +  List   = GetFirstNode (&ETagList->ListHeader);
> +  while (!IsNull (&ETagList->ListHeader, List)) {
>      Record = REDFISH_ETAG_RECORD_FROM_LIST (List);
>
>      StrSize = AsciiStrSize (Record->Uri);
> @@ -386,7 +386,7 @@ SaveETagList (
>
>      ++Seeker;
>
> -    List = GetNextNode (&ETagList->Listheader, List);
> +    List = GetNextNode (&ETagList->ListHeader, List);
>    }
>
>    *Seeker = '\0';
> @@ -468,7 +468,7 @@ InitialETagList (
>      //
>      Seeker = AsciiStrStr (UriPointer, "|");
>      if (Seeker == NULL) {
> -      DEBUG ((DEBUG_ERROR, "%a, data corrupted\n", __func__));
> +      DEBUG ((DEBUG_ERROR, "%a: data corrupted\n", __func__));
>        Status = EFI_DEVICE_ERROR;
>        goto ON_ERROR;
>      }
> @@ -481,7 +481,7 @@ InitialETagList (
>      //
>      Seeker = AsciiStrStr (ETagPointer, "\n");
>      if (Seeker == NULL) {
> -      DEBUG ((DEBUG_ERROR, "%a, data corrupted\n", __func__));
> +      DEBUG ((DEBUG_ERROR, "%a: data corrupted\n", __func__));
>        Status = EFI_DEVICE_ERROR;
>        goto ON_ERROR;
>      }
> @@ -532,11 +532,13 @@ RedfishETagGet (
>      return EFI_INVALID_PARAMETER;
>    }
>
> +  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a\n", __func__, Uri));
> +
>    Private = REDFISH_ETAG_PRIVATE_FROM_THIS (This);
>
>    *ETag = NULL;
>
> -  Target = FindETagRecord (&Private->ETagList.Listheader, Uri);
> +  Target = FindETagRecord (&Private->ETagList.ListHeader, Uri);
>    if (Target == NULL) {
>      return EFI_NOT_FOUND;
>    }
> @@ -551,7 +553,8 @@ RedfishETagGet (
>
>    @param[in]   This                Pointer to EDKII_REDFISH_ETAG_PROTOCOL
> instance.
>    @param[in]   Uri                 The target Uri which related to ETag.
> -  @param[in]   ETag                The ETag to add. If ETag is NULL, the record of
> corresponding URI will be removed.
> +  @param[in]   ETag                The ETag to add. If ETag is NULL, the record of
> +                                   corresponding URI will be removed.
>
>    @retval EFI_SUCCESS              This handler has been stoped successfully.
>    @retval Others                   Some error happened.
> @@ -573,10 +576,12 @@ RedfishETagSet (
>      return EFI_INVALID_PARAMETER;
>    }
>
> +  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a -> %a\n", __func__, Uri, (ETag
> == NULL ? "NULL" : ETag)));
> +
>    Private = REDFISH_ETAG_PRIVATE_FROM_THIS (This);
>
>    Status = EFI_NOT_FOUND;
> -  Target = FindETagRecord (&Private->ETagList.Listheader, Uri);
> +  Target = FindETagRecord (&Private->ETagList.ListHeader, Uri);
>    if (Target != NULL) {
>      //
>      // Remove old one and create new one.
> @@ -620,14 +625,16 @@ RedfishETagFlush (
>
>    Status = SaveETagList (&Private->ETagList, Private->VariableName);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, save ETag list to variable: %s failed: %r\n",
> __func__, Private->VariableName, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: save ETag list to variable: %s failed: %r\n",
> __func__, Private->VariableName, Status));
>    }
>
> +  DEBUG ((DEBUG_MANAGEABILITY, "%a: save ETag list to variable: %s\n",
> __func__, Private->VariableName));
> +
>    return Status;
>  }
>
>  /**
> -  Callback function executed when the ExitBootService event group is signaled.
> +  Callback function executed when the AfterProvisioning event group is
> signaled.
>
>    @param[in]   Event    Event whose notification function is being invoked.
>    @param[out]  Context  Pointer to the Context buffer
> @@ -635,13 +642,13 @@ RedfishETagFlush (
>  **/
>  VOID
>  EFIAPI
> -RedfishETagOnExitBootService (
> +RedfishETagOnRedfishAfterProvisioning (
>    IN  EFI_EVENT  Event,
>    OUT VOID       *Context
>    )
>  {
>    //
> -  // Memory is about to be released. Keep list into variable.
> +  // Redfish provisioning is finished. Keep ETag into variable.
>    //
>    RedfishETagFlush (&mRedfishETagPrivate->Protocol);
>  }
> @@ -670,7 +677,7 @@ RedfishETagDriverUnload (
>                      (VOID *)&mRedfishETagPrivate->Protocol
>                      );
>      if (EFI_ERROR (Status)) {
> -      DEBUG ((DEBUG_ERROR, "%a, can not uninstall
> gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
> +      DEBUG ((DEBUG_ERROR, "%a: can not uninstall
> gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
>        ASSERT (FALSE);
>      }
>
> @@ -725,7 +732,7 @@ RedfishETagDriverEntryPoint (
>      return EFI_OUT_OF_RESOURCES;
>    }
>
> -  InitializeListHead (&mRedfishETagPrivate->ETagList.Listheader);
> +  InitializeListHead (&mRedfishETagPrivate->ETagList.ListHeader);
>    mRedfishETagPrivate->VariableName = AllocateCopyPool (StrSize
> (ETAG_VARIABLE_NAME), ETAG_VARIABLE_NAME);
>    if (mRedfishETagPrivate->VariableName == NULL) {
>      Status = EFI_OUT_OF_RESOURCES;
> @@ -742,33 +749,30 @@ RedfishETagDriverEntryPoint (
>                    (VOID *)&mRedfishETagPrivate->Protocol
>                    );
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, can not install
> gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: can not install
> gEdkIIRedfishETagProtocolGuid: %r\n", __func__, Status));
>      ASSERT (FALSE);
>      goto ON_ERROR;
>    }
>
>    //
> -  // Create Exit Boot Service event.
> +  // Read existing record from variable.
>    //
> -  Status = gBS->CreateEventEx (
> -                  EVT_NOTIFY_SIGNAL,
> -                  TPL_CALLBACK,
> -                  RedfishETagOnExitBootService,
> -                  NULL,
> -                  &gEfiEventExitBootServicesGuid,
> -                  &mRedfishETagPrivate->Event
> -                  );
> +  DEBUG ((DEBUG_MANAGEABILITY, "%a: Initial ETag List from variable:
> %s\n", __func__, mRedfishETagPrivate->VariableName));
> +  Status = InitialETagList (&mRedfishETagPrivate->ETagList,
> mRedfishETagPrivate->VariableName);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a: Fail to register Exit Boot Service event.",
> __func__));
> -    goto ON_ERROR;
> +    DEBUG ((DEBUG_MANAGEABILITY, "%a: Initial ETag List: %r\n", __func__,
> Status));
>    }
>
>    //
> -  // Read existing record from variable.
> +  // Register after provisioning event
>    //
> -  Status = InitialETagList (&mRedfishETagPrivate->ETagList,
> mRedfishETagPrivate->VariableName);
> +  Status = CreateAfterProvisioningEvent (
> +             RedfishETagOnRedfishAfterProvisioning,
> +             NULL,
> +             &mRedfishETagPrivate->Event
> +             );
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_MANAGEABILITY, "%a, Initial ETag List: %r\n", __func__,
> Status));
> +    DEBUG ((DEBUG_ERROR, "%a: failed to register after-provisioning event:
> %r\n", __func__, Status));
>    }
>
>    return EFI_SUCCESS;
> --
> 2.17.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111781): https://edk2.groups.io/g/devel/message/111781
Mute This Topic: https://groups.io/mt/102767541/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-11-28  3:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-23 14:33 [edk2-devel] [edk2-redfish-client][PATCH 1/6] RedfishClientPkg/RedfishETagDxe: fix issue and enhancement Nickle Wang via groups.io
2023-11-28  3:13 ` Chang, Abner via groups.io

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox