102 lines
3.5 KiB
Diff
102 lines
3.5 KiB
Diff
|
From e57f49101a66663a4f5425995e9ea97ae0858e1b Mon Sep 17 00:00:00 2001
|
||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||
|
Date: Tue, 14 Jan 2020 12:39:05 +0100
|
||
|
Subject: [PATCH 1/2] MdeModulePkg/UefiBootManagerLib: log reserved mem
|
||
|
allocation failure
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
RH-Author: Laszlo Ersek <lersek@redhat.com>
|
||
|
Message-id: <20200114123906.8547-2-lersek@redhat.com>
|
||
|
Patchwork-id: 93339
|
||
|
O-Subject: [RHEL-8.2.0 edk2 PATCH 1/2] MdeModulePkg/UefiBootManagerLib: log reserved mem allocation failure
|
||
|
Bugzilla: 1789797
|
||
|
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
||
|
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
||
|
|
||
|
The LoadFile protocol can report such a large buffer size that we cannot
|
||
|
allocate enough reserved pages for. This particularly affects HTTP(S)
|
||
|
Boot, if the remote file is very large (for example, an ISO image).
|
||
|
|
||
|
While the TianoCore wiki mentions this at
|
||
|
<https://github.com/tianocore/tianocore.github.io/wiki/HTTP-Boot#ram-disk-image-size>:
|
||
|
|
||
|
> The maximum RAM disk image size depends on how much continuous reserved
|
||
|
> memory block the platform could provide.
|
||
|
|
||
|
it's hard to remember; so log a DEBUG_ERROR message when the allocation
|
||
|
fails.
|
||
|
|
||
|
This patch produces error messages such as:
|
||
|
|
||
|
> UiApp:BmExpandLoadFile: failed to allocate reserved pages:
|
||
|
> BufferSize=4501536768
|
||
|
> LoadFile="PciRoot(0x0)/Pci(0x3,0x0)/MAC(5254001B103E,0x1)/
|
||
|
> IPv4(0.0.0.0,TCP,DHCP,192.168.124.106,192.168.124.1,255.255.255.0)/
|
||
|
> Dns(192.168.124.1)/
|
||
|
> Uri(https://ipv4-server/RHEL-7.7-20190723.1-Server-x86_64-dvd1.iso)"
|
||
|
> FilePath=""
|
||
|
|
||
|
(Manually rewrapped here for keeping PatchCheck.py happy.)
|
||
|
|
||
|
Cc: Hao A Wu <hao.a.wu@intel.com>
|
||
|
Cc: Jian J Wang <jian.j.wang@intel.com>
|
||
|
Cc: Ray Ni <ray.ni@intel.com>
|
||
|
Cc: Zhichao Gao <zhichao.gao@intel.com>
|
||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||
|
Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com>
|
||
|
Reviewed-by: Siyuan Fu <siyuan.fu@intel.com>
|
||
|
Acked-by: Hao A Wu <hao.a.wu@intel.com>
|
||
|
(cherry picked from commit a56af23f066e2816c67b7c6e64de7ddefcd70780)
|
||
|
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||
|
---
|
||
|
MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 31 ++++++++++++++++++++++++
|
||
|
1 file changed, 31 insertions(+)
|
||
|
|
||
|
diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
|
||
|
index 952033f..ded9ae9 100644
|
||
|
--- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
|
||
|
+++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
|
||
|
@@ -1386,6 +1386,37 @@ BmExpandLoadFile (
|
||
|
//
|
||
|
FileBuffer = AllocateReservedPages (EFI_SIZE_TO_PAGES (BufferSize));
|
||
|
if (FileBuffer == NULL) {
|
||
|
+ DEBUG_CODE (
|
||
|
+ EFI_DEVICE_PATH *LoadFilePath;
|
||
|
+ CHAR16 *LoadFileText;
|
||
|
+ CHAR16 *FileText;
|
||
|
+
|
||
|
+ LoadFilePath = DevicePathFromHandle (LoadFileHandle);
|
||
|
+ if (LoadFilePath == NULL) {
|
||
|
+ LoadFileText = NULL;
|
||
|
+ } else {
|
||
|
+ LoadFileText = ConvertDevicePathToText (LoadFilePath, FALSE, FALSE);
|
||
|
+ }
|
||
|
+ FileText = ConvertDevicePathToText (FilePath, FALSE, FALSE);
|
||
|
+
|
||
|
+ DEBUG ((
|
||
|
+ DEBUG_ERROR,
|
||
|
+ "%a:%a: failed to allocate reserved pages: "
|
||
|
+ "BufferSize=%Lu LoadFile=\"%s\" FilePath=\"%s\"\n",
|
||
|
+ gEfiCallerBaseName,
|
||
|
+ __FUNCTION__,
|
||
|
+ (UINT64)BufferSize,
|
||
|
+ LoadFileText,
|
||
|
+ FileText
|
||
|
+ ));
|
||
|
+
|
||
|
+ if (FileText != NULL) {
|
||
|
+ FreePool (FileText);
|
||
|
+ }
|
||
|
+ if (LoadFileText != NULL) {
|
||
|
+ FreePool (LoadFileText);
|
||
|
+ }
|
||
|
+ );
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|