]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c
CloseEvent in ReportStatusCodeLibDestruct can only be called when the library instanc...
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / SmmRuntimeDxeReportStatusCodeLibFramework / SmmRuntimeDxeSupport.c
index dcd0b38c72f3ac8c2b60bd07bac404422299cac4..f4dc2f0eb94a1572fde581d11e99464f93866ca3 100644 (file)
@@ -32,6 +32,8 @@ EFI_STATUS_CODE_DATA  *mStatusCodeData;
 STATIC\r
 BOOLEAN               mInSmm;\r
 \r
+EFI_SMM_BASE_PROTOCOL *mSmmBase;\r
+\r
 STATIC\r
 EFI_RUNTIME_SERVICES  *mRT;\r
 \r
@@ -123,7 +125,6 @@ ReportStatusCodeLibConstruct (
   IN EFI_SYSTEM_TABLE     *SystemTable\r
   )\r
 {\r
-  EFI_SMM_BASE_PROTOCOL *SmmBase;\r
   EFI_STATUS            Status;\r
 \r
   mBS = SystemTable->BootServices;\r
@@ -133,12 +134,12 @@ ReportStatusCodeLibConstruct (
   // the SMM driver must be success to locate protocol.\r
   // \r
   ASSERT (mBS != NULL);\r
-  Status = mBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &SmmBase);\r
+  Status = mBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &mSmmBase);\r
   if (!EFI_ERROR (Status)) {\r
-    SmmBase->InSmm (SmmBase, &mInSmm);\r
+    mSmmBase->InSmm (mSmmBase, &mInSmm);\r
     if (mInSmm) {\r
-      Status = SmmBase->SmmAllocatePool (\r
-                           SmmBase,\r
+      Status = mSmmBase->SmmAllocatePool (\r
+                           mSmmBase,\r
                            EfiRuntimeServicesData, \r
                            sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, \r
                            (VOID **) &mStatusCodeData\r
@@ -207,18 +208,22 @@ ReportStatusCodeLibDestruct (
 {\r
   EFI_STATUS  Status;\r
 \r
-  //\r
-  // Close SetVirtualAddressMap () notify function\r
-  //\r
-  ASSERT (mBS != NULL);\r
-  Status = mBS->CloseEvent (mVirtualAddressChangeEvent);\r
-  ASSERT_EFI_ERROR (Status);\r
-  Status = mBS->CloseEvent (mExitBootServicesEvent);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  mBS->FreePool (mStatusCodeData);\r
+  if (!mInSmm) {\r
+    //\r
+    // Close SetVirtualAddressMap () notify function\r
+    //\r
+    ASSERT (mBS != NULL);\r
+    Status = mBS->CloseEvent (mVirtualAddressChangeEvent);\r
+    ASSERT_EFI_ERROR (Status);\r
+    Status = mBS->CloseEvent (mExitBootServicesEvent);\r
+    ASSERT_EFI_ERROR (Status);\r
+\r
+    mBS->FreePool (mStatusCodeData);\r
+  } else {\r
+    mSmmBase->SmmFreePool (mSmmBase, mStatusCodeData);\r
+  }\r
 \r
-  return Status;\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r