]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Simplify the SmmPeriodicSmiLib to call AllocatePool() for every entry in the SMI...
authorniruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 19 Aug 2011 01:37:47 +0000 (01:37 +0000)
committerniruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 19 Aug 2011 01:37:47 +0000 (01:37 +0000)
Signed-off-by: niruiyu
Reviewed-by: mdkinney
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12173 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/SmmPeriodicSmiLib/SmmPeriodicSmiLib.c

index 1a9659616c884b137cf758f6c58ff807fe84f981..b6db31766ca9a3f171f148d2ba0ef14d80cc75e6 100644 (file)
@@ -315,8 +315,6 @@ ReclaimPeriodicSmiLibraryHandler (
   PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT     *PeriodicSmiLibraryHandler\r
   )\r
 {\r
   PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT     *PeriodicSmiLibraryHandler\r
   )\r
 {\r
-  LIST_ENTRY                               *Link;\r
-\r
   ASSERT (PeriodicSmiLibraryHandler->DispatchHandle == NULL);\r
   if (PeriodicSmiLibraryHandler->Stack != NULL) {\r
     FreePages (\r
   ASSERT (PeriodicSmiLibraryHandler->DispatchHandle == NULL);\r
   if (PeriodicSmiLibraryHandler->Stack != NULL) {\r
     FreePages (\r
@@ -326,18 +324,7 @@ ReclaimPeriodicSmiLibraryHandler (
     PeriodicSmiLibraryHandler->Stack = NULL;\r
   }\r
   RemoveEntryList (&PeriodicSmiLibraryHandler->Link);\r
     PeriodicSmiLibraryHandler->Stack = NULL;\r
   }\r
   RemoveEntryList (&PeriodicSmiLibraryHandler->Link);\r
-  //\r
-  // Insert to gFreePeriodicSmiLibraryHandlers in the reverse order of the address of PeriodicSmiLibraryHandler\r
-  //\r
-  for ( Link = GetFirstNode (&gFreePeriodicSmiLibraryHandlers)\r
-      ; !IsNull (&gFreePeriodicSmiLibraryHandlers, Link)\r
-      ; Link = GetNextNode (&gFreePeriodicSmiLibraryHandlers, Link)\r
-      ) {\r
-    if (Link < &PeriodicSmiLibraryHandler->Link) {\r
-      break;\r
-    }\r
-  }\r
-  InsertTailList (Link, &PeriodicSmiLibraryHandler->Link);\r
+  InsertHeadList (&gFreePeriodicSmiLibraryHandlers, &PeriodicSmiLibraryHandler->Link);\r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
@@ -354,30 +341,21 @@ EnlargeFreePeriodicSmiLibraryHandlerList (
   )\r
 {\r
   UINTN                                 Index;\r
   )\r
 {\r
   UINTN                                 Index;\r
-  PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT  *PeriodicSmiLibraryHandlers;\r
+  PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT  *PeriodicSmiLibraryHandler;\r
 \r
   //\r
 \r
   //\r
-  // The function is assumed to be called only when the list of free periodic SMI library\r
-  // handlers is empty.\r
-  //\r
-  ASSERT (IsListEmpty (&gFreePeriodicSmiLibraryHandlers));\r
-\r
-  PeriodicSmiLibraryHandlers = AllocatePool (\r
-                                 PERIODIC_SMI_LIBRARY_ALLOCATE_SIZE * sizeof (PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT)\r
-                                 );\r
-  if (PeriodicSmiLibraryHandlers == NULL) {\r
-    return FALSE;\r
-  }\r
-  \r
-  //\r
-  // Add the entries to the list in the reverse order of the their memory address\r
+  // Add the entries to the list\r
   //\r
   for (Index = 0; Index < PERIODIC_SMI_LIBRARY_ALLOCATE_SIZE; Index++) {\r
   //\r
   for (Index = 0; Index < PERIODIC_SMI_LIBRARY_ALLOCATE_SIZE; Index++) {\r
-    PeriodicSmiLibraryHandlers[Index].Signature  = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_SIGNATURE;\r
-    InsertHeadList (&gFreePeriodicSmiLibraryHandlers, &PeriodicSmiLibraryHandlers[Index].Link);\r
+    PeriodicSmiLibraryHandler = AllocatePool (sizeof (PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT));\r
+    if (PeriodicSmiLibraryHandler == NULL) {\r
+      break;\r
+    }\r
+    PeriodicSmiLibraryHandler->Signature = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_SIGNATURE;\r
+    InsertHeadList (&gFreePeriodicSmiLibraryHandlers, &PeriodicSmiLibraryHandler->Link);\r
   }\r
 \r
   }\r
 \r
-  return TRUE;\r
+  return (BOOLEAN) (Index > 0);\r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
@@ -1175,7 +1153,6 @@ SmmPeriodicSmiLibDestructor (
 {\r
   LIST_ENTRY                            *Link;\r
   PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT  *PeriodicSmiLibraryHandler;\r
 {\r
   LIST_ENTRY                            *Link;\r
   PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT  *PeriodicSmiLibraryHandler;\r
-  UINTN                                 Index;\r
 \r
   //\r
   // Free the table of supported periodic SMI tick rates\r
 \r
   //\r
   // Free the table of supported periodic SMI tick rates\r
@@ -1196,19 +1173,10 @@ SmmPeriodicSmiLibDestructor (
   //\r
   // Free all the periodic SMI handler entries\r
   //\r
   //\r
   // Free all the periodic SMI handler entries\r
   //\r
-  Index = 0;\r
   for (Link = GetFirstNode (&gFreePeriodicSmiLibraryHandlers); !IsNull (&gFreePeriodicSmiLibraryHandlers, Link);) {    \r
     PeriodicSmiLibraryHandler = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_FROM_LINK (Link);\r
     Link = RemoveEntryList (Link);\r
   for (Link = GetFirstNode (&gFreePeriodicSmiLibraryHandlers); !IsNull (&gFreePeriodicSmiLibraryHandlers, Link);) {    \r
     PeriodicSmiLibraryHandler = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_FROM_LINK (Link);\r
     Link = RemoveEntryList (Link);\r
-    Index++;\r
-    //\r
-    // Because the entries in the list are in the reverse order of the address of PeriodicSmiLibraryHandler and\r
-    // every PERIODIC_SMI_LIBRARY_ALLOCATE_SIZE entries are in the same pool returned by AllocatePool(),\r
-    // every PERIODIC_SMI_LIBRARY_ALLOCATE_SIZE'th entry is the header of allocated pool.\r
-    //\r
-    if ((Index % PERIODIC_SMI_LIBRARY_ALLOCATE_SIZE) == 0) {\r
-      FreePool (PeriodicSmiLibraryHandler);\r
-    }\r
+    FreePool (PeriodicSmiLibraryHandler);\r
   }\r
 \r
   return EFI_SUCCESS;\r
   }\r
 \r
   return EFI_SUCCESS;\r