ArmPkg/BdsLib: Allocate memory with AnyPage type if it failed with the one initially requested
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12170 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
656416bc2e
commit
bd54c237f3
|
@ -424,7 +424,7 @@ BdsFileSystemLoadImage (
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Try to Open the volume and get root directory
|
// Try to Open the volume and get root directory
|
||||||
Status = FsProtocol->OpenVolume (FsProtocol, &Fs);
|
Status = FsProtocol->OpenVolume (FsProtocol, &Fs);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -451,7 +451,11 @@ BdsFileSystemLoadImage (
|
||||||
}
|
}
|
||||||
FreePool(FileInfo);
|
FreePool(FileInfo);
|
||||||
|
|
||||||
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size),Image);
|
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size), Image);
|
||||||
|
// Try to allocate in any pages if failed to allocate memory at the defined location
|
||||||
|
if ((Status == EFI_OUT_OF_RESOURCES) && (Type != AllocateAnyPages)) {
|
||||||
|
Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size), Image);
|
||||||
|
}
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
Status = File->Read (File, &Size, (VOID*)(UINTN)(*Image));
|
Status = File->Read (File, &Size, (VOID*)(UINTN)(*Image));
|
||||||
}
|
}
|
||||||
|
@ -492,7 +496,11 @@ BdsMemoryMapLoadImage (
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size),Image);
|
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size), Image);
|
||||||
|
// Try to allocate in any pages if failed to allocate memory at the defined location
|
||||||
|
if ((Status == EFI_OUT_OF_RESOURCES) && (Type != AllocateAnyPages)) {
|
||||||
|
Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size), Image);
|
||||||
|
}
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
CopyMem ((VOID*)(UINTN)(*Image), (CONST VOID*)(UINTN)MemMapPathDevicePath->StartingAddress, Size);
|
CopyMem ((VOID*)(UINTN)(*Image), (CONST VOID*)(UINTN)MemMapPathDevicePath->StartingAddress, Size);
|
||||||
|
|
||||||
|
@ -571,6 +579,10 @@ BdsFirmwareVolumeLoadImage (
|
||||||
#else
|
#else
|
||||||
// We must copy the buffer into a page allocations. Otherwise, the caller could call gBS->FreePages() on the pool allocation
|
// We must copy the buffer into a page allocations. Otherwise, the caller could call gBS->FreePages() on the pool allocation
|
||||||
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image);
|
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image);
|
||||||
|
// Try to allocate in any pages if failed to allocate memory at the defined location
|
||||||
|
if ((Status == EFI_OUT_OF_RESOURCES) && (Type != AllocateAnyPages)) {
|
||||||
|
Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size), Image);
|
||||||
|
}
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
CopyMem ((VOID*)(UINTN)(*Image), ImageBuffer, *ImageSize);
|
CopyMem ((VOID*)(UINTN)(*Image), ImageBuffer, *ImageSize);
|
||||||
FreePool (ImageBuffer);
|
FreePool (ImageBuffer);
|
||||||
|
@ -588,7 +600,11 @@ BdsFirmwareVolumeLoadImage (
|
||||||
&AuthenticationStatus
|
&AuthenticationStatus
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize),Image);
|
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image);
|
||||||
|
// Try to allocate in any pages if failed to allocate memory at the defined location
|
||||||
|
if ((Status == EFI_OUT_OF_RESOURCES) && (Type != AllocateAnyPages)) {
|
||||||
|
Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesCode, EFI_SIZE_TO_PAGES(Size), Image);
|
||||||
|
}
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
Status = FwVol->ReadFile (
|
Status = FwVol->ReadFile (
|
||||||
FwVol,
|
FwVol,
|
||||||
|
|
Loading…
Reference in New Issue