Fix the TPL broken issue for UnixPkg
authorklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 4 Apr 2007 07:40:40 +0000 (07:40 +0000)
committerklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 4 Apr 2007 07:40:40 +0000 (07:40 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2534 6f19259b-4bc3-4df7-8a09-765794883524

EdkUnixPkg/Dxe/UnixThunk/Bus/SimpleFileSystem/UnixSimpleFileSystem.c

index 9872653..10736d5 100644 (file)
@@ -495,10 +495,12 @@ Returns:
   EFI_STATUS                        Status;\r
   UNIX_SIMPLE_FILE_SYSTEM_PRIVATE *Private;\r
   UNIX_EFI_FILE_PRIVATE           *PrivateFile;\r
+  EFI_TPL                           OldTpl;\r
 \r
   if (This == NULL || Root == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
+  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
 \r
   Private     = UNIX_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (This);\r
 \r
@@ -566,6 +568,8 @@ Done:
     }\r
   }\r
 \r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return Status;\r
 }\r
 \r
@@ -640,7 +644,6 @@ Returns:
   BOOLEAN                           LoopFinish;\r
   UINTN                             InfoSize;\r
   EFI_FILE_INFO                     *Info;\r
-  EFI_TPL                           OldTpl;\r
 \r
   TrailingDash = FALSE;\r
 \r
@@ -672,7 +675,6 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
 \r
   PrivateFile     = UNIX_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);\r
   PrivateRoot     = UNIX_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem);\r
@@ -953,8 +955,6 @@ Done: ;
     *NewHandle = &NewPrivateFile->EfiFile;\r
   }\r
 \r
-  gBS->RestoreTPL (OldTpl);\r
-\r
   return Status;\r
 }\r
 \r
@@ -1073,6 +1073,8 @@ Returns:
   gBS->FreePool (PrivateFile->FileName);\r
   gBS->FreePool (PrivateFile);\r
 \r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return Status;\r
 }\r
 \r
@@ -1273,31 +1275,37 @@ Returns:
   if (!PrivateFile->IsDirectoryPath) {\r
 \r
     if (PrivateFile->fd < 0) {\r
-      return EFI_DEVICE_ERROR;\r
+      Status = EFI_DEVICE_ERROR;\r
+      goto Done;\r
     }\r
 \r
     Res = PrivateFile->UnixThunk->Read (\r
                                         PrivateFile->fd,\r
                                         Buffer,\r
                                         *BufferSize);\r
-    if (Res < 0)\r
-      return EFI_DEVICE_ERROR;\r
+    if (Res < 0) {\r
+      Status = EFI_DEVICE_ERROR;\r
+      goto Done;\r
+    }\r
     *BufferSize = Res;\r
-    return EFI_SUCCESS;\r
+    Status = EFI_SUCCESS;\r
+    goto Done;\r
   }\r
 \r
   //\r
   // Read on a directory.\r
   //\r
   if (PrivateFile->Dir == NULL) {\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   if (PrivateFile->Dirent == NULL) {\r
     PrivateFile->Dirent = PrivateFile->UnixThunk->ReadDir (PrivateFile->Dir);\r
     if (PrivateFile->Dirent == NULL) {\r
       *BufferSize = 0;\r
-      return EFI_SUCCESS;\r
+      Status = EFI_SUCCESS;\r
+      goto Done;\r
     }\r
   }\r
 \r
@@ -1307,7 +1315,8 @@ Returns:
 \r
   if (*BufferSize < ResultSize) {\r
     *BufferSize = ResultSize;\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
   Status  = EFI_SUCCESS;\r
 \r
@@ -1320,7 +1329,7 @@ Returns:
                   );\r
 \r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
                  \r
   AsciiStrCpy(FullFileName, PrivateFile->FileName);\r
@@ -1334,6 +1343,9 @@ Returns:
 \r
   PrivateFile->Dirent = NULL;\r
 \r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return Status;\r
 }\r
 \r
@@ -1389,6 +1401,8 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
+\r
   PrivateFile = UNIX_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   if (PrivateFile->fd < 0) {\r
@@ -1403,8 +1417,6 @@ Returns:
     return EFI_ACCESS_DENIED;\r
   }\r
 \r
-  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
-  \r
   Res = PrivateFile->UnixThunk->Write (\r
                                        PrivateFile->fd,\r
                                        Buffer,\r