On Sep 5, 2013, at 9:39 AM, "Kinney, Michael D" <michael.d.kin...@intel.com>
wrote:
> Sorin,
>
> Depending on the APIs that are called between each call to AllocatePages(),
> memory may be allocated or freed which may cause the memory map to change.
>
> You need to make sure there are no API calls that either directly or
> indirectly allocate memory between the call to GetMemoryMap() and the call(s)
> to AllocatePages().
>
> Even doing an action like printing a message to the console could allocate
> some memory.
>
> If actions that allocate memory can not be avoided, you might consider
> calling GetMemoryMap() again right before each call to AllocatePages().
>
While this may happen to work with the current implementation, I don't think it
has to. I don't think there is any restriction in the spec that AllocatePages()
can't track pages with pool allocations.
I would also point out that memory allocation services can be called at TPL <=
TPL_NOTIFY, and other services like the Protocol Handler Services can also be
called at <= TPL_NOTIFY, so a memory allocation could happen in the background.
On a debug build an event handler could have a debug print, that could require
a memory allocation....
The only way to get THE exact memory map is the process described in
ExitBootServices() that utilized the MapKey. The 1st ExitBootServices() should
shutdown all the events, so that is why it works.
Thanks,
Andrew Fish
> Best regards,
>
> Mike
>
> From: Sorin Vinturis [mailto:sorin.vintu...@yahoo.com]
> Sent: Thursday, September 05, 2013 1:15 AM
> To: Gao, Liming; edk2-devel@lists.sourceforge.net
> Subject: Re: [edk2] AllocatePages returns EFI_NOT_FOUND
>
> Liming,
>
> I am allocating memory iterative in each of the free memory blocks retrieved
> from the memory map, including 8000, 59000, 100000, 1100000, 14610000,
> 20200000, and allocation succeeds. The only problem is at 131D0000 address.
>
> From what I observed, every new memory request is allocated starting with
> 131D0000 address. So the problem might be due to a memory leak or an
> allocated buffer which was allocated after the memory map was retrieved and
> not yet freed. This is why the AllocatePages function returns EFI_NOT_FOUND,
> because the requested page is not free/available anymore.
>
> Thanks,
> Sorin
>
> From: "Gao, Liming" <liming....@intel.com>
> To: Sorin Vinturis <sorin.vintu...@yahoo.com>;
> "edk2-devel@lists.sourceforge.net" <edk2-devel@lists.sourceforge.net>
> Sent: Thursday, 5 September 2013, 6:02
> Subject: RE: [edk2] AllocatePages returns EFI_NOT_FOUND
>
> Sorin:
> When your Shell Application is loaded, it will take some memory. Its taken
> memory may conflict with your allocated memory.
>
> Have you tried to allocate other free memory range, such as 14610000,
> 20200000?
>
> Thanks
> Liming
> From: Sorin Vinturis [mailto:sorin.vintu...@yahoo.com]
> Sent: Wednesday, September 04, 2013 9:51 PM
> To: Gao, Liming; edk2-devel@lists.sourceforge.net
> Subject: Re: [edk2] AllocatePages returns EFI_NOT_FOUND
>
> Hi Liming,
>
> Yes, GetMemoryMap function sees that memory pointed by PhysicaAddress as free
> - marked as EfiConventionalMemory -,
> but when trying to allocate memory there, using the AllocatePages function,
> it fails with EFI_NOT_FOUND status.
>
> Here is the memory map I am retrieving:
> PhysicalAddress NoOfPages
> 8000
> 80
> 59000 6
> 100000 3840
> 1100000 28416
> 131D0000 454
> 14610000 47600
> 20200000 130564
> 40005000 564399
> 100000000 189952
> The problem appears when I try to allocate memory at 131D0000 address.
>
> Thanks,
> Sorin
>
> From: "Gao, Liming" <liming....@intel.com>
> To: Sorin Vinturis <sorin.vintu...@yahoo.com>;
> "edk2-devel@lists.sourceforge.net" <edk2-devel@lists.sourceforge.net>
> Sent: Wednesday, 4 September 2013, 12:37
> Subject: RE: [edk2] AllocatePages returns EFI_NOT_FOUND
>
> Hi:
> Allocation requests of Type AllocateAddress means allocate pages at the
> address pointed to by Memory on input. If the requested pages could not be
> found, EFI_NOT_FOUND will return.
>
> For your issue, the memory described by PhysicalAddress should not be
> available. So, EFI_NOT_FOUND returns. Do you mean that you call
> GetMemoryMap() and see the memory pointed by PhysicalAddress is free? If yes,
> could you show the free memory layout and PhysicalAddress value?
>
> Thanks
> Liming
> From: Sorin Vinturis [mailto:sorin.vintu...@yahoo.com]
> Sent: Wednesday, September 04, 2013 3:43 PM
> To: edk2-devel@lists.sourceforge.net
> Subject: [edk2] AllocatePages returns EFI_NOT_FOUND
>
> Hi all,
>
> I have an UEFI application in which I try to allocate memory of type
> EfiBootServicesData, using the AllocatePages function. In order to find the
> next available (unallocated) memory space - of type EfiConventionalMemory - I
> use the GetMemoryMap function. The problem which I'm facing is that when I
> try to allocate memory at one particular address, the AllocatePages function
> returns EFI_NOT_FOUND. This issue happens every time, when the application is
> executed, and at the exact memory address; for all remaining free memory
> blocks the allocation performs without problems.
>
> I am calling the allocation function as follows:
> gBS->AllocatePages ( AllocateAddress, EfiBootServicesData, NumberOfPages,
> &PhysicalAddress );
> Is this scenario a memory access error?
> How should I interpret this?
>
> Thanks,
> Sorin
>
>
>
> ------------------------------------------------------------------------------
> Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
> Discover the easy way to master current and previous Microsoft technologies
> and advance your career. Get an incredible 1,500+ hours of step-by-step
> tutorial videos with LearnDevNow. Subscribe today and save!
> http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk_______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel