MdeModulePkg/Bds: MemoryTypeInformation excludes boot option mem use

The patch re-orders the sequences by putting updating memory type
information before loading the boot option so that the reserved
memory usage by HTTP RAM disk boot can be excluded by the memory
type information updating.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Sunny Wang <sunnywang@hpe.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
Ruiyu Ni
2016-07-05 17:46:07 +08:00
parent eab4016490
commit 3a986a353d
3 changed files with 19 additions and 40 deletions

View File

@ -1569,7 +1569,6 @@ 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;
@ -1643,8 +1642,24 @@ EfiBootManagerBoot (
PERF_START_EX (gImageHandle, "BdsAttempt", NULL, 0, (UINT32) OptionNumber); PERF_START_EX (gImageHandle, "BdsAttempt", NULL, 0, (UINT32) OptionNumber);
// //
// 5. Load EFI boot option to ImageHandle // 5. Adjust the different type memory page number just before booting
// and save the updated info into the variable for next boot to use
// //
BmSetMemoryTypeInformationVariable (
(BOOLEAN) ((BootOption->Attributes & LOAD_OPTION_CATEGORY) == LOAD_OPTION_CATEGORY_BOOT)
);
//
// 6. Load EFI boot option to ImageHandle
//
DEBUG_CODE_BEGIN ();
if (BootOption->Description == NULL) {
DEBUG ((DEBUG_INFO | DEBUG_LOAD, "[Bds]Booting from unknown device path\n"));
} else {
DEBUG ((DEBUG_INFO | DEBUG_LOAD, "[Bds]Booting %s\n", BootOption->Description));
}
DEBUG_CODE_END ();
ImageHandle = NULL; ImageHandle = NULL;
RamDiskDevicePath = NULL; RamDiskDevicePath = NULL;
if (DevicePathType (BootOption->FilePath) != BBS_DEVICE_PATH) { if (DevicePathType (BootOption->FilePath) != BBS_DEVICE_PATH) {
@ -1700,28 +1715,6 @@ EfiBootManagerBoot (
} }
} }
//
// 6. Adjust the different type memory page number just before booting
// and save the updated info into the variable for next boot to use
//
if (RamDiskDevicePath == NULL) {
RamDiskSizeInPages = 0;
} else {
BmGetRamDiskMemoryInfo (RamDiskDevicePath, &RamDiskSizeInPages);
}
BmSetMemoryTypeInformationVariable (
(BOOLEAN) ((BootOption->Attributes & LOAD_OPTION_CATEGORY) == LOAD_OPTION_CATEGORY_BOOT),
RamDiskSizeInPages
);
DEBUG_CODE_BEGIN();
if (BootOption->Description == NULL) {
DEBUG ((DEBUG_INFO | DEBUG_LOAD, "[Bds]Booting from unknown device path\n"));
} else {
DEBUG ((DEBUG_INFO | DEBUG_LOAD, "[Bds]Booting %s\n", BootOption->Description));
}
DEBUG_CODE_END();
// //
// Check to see if we should legacy BOOT. If yes then do the legacy boot // Check to see if we should legacy BOOT. If yes then do the legacy boot
// Write boot to OS performance data for Legacy boot // Write boot to OS performance data for Legacy boot

View File

@ -130,13 +130,10 @@ BmMatchDevicePaths (
@param Boot TRUE if current boot option belongs to boot @param Boot TRUE if current boot option belongs to boot
category instead of 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;
@ -229,14 +226,6 @@ BmSetMemoryTypeInformationVariable (
continue; continue;
} }
//
// Do not count the reserved memory occupied by RAM Disk.
//
if ((CurrentMemoryTypeInformation[Index1].Type == EfiReservedMemoryType) &&
(CurrentMemoryTypeInformation[Index1].NumberOfPages > ((UINT32) RamDiskSizeInPages))) {
CurrentMemoryTypeInformation[Index1].NumberOfPages -= (UINT32) 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

@ -207,13 +207,10 @@ BmWriteBootToOsPerformanceData (
@param Boot TRUE if current boot option belongs to boot @param Boot TRUE if current boot option belongs to boot
category instead of 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
); );
/** /**