]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiMemoryAllocationLib/MemoryAllocationLib.c
fixed to build under IPF.
[mirror_edk2.git] / MdePkg / Library / PeiMemoryAllocationLib / MemoryAllocationLib.c
index a240d03ef348073967ecf61a0abf4a6f161642d3..6e0517fe4d9087a5f776b6a5b009386a258e8a21 100644 (file)
@@ -128,7 +128,8 @@ AllocateReservedPages (
 \r
   Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer.  Buffer\r
   must have been allocated on a previous call to the page allocation services of the Memory\r
-  Allocation Library.\r
+  Allocation Library.  If it is not possible to free allocated pages, then this function will\r
+  perform no actions.\r
   \r
   If Buffer was not allocated with a page allocation function in the Memory Allocation Library,\r
   then ASSERT().\r
@@ -145,6 +146,7 @@ FreePages (
   IN UINTN  Pages\r
   )\r
 {\r
+  ASSERT (Pages != 0);\r
   //\r
   // PEI phase does not support to free pages, so leave it as NOP.\r
   //\r
@@ -288,7 +290,8 @@ AllocateAlignedReservedPages (
 \r
   Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer.  Buffer\r
   must have been allocated on a previous call to the aligned page allocation services of the Memory\r
-  Allocation Library.\r
+  Allocation Library.  If it is not possible to free allocated pages, then this function will \r
+  perform no actions.\r
   \r
   If Buffer was not allocated with an aligned page allocation function in the Memory Allocation\r
   Library, then ASSERT().\r
@@ -305,6 +308,7 @@ FreeAlignedPages (
   IN UINTN  Pages\r
   )\r
 {\r
+  ASSERT (Pages != 0);\r
   //\r
   // PEI phase does not support to free pages, so leave it as NOP.\r
   //\r
@@ -408,9 +412,9 @@ AllocateReservedPool (
 }\r
 \r
 /**\r
-  Allocates and zeros a buffer of a certian pool type.\r
+  Allocates and zeros a buffer of a certain pool type.\r
 \r
-  Allocates the number bytes specified by AllocationSize of a certian pool type, clears the buffer\r
+  Allocates the number bytes specified by AllocationSize of a certain pool type, clears the buffer\r
   with zeros, and returns a pointer to the allocated buffer.  If AllocationSize is 0, then a valid\r
   buffer of 0 size is returned.  If there is not enough memory remaining to satisfy the request,\r
   then NULL is returned.\r
@@ -509,9 +513,9 @@ AllocateReservedZeroPool (
 }\r
 \r
 /**\r
-  Copies a buffer to an allocated buffer of a certian pool type.\r
+  Copies a buffer to an allocated buffer of a certain pool type.\r
 \r
-  Allocates the number bytes specified by AllocationSize of a certian pool type, copies\r
+  Allocates the number bytes specified by AllocationSize of a certain pool type, copies\r
   AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the\r
   allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is returned.  If there\r
   is not enough memory remaining to satisfy the request, then NULL is returned.\r
@@ -644,8 +648,8 @@ AllocateReservedCopyPool (
   If NewSize is 0, then a valid buffer of 0 size is  returned.  If there is not \r
   enough memory remaining to satisfy the request, then NULL is returned.\r
   \r
-  If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
-  If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+  If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+  then ASSERT(). \r
 \r
   @param  PoolType       The type of pool to allocate.\r
   @param  OldSize        The size, in bytes, of OldBuffer.\r
@@ -666,7 +670,11 @@ InternalReallocatePool (
 {\r
   VOID  *NewBuffer;\r
 \r
-  NewBuffer = AllocateZeroPool (NewSize);\r
+  //\r
+  // Check the boundary for OldBuffer even if the allocation failure.\r
+  //\r
+  ASSERT (OldBuffer == NULL || MIN (OldSize, NewSize) <= MAX_ADDRESS - (UINTN) OldBuffer + 1);\r
+  NewBuffer = InternalAllocateZeroPool (PoolType, NewSize);\r
   if (NewBuffer != NULL && OldBuffer != NULL) {\r
     CopyMem (NewBuffer, OldBuffer, MIN (OldSize, NewSize));\r
     FreePool (OldBuffer);\r
@@ -684,8 +692,8 @@ InternalReallocatePool (
   If NewSize is 0, then a valid buffer of 0 size is  returned.  If there is not \r
   enough memory remaining to satisfy the request, then NULL is returned.\r
   \r
-  If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
-  If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+  If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+  then ASSERT(). \r
 \r
   @param  OldSize        The size, in bytes, of OldBuffer.\r
   @param  NewSize        The size, in bytes, of the buffer to reallocate.\r
@@ -716,8 +724,8 @@ ReallocatePool (
   If NewSize is 0, then a valid buffer of 0 size is  returned.  If there is not \r
   enough memory remaining to satisfy the request, then NULL is returned.\r
 \r
-  If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
-  If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+  If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+  then ASSERT(). \r
 \r
   @param  OldSize        The size, in bytes, of OldBuffer.\r
   @param  NewSize        The size, in bytes, of the buffer to reallocate.\r
@@ -748,8 +756,8 @@ ReallocateRuntimePool (
   If NewSize is 0, then a valid buffer of 0 size is  returned.  If there is not \r
   enough memory remaining to satisfy the request, then NULL is returned.\r
 \r
-  If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
-  If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+  If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+  then ASSERT(). \r
 \r
   @param  OldSize        The size, in bytes, of OldBuffer.\r
   @param  NewSize        The size, in bytes, of the buffer to reallocate.\r
@@ -775,7 +783,8 @@ ReallocateReservedPool (
   Memory Allocation Library.\r
 \r
   Frees the buffer specified by Buffer.  Buffer must have been allocated on a previous call to the\r
-  pool allocation services of the Memory Allocation Library.\r
+  pool allocation services of the Memory Allocation Library.  If it is not possible to free pool\r
+  resources, then this function will perform no actions.\r
   \r
   If Buffer was not allocated with a pool allocation function in the Memory Allocation Library,\r
   then ASSERT().\r