Sunny, Under what circumstance the memory usage statistics don't count the allocation?
Regards, Ray >-----Original Message----- >From: Sunny Wang [mailto:sunnyw...@hpe.com] >Sent: Monday, June 20, 2016 4:03 PM >To: edk2-devel@lists.01.org >Cc: el...@hpe.com; Ni, Ruiyu <ruiyu...@intel.com>; Sunny Wang ><sunnyw...@hpe.com> >Subject: [PATCH] MdeModulePkg/UefiBootManagerLib: Fix for wrong data updated >into MemoryTypeInformation variable > >After booting a large-size ISO RAM disk (HTTP boot option pointing to a ISO >file) and rebooting the 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 skip updating current memory usage statistics >(CurrentMemoryTypeInformation) if system allocates a >memory buffer with a large number of pages. For this case, the problematic BDS >code block in >BmSetMemoryTypeInformationVariable() function will get a >CurrentMemoryTypeInformation[Index1].NumberOfPages value >which is not updated with large-size ISO RAM disk usage by Memory page >management (it keeps original value without RAM >disk size. For example, 0x9000) and gets RamDiskSizeInPages (ISO RAM disk >size) in a big value (For example, 0xC0000). Then, >the result will become a very big value (0xFFF49000) to be updated into >MemoryTypeInformation variable to cause the >ASSERT in next boot. > >ASSERT [DxeCore] u:\MdeModulePkg\Core\Dxe\Gcd\Gcd.c(2273): Length >= >MinimalMemorySizeNeeded > >For fixing this issue, we need to add a check to the problematic BDS code >block for checking that NumberOfPages is bigger >than RamDiskSizeInPages to prevent BDS core code updating wrong data (very big >value) to MemoryTypeInformation variable >in this case. > >Contributed-under: TianoCore Contribution Agreement 1.0 >Signed-off-by: Sunny Wang <sunnyw...@hpe.com> >--- > MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > >diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c >b/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c >index 29c1bfa..93502fe 100644 >--- a/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c >+++ b/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c >@@ -2,6 +2,7 @@ > Misc library functions. > > Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR> >+(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found at >@@ -231,7 +232,8 @@ BmSetMemoryTypeInformationVariable ( > // > // Do not count the reserved memory occupied by RAM Disk. > // >- if (CurrentMemoryTypeInformation[Index1].Type == EfiReservedMemoryType) { >+ if ((CurrentMemoryTypeInformation[Index1].Type == EfiReservedMemoryType) >&& >+ (CurrentMemoryTypeInformation[Index1].NumberOfPages > ((UINT32) >RamDiskSizeInPages))) { > CurrentMemoryTypeInformation[Index1].NumberOfPages -= (UINT32) > RamDiskSizeInPages; > } > >-- >2.5.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel