MdeModulePkg/Bds: Memory Bins don't count the memory used by RAM Disk

MemoryTypeInformation don't count the reserved memory used by RAM Disk,
but it still check all types of memory and do reset when any type
of memory size changes.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Siyuan Fu <siyuan.fu@intel.com>
Reviewed-by: Samer El-Haj-Mahmoud <elhaj@hpe.com>
This commit is contained in:
Ni, Ruiyu
2016-03-29 18:32:13 +08:00
committed by Ruiyu Ni
parent 339ae051f6
commit 024bdafc68
3 changed files with 27 additions and 9 deletions

View File

@@ -1567,6 +1567,7 @@ EfiBootManagerBoot (
UINTN FileSize; UINTN FileSize;
EFI_BOOT_LOGO_PROTOCOL *BootLogo; EFI_BOOT_LOGO_PROTOCOL *BootLogo;
EFI_EVENT LegacyBootEvent; EFI_EVENT LegacyBootEvent;
UINTN RamDiskSizeInPages;
if (BootOption == NULL) { if (BootOption == NULL) {
return; return;
@@ -1701,8 +1702,10 @@ EfiBootManagerBoot (
// 6. Adjust the different type memory page number just before booting // 6. Adjust the different type memory page number just before booting
// and save the updated info into the variable for next boot to use // and save the updated info into the variable for next boot to use
// //
BmGetRamDiskMemoryInfo (RamDiskDevicePath, &RamDiskSizeInPages);
BmSetMemoryTypeInformationVariable ( BmSetMemoryTypeInformationVariable (
(BOOLEAN) ((BootOption->Attributes & LOAD_OPTION_CATEGORY) == LOAD_OPTION_CATEGORY_BOOT) (BOOLEAN) ((BootOption->Attributes & LOAD_OPTION_CATEGORY) == LOAD_OPTION_CATEGORY_BOOT),
RamDiskSizeInPages
); );
DEBUG_CODE_BEGIN(); DEBUG_CODE_BEGIN();

View File

@@ -124,14 +124,18 @@ BmMatchDevicePaths (
This routine adjust the memory information for different memory type and This routine adjust the memory information for different memory type and
save them into the variables for next boot. It resets the system when save them into the variables for next boot. It resets the system when
memory information is updated and the current boot option belongs to memory information is updated and the current boot option belongs to
boot category instead of application category. boot category instead of application category. It doesn't count the
reserved memory occupied by RAM Disk.
@param Boot TRUE if current boot option belongs to boot category instead of @param Boot TRUE if current boot option belongs to boot
application category. category instead of application category.
@param RamDiskSizeInPages Reserved memory size in pages occupied by
RAM Disk.
**/ **/
VOID VOID
BmSetMemoryTypeInformationVariable ( BmSetMemoryTypeInformationVariable (
IN BOOLEAN Boot IN BOOLEAN Boot,
IN UINTN RamDiskSizeInPages
) )
{ {
EFI_STATUS Status; EFI_STATUS Status;
@@ -224,6 +228,13 @@ BmSetMemoryTypeInformationVariable (
continue; continue;
} }
//
// Do not count the reserved memory occupied by RAM Disk.
//
if (CurrentMemoryTypeInformation[Index1].Type == EfiReservedMemoryType) {
CurrentMemoryTypeInformation[Index1].NumberOfPages -= RamDiskSizeInPages;
}
// //
// Previous is the number of pages pre-allocated // Previous is the number of pages pre-allocated
// Current is the number of pages actually needed // Current is the number of pages actually needed

View File

@@ -202,14 +202,18 @@ BmWriteBootToOsPerformanceData (
This routine adjust the memory information for different memory type and This routine adjust the memory information for different memory type and
save them into the variables for next boot. It resets the system when save them into the variables for next boot. It resets the system when
memory information is updated and the current boot option belongs to memory information is updated and the current boot option belongs to
boot category instead of application category. boot category instead of application category. It doesn't count the
reserved memory occupied by RAM Disk.
@param Boot TRUE if current boot option belongs to boot category instead of @param Boot TRUE if current boot option belongs to boot
application category. category instead of application category.
@param RamDiskSizeInPages Reserved memory size in pages occupied by
RAM Disk.
**/ **/
VOID VOID
BmSetMemoryTypeInformationVariable ( BmSetMemoryTypeInformationVariable (
IN BOOLEAN Boot IN BOOLEAN Boot,
IN UINTN RamDiskSizeInPages
); );
/** /**