audk/MdeModulePkg/Library/UefiBootManagerLib
Sunny Wang fb5848c588 MdeModulePkg/UefiBootManagerLib: Fix data in MemoryTypeInformation
After booting a large-size ISO RAM disk (HTTP boot option pointing to
a ISO file) and reboot system, system will possibly run into the
following ASSERT because the BDS core code doesn't consider the
case that Memory page management (Page.c) would possibly NOT update
current memory usage statistics(CurrentMemoryTypeInformation) if
system allocates a memory buffer with a large number of pages.
ASSERT [DxeCore] u:\MdeModulePkg\Core\Dxe\Gcd\Gcd.c(2273):
Length >= MinimalMemorySizeNeeded

The BDS code block for skipping counting reserved memory occupied
by RAM Disk didn't consider the Memory page management's behavior
mentioned above, which caused that the
CurrentMemoryTypeInformation[Index1].NumberOfPages will be updated
to a "very big value" because RamDiskSizeInPages is bigger than
CurrentMemoryTypeInformation[Index1].NumberOfPages. For example,
NumberOfPages is 0x9000 (current use) and RamDiskSizeInPages is
0xC0000 (ISO image size). The result will become a very big value
0xFFF49000.

Therefore, we need to add a check to prevent BDS core code updating
wrong data (very big value) to MemoryTypeInformation variable. This
code change is a improvement for fixing this issue for most cases.
There is still a corner case even when the memory bins don't include
the RAM disk memory, the memory used by all other modules exceeds
RamDiskSizeInPages. Ray will send the other patch to fix this corner
case.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Sunny Wang <sunnywang@hpe.com>
Reviewed-by: Samer El-Haj-Mahmoud <elhaj@hpe.com>
Reviewed-by: Ruiyu Ni <Ruiyu.ni@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
2016-06-27 10:38:09 +08:00
..
BmBoot.c MdeModulePkg/UefiBootManagerLib: Expose *GetLoadOptionBuffer() API 2016-05-04 08:47:34 +08:00
BmBootDescription.c MdeModulePkg: Replace UnicodeStrToAsciiStr/AsciiStrToUnicodeStr 2016-06-21 12:46:24 +08:00
BmConnect.c MdeModulePkg: Fix EOL to be DOS format. 2015-05-13 02:23:44 +00:00
BmConsole.c MdeModulePkg: Fix memory leak issues 2015-11-03 02:58:30 +00:00
BmDriverHealth.c MdeModulePkg:Prevent the BmRepairAllControllers routine in an infinite loop 2016-06-03 15:57:47 +08:00
BmHotkey.c MdeModulePkg/UefiBootManagerLib: BmGetActiveConsoleIn code cleanup 2016-03-31 09:21:05 +08:00
BmLoadOption.c MdeModulePkg/UefiBootManagerLib: Expose *GetLoadOptionBuffer() API 2016-05-04 08:47:34 +08:00
BmMisc.c MdeModulePkg/UefiBootManagerLib: Fix data in MemoryTypeInformation 2016-06-27 10:38:09 +08:00
BmPerformance.c MdeModulePkg UefiBootManagerLib: Do not assume perf entry count has no change 2015-09-30 04:29:50 +00:00
InternalBm.h MdeModulePkg/UefiBootManagerLib: Expose *GetLoadOptionBuffer() API 2016-05-04 08:47:34 +08:00
UefiBootManagerLib.inf MdeModulePkg: Correct the usage of gPerformanceProtocolGuid in inf 2016-06-12 12:56:23 +08:00
UefiBootManagerLib.uni MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00