]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Image/Image.c
Switch DxeCore to use DxeCoreMemoryAllocationLib for NT32 platform.
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Image / Image.c
index dbb662519fb749867e8b00c8642a7f9849657123..54254879caebeaa40604d69731a46e4aba9f7bc3 100644 (file)
@@ -17,6 +17,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 // Module Globals\r
 //\r
 \r
+SPIN_LOCK                  mUnloadImageLock;\r
+\r
 LOADED_IMAGE_PRIVATE_DATA  *mCurrentImage = NULL;\r
 \r
 LOAD_PE32_IMAGE_PRIVATE_DATA  mLoadPe32PrivateData = {\r
@@ -137,6 +139,11 @@ CoreInitializeImageServices (
 \r
   mCurrentImage = Image;\r
 \r
+  //\r
+  // Initialize spin lock\r
+  //\r
+  InitializeSpinLock (&mUnloadImageLock);\r
+\r
   //\r
   // Fill in DXE globals\r
   //\r
@@ -468,7 +475,7 @@ CoreLoadPeImage (
 \r
 \r
     DEBUG ((DEBUG_INFO | DEBUG_LOAD,\r
-           "Loading driver at 0x%10p EntryPoint=0x%10p ",\r
+           "Loading driver at 0x%11p EntryPoint=0x%11p ",\r
            (VOID *)(UINTN) Image->ImageContext.ImageAddress,\r
            FUNCTION_ENTRY_POINT ((UINTN) Image->ImageContext.EntryPoint)));\r
 \r
@@ -1019,7 +1026,7 @@ CoreStartImage (
     //\r
     DEBUG_CODE_BEGIN ();\r
       if (EFI_ERROR (Image->Status)) {\r
-        DEBUG ((DEBUG_ERROR, "Error: Image at %10p start failed: %r\n", Image->Info.ImageBase, Image->Status));\r
+        DEBUG ((DEBUG_ERROR, "Error: Image at %11p start failed: %r\n", Image->Info.ImageBase, Image->Status));\r
       }\r
     DEBUG_CODE_END ();\r
 \r
@@ -1362,13 +1369,14 @@ CoreUnloadImage (
 {\r
   EFI_STATUS                 Status;\r
   LOADED_IMAGE_PRIVATE_DATA  *Image;\r
-  EFI_TPL                    OldTpl;\r
 \r
   //\r
   // Prevent possible reentrance to this function\r
   // for the same ImageHandle\r
   //\r
-  OldTpl = CoreRaiseTpl (TPL_NOTIFY);\r
+  if (!AcquireSpinLockOrFail (&mUnloadImageLock)) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
 \r
   Image = CoreLoadedImageInfo (ImageHandle);\r
   if (Image == NULL ) {\r
@@ -1404,7 +1412,7 @@ CoreUnloadImage (
   }\r
 \r
 Done:\r
-  CoreRestoreTpl (OldTpl);\r
+  ReleaseSpinLock (&mUnloadImageLock);\r
   return Status;\r
 }\r
 \r