]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/ReportStatusCodeLib.c
MdeModulePkg/ReportStatusCodeLib: Avoid using AllocatePool if possible
[mirror_edk2.git] / MdeModulePkg / Library / RuntimeDxeReportStatusCodeLib / ReportStatusCodeLib.c
index b73103517ab2065c29fc593eeb5fbc6b98a91e24..9b79854538dc31945a95f730970701349b3b2738 100644 (file)
@@ -632,12 +632,16 @@ ReportStatusCodeEx (
   ASSERT (!((ExtendedData == NULL) && (ExtendedDataSize != 0)));\r
   ASSERT (!((ExtendedData != NULL) && (ExtendedDataSize == 0)));\r
 \r
-  if (mHaveExitedBootServices) {\r
-    if (sizeof (EFI_STATUS_CODE_DATA) + ExtendedDataSize > MAX_EXTENDED_DATA_SIZE) {\r
+  if (ExtendedDataSize <= (MAX_EXTENDED_DATA_SIZE - sizeof (EFI_STATUS_CODE_DATA))) {\r
+    //\r
+    // Use Buffer instead of allocating if possible.\r
+    //\r
+    StatusCodeData = (EFI_STATUS_CODE_DATA *) StatusCodeBuffer;\r
+  } else {\r
+    if (mHaveExitedBootServices) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
-    StatusCodeData = (EFI_STATUS_CODE_DATA *) StatusCodeBuffer;\r
-  } else  {\r
+\r
     if (gBS == NULL || gBS->AllocatePool == NULL || gBS->FreePool == NULL) {\r
       return EFI_UNSUPPORTED;\r
     }\r
@@ -680,7 +684,7 @@ ReportStatusCodeEx (
   //\r
   // Free the allocated buffer\r
   //\r
-  if (!mHaveExitedBootServices) {\r
+  if (StatusCodeData != (EFI_STATUS_CODE_DATA *) StatusCodeBuffer) {\r
     gBS->FreePool (StatusCodeData);\r
   }\r
 \r