]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Move lock to FAT driver binding start to prevent interrupt during hot plug event.
authorQing Huang <qing.huang@intel.com>
Fri, 7 May 2010 03:31:16 +0000 (03:31 +0000)
committerJordan Justen <jordan.l.justen@intel.com>
Thu, 7 Apr 2016 06:22:43 +0000 (23:22 -0700)
(based on FatPkg commit b449ca31443f754ed2e6998ca32f49547dabd615)

[jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD]
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Acked-by: Mark Doran <mark.doran@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
FatPkg/EnhancedFatDxe/Fat.c
FatPkg/EnhancedFatDxe/Init.c

index 67ee66c026c19a1341c09b90c229da8beb0c774d..38b70882c5c5ca796af0216c9437e1ca9512030e 100644 (file)
@@ -1,6 +1,6 @@
 /*++\r
 \r
-Copyright (c) 2005 - 2007, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials are licensed and made available\r
 under the terms and conditions of the BSD License which accompanies this\r
 distribution. The full text of the license may be found at\r
@@ -269,10 +269,21 @@ Returns:
   EFI_STATUS            Status;\r
   EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
   EFI_DISK_IO_PROTOCOL  *DiskIo;\r
+  BOOLEAN               LockedByMe;\r
+\r
+  LockedByMe = FALSE;\r
+  //\r
+  // Acquire the lock.\r
+  // If caller has already acquired the lock, cannot lock it again.\r
+  //\r
+  Status = FatAcquireLockOrFail ();\r
+  if (!EFI_ERROR (Status)) {\r
+    LockedByMe = TRUE;\r
+  }\r
 \r
   Status = InitializeUnicodeCollationSupport (This->DriverBindingHandle);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Exit;\r
   }\r
   //\r
   // Open our required BlockIo and DiskIo\r
@@ -286,7 +297,7 @@ Returns:
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Exit;\r
   }\r
 \r
   Status = gBS->OpenProtocol (\r
@@ -298,7 +309,7 @@ Returns:
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Exit;\r
   }\r
   //\r
   // Allocate Volume structure. In FatAllocateVolume(), Resources\r
@@ -330,6 +341,13 @@ Returns:
     }\r
   }\r
 \r
+Exit:\r
+  //\r
+  // Unlock if locked by myself.\r
+  //\r
+  if (LockedByMe) {\r
+    FatReleaseLock ();\r
+  }\r
   return Status;\r
 }\r
 \r
index 5d86a83f4d399b0d9e98bbdea57dbd4a99b71d41..ee258cd2c414ad264e078c3aef81bf1247d3c725 100644 (file)
@@ -51,8 +51,7 @@ Returns:
 {\r
   EFI_STATUS  Status;\r
   FAT_VOLUME  *Volume;\r
-  BOOLEAN     LockedByMe;\r
-  LockedByMe = FALSE;\r
+\r
   //\r
   // Allocate a volume structure\r
   //\r
@@ -60,14 +59,7 @@ Returns:
   if (Volume == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
-  //\r
-  // Acquire the lock.\r
-  // If caller has already acquired the lock, cannot lock it again.\r
-  //\r
-  Status = FatAcquireLockOrFail ();\r
-  if (!EFI_ERROR (Status)) {\r
-    LockedByMe = TRUE;\r
-  }\r
+\r
   //\r
   // Initialize the structure\r
   //\r
@@ -119,13 +111,6 @@ Returns:
   Volume->Valid = TRUE;\r
 \r
 Done:\r
-  //\r
-  // Unlock if locked by myself.\r
-  //\r
-  if (LockedByMe) {\r
-    FatReleaseLock ();\r
-  }\r
-\r
   if (EFI_ERROR (Status)) {\r
     FatFreeVolume (Volume);\r
   }\r