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
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
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
- PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *PeriodicSmiLibraryHandlers;\r
+ PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *PeriodicSmiLibraryHandler;\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
+ return (BOOLEAN) (Index > 0);\r
{\r
LIST_ENTRY *Link;\r
PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *PeriodicSmiLibraryHandler;\r
{\r
LIST_ENTRY *Link;\r
PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *PeriodicSmiLibraryHandler;\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
//\r
// Free all the periodic SMI handler entries\r
//\r
//\r
// Free all the periodic SMI handler entries\r
//\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