> On Aug 8, 2018, at 10:31 AM, Rafael Machado 
> <rafaelrodrigues.mach...@gmail.com> wrote:
> 
> Hi everyone
> 
> One question that was not answered and that could help us, is about skipping 
> the MemoryTypeInfo variable usage.
> Is there any way to do this skip at a UEFI App ?
> Simple erasing the MemoryTypeInfo  var seems a little to violent from our 
> perspective. What do you think?
> 
> Seems the system we're having this problem has some inconsistency when 
> filling the MemoryTypeInfo  var before exiting the previous boot, and seems 
> to consider the BootServices memory type also to be stored at the var. Does 
> anyone remember of this kind of issue on some system in the past?
> 

No we do that all the time to remove fragmentation from the memory map and it 
does not 

Thanks,

Andrew Fish

> Thanks and Regards
> Rafael
> 
> Em qua, 8 de ago de 2018 às 08:55, Rafael Machado 
> <rafaelrodrigues.mach...@gmail.com 
> <mailto:rafaelrodrigues.mach...@gmail.com>> escreveu:
> Hi Jiewen
> 
> Thanks for highlighting this. 
> Just checked and we just add the Reserved/Acpi/Runtime types.
> 
> Seems the guess that this would be related to the MemoryTypeInfo var is not 
> the correct way to follow.
> 
> We'll keep working on it, maybe asking more questions to the community in 
> future.
> Thank you all for the help and guidance! 
> In case someone has any comment or idea, please feel free to share.
> 
> Rafael  
> 
>   
> 
> Em ter, 7 de ago de 2018 às 19:42, Yao, Jiewen <jiewen....@intel.com 
> <mailto:jiewen....@intel.com>> escreveu:
> Hi
> 
> It is unclear to me that which type you have put to MemoryTypeInfo table.
> 
>  
> 
> By design, we only need put Reserved/Acpi/Runtime, which should be quite 
> small.
> 
>  
> 
> Do you put any other type into MemoryTypeInfo table?
> 
>  
> 
> Thank you
> 
> Yao Jiewen
> 
>   <>
>  <>From: Rafael Machado [mailto:rafaelrodrigues.mach...@gmail.com 
> <mailto:rafaelrodrigues.mach...@gmail.com>] 
> Sent: Wednesday, August 8, 2018 3:12 AM
> To: Laszlo Ersek <ler...@redhat.com <mailto:ler...@redhat.com>>
> Cc: Andrew Fish <af...@apple.com <mailto:af...@apple.com>>; Ni, Ruiyu 
> <ruiyu...@intel.com <mailto:ruiyu...@intel.com>>; edk2-devel@lists.01.org 
> <mailto:edk2-devel@lists.01.org>; Yao, Jiewen <jiewen....@intel.com 
> <mailto:jiewen....@intel.com>>
> 
> 
> Subject: Re: [edk2] Question about memory map entries
> 
> 
>  
> 
> Hi everyone
> 
>  
> 
> Based on the information shared by the members, the understanding is that the 
> current state of the system may impact fuutre boots. 
> 
> The problem is that in my case, due to specific requirements, before booting 
> we need to stress the system's memory, allocating a big amount of memory and 
> doing some memory validation algorithms.
> 
> So the high number of allocations and frees is by choice and not by mistakes.
> 
>  
> 
> Considering this. Is there any way to bypass the MemoryTypeInformation var 
> store actions?
> 
>  
> 
> Thanks and Regards
> 
> Rafael 
> 
>  
> 
> Em qui, 2 de ago de 2018 às 17:39, Laszlo Ersek <ler...@redhat.com 
> <mailto:ler...@redhat.com>> escreveu:
> 
> On 08/02/18 21:18, Rafael Machado wrote:
> > Just found something interesting.
> > Based on the logs from the serial port.
> > 
> > This system works fine:
> > 
> > "PeiInstallPeiMemory MemoryBegin 0x93D50000, MemoryLength 0xA2B0000
> > Temp Stack : BaseAddress=0x400000 Length=0x80000
> > Temp Heap  : BaseAddress=0x480000 Length=0x80000
> > Total temporary memory:    1048576 bytes.
> >   temporary memory stack ever used: 524288 bytes.
> >   temporary memory heap used:       63304 bytes.
> > Old Stack size 524288, New stack size 524288
> > Stack Hob: BaseAddress=0x93D50000 Length=0x80000
> > Heap Offset = 0x93950000 Stack Offset = 0x93950000
> > Loading PEIM at 0x0009DFF4000 EntryPoint=0x0009DFF4260 PeiCore.efi"
> > ...
> > "CoreInitializeMemoryServices:
> >   BaseAddress - 0x93DE1000 Length - 0x8135000 MinimalMemorySizeNeeded -
> > 0x5AC0000"
> > 
> > This one is bricked:
> > 
> > "PeiInstallPeiMemory MemoryBegin 0x9C9000, MemoryLength 0x9D637000
> > Temp Stack : BaseAddress=0x400000 Length=0x80000
> > Temp Heap  : BaseAddress=0x480000 Length=0x80000
> > Total temporary memory:    1048576 bytes.
> >   temporary memory stack ever used: 524288 bytes.
> >   temporary memory heap used:       63304 bytes.
> > Old Stack size 524288, New stack size 524288
> > Stack Hob: BaseAddress=0x9C9000 Length=0x80000
> > Heap Offset = 0x5C9000 Stack Offset = 0x5C9000
> > Loading PEIM at 0x0009DFF4000 EntryPoint=0x0009DFF4260 PeiCore.efi"
> > ...
> > "CoreInitializeMemoryServices:
> >   BaseAddress - 0x0 Length - 0x0 MinimalMemorySizeNeeded - 0x98E47000
> > "
> > ...
> > "ASSERT_EFI_ERROR (Status = Out of Resources)
> > ASSERT [DxeCore] ...\MdeModulePkg\Core\Dxe\DxeMain\DxeMain.c(299):
> > !EFI_ERROR (Status)
> > AllocatePoolPages: failed to allocate 1 pages
> > AllocatePool: failed to allocate 120 bytes"
> 
> The location and the size of the permanent PEI RAM are extremely
> different between the two cases.
> 
> - Functional system:
> 
>   PeiInstallPeiMemory MemoryBegin 0x93D50000, MemoryLength 0xA2B0000
> 
>   Base address is ~2365 MB, size is ~162 MB
> 
> - Unbootable system:
> 
>   PeiInstallPeiMemory MemoryBegin 0x9C9000, MemoryLength 0x9D637000
> 
>   Base address is ~9 MB, size is ~2518 MB
> 
> The numbers in the second (unbootable) case look very unusual to me. The
> permanent PEI RAM is usually tens or (maybe) hundreds of megabytes in
> size, and tends to start much higher (usually as high as possible under
> 4GB, on x86 anyway).
> 
> 
> Consult the following sections in the PI spec (v1.6), volume 3:
> 
> - 4.3 Example HOB Producer Phase Memory Map and Usage
> - 5.3 PHIT HOB
> 
> The CoreInitializeMemoryServices() function searches the HOB list for a
> tested system memory "Resource Descriptor HOB that contains PHIT range
> EfiFreeMemoryBottom..EfiFreeMemoryTop". (Quoted a comment from the code.)
> 
> Basically, the function locates the system RAM HOB that contains the
> free permanent PEI RAM.
> 
> If the search fails, then we trip an ASSERT(). This does not happen in
> your case, the search succeeds.
> 
> If the search succeeds, then the DXE core will try to initialize itself
> in one of three locations in the RAM area defined by that HOB. In
> descending preference order: above the permanent PEI RAM, within the
> free permanent PEI RAM, and below the permanent PEI RAM.
> 
> There is also a fallback (a fourth option) when even the third one from
> before proves too small -- the function will then search again for a
> memory descriptor HOB, top-down, avoiding the one HOB that it found
> earlier to contain the permanent PEI RAM (because, all three options for
> that have already failed, see above).
> 
> As the result of this search, your broken system finishes with:
> 
> BaseAddress - 0x0 Length - 0x0 MinimalMemorySizeNeeded - 0x98E47000
> 
> "MinimalMemorySizeNeeded" includes the previous measurements from
> MemoryTypeInformation, and the concrete value is very strange -- it
> seems to imply that you need ~2446 MB for initializing the DXE core.
> It's not surprising that the function cannot fit that anywhere, in
> either of the four options described above.
> 
> If your system has more (high) RAM to spare, try to install a resource
> descriptor HOB for it. Then the fourth option might succeed.
> 
> Honestly though, those permanent PEI RAM values (base address at ~9 MB,
> size ~2518 MB) look super fishy to me in the first place. Something must
> be wrong in the PEI phase with the calculation of those parameters.
> Possibly, the memory resource descriptor HOBs could be wrong too.
> 
> 
> ... Considering commit 3a05b13106d1 ("MdeModulePkg DxeCore: Take the
> range in resource HOB for PHIT as higher priority", 2015-09-18), it writes,
> 
> "Also let the minimal memory size needed include the total memory bin
> size needed to make sure memory bin could be allocated successfully."
> 
> This is the reason "MinimalMemorySizeNeeded" includes
> MemoryTypeInformation. Normally, MemoryTypeInformation tracks long-term
> maximums that are necessary for booting an OS without memory map
> fragmentation (including S4 resume). However, if you have a UEFI
> application that allocates huge amounts of memory, and then *doesn't*
> boot an OS, then it could invalidate MemoryTypeInformation. Because, the
> maximums that MemoryTypeInformation represents, no longer reflect
> requirements for booting an OS. In that case, the
> "MinimalMemorySizeNeeded" assumption (from commit 3a05b13106d1), for
> initializing the DXE core, could be invalid too.
> 
> Thanks
> Laszlo
> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to