public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Zeng, Star" <star.zeng@intel.com>
To: Wasim Khan <wasim.khan@nxp.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Gao, Liming" <liming.gao@intel.com>, "Zeng, Star" <star.zeng@intel.com>
Subject: Re: Memory space entry is not removed after calling FreeMemorySpace and RemoveMemorySpace
Date: Mon, 8 Jan 2018 01:07:02 +0000	[thread overview]
Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103B9F8CA8@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <DB6PR0401MB23420B047F070A970F4BE2AD90120@DB6PR0401MB2342.eurprd04.prod.outlook.com>

Hi Wasim,

Got the point.

Yes, gDS->AddMemorySpace should return success normally, you may can assume it.
Or a little tricky method if you only want the memory space to be used by OS kernel, but not post, I think you may can hook the gBS->GetMemoryMap() with your own GetMemoryMap() function, it will call original GetMemoryMap() function, and then append one entry for the memory space you want to add for OS kernel.



Thanks,
Star
-----Original Message-----
From: Wasim Khan [mailto:wasim.khan@nxp.com] 
Sent: Monday, January 8, 2018 3:03 AM
To: Zeng, Star <star.zeng@intel.com>; edk2-devel@lists.01.org
Cc: Gao, Liming <liming.gao@intel.com>
Subject: RE: Memory space entry is not removed after calling FreeMemorySpace and RemoveMemorySpace

Hi Star,

Thank you for your reply.

I cannot add memory space as EfiGcdMemoryTypeReserved because for my use case, i am exposing memory space of an extended DDR memory to kernel. If I add this memory space as EfiGcdMemoryTypeReserved, then linux is not able to allocate memory from this region to applications (a simple application requesting memory from this region fails). So I have to add the memory space as EfiGcdMemoryTypeSystemMemory only.

> What is the usage that the memory space needs to be added first and removed later?
No specific use case, I am checking the status of 'gDS->AddMemorySpace' and 'gDS->SetMemorySpaceAttributes', if any of these calls fails, I want to remove the added memory space. Ideally it should work.



Regards,
Wasim



> -----Original Message-----
> From: Zeng, Star [mailto:star.zeng@intel.com]
> Sent: Friday, January 05, 2018 4:35 PM
> To: Wasim Khan <wasim.khan@nxp.com>; edk2-devel@lists.01.org
> Cc: Zeng, Star <star.zeng@intel.com>; Gao, Liming 
> <liming.gao@intel.com>
> Subject: RE: Memory space entry is not removed after calling 
> FreeMemorySpace and RemoveMemorySpace
> 
> PI spec has clear description below in AddMemorySpace().
> 
> "If the memory range specified by BaseAddress and Length is of type 
> EfiGcdMemoryTypeSystemMemory or EfiGcdMemoryTypeMoreReliable, then the 
> memory range may be *automatically allocated for use by the UEFI 
> memory services*."
> 
> But PI spec has no clear description about removing the use from the 
> UEFI memory services in FreeMemorySpace() and RemoveMemorySpace().
> I think it is very hard (may be not possible) as the added memory 
> space may have been used by UEFI memory (page) services for drivers 
> after the memory space is added by AddMemorySpace().
> 
> What is the usage that the memory space needs to be added first and 
> removed later?
> Could the memory space be added as EfiGcdMemoryTypeReserved type 
> instead of EfiGcdMemoryTypeSystemMemory type?
> 
> 
> Thanks,
> Star
> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of 
> Wasim Khan
> Sent: Friday, January 5, 2018 5:59 PM
> To: edk2-devel@lists.01.org
> Subject: [edk2] Memory space entry is not removed after calling 
> FreeMemorySpace and RemoveMemorySpace
> 
> Hi All,
> 
> I am facing a problem that if a add a memory space using 'gDS-
> >AddMemorySpace'  and then remove it using 'gDS->FreeMemorySpace'
> followed by 'gDS->RemoveMemorySpace'.
> I can still see the entry of added memory space in the table shown by 'memmap'
> command.
> 
> I enabled DEBUG_GCD and as per logs , the entry is removed from 
> GcdMemorySpaceMap , but when I run 'memmap' command which gets the 
> memory map using 'gBS->GetMemoryMap', I can see that entry for the 
> added memory space is still present. Steps and Logs are below for 
> reference
> 
> Do I need to perform any other steps in order to cleanly remove the 
> memory space entry ?
> 
> Regards,
> Wasim
> 
> 
> 
> Below are the steps and GCD debug logs.
> Steps 1 : Add a memory space . We can see that an entry from system 
> memory is added.
> 
> Status = gDS->AddMemorySpace (
>                                             EfiGcdMemoryTypeSystemMemory,
>                                             FixedPcdGet64(PcdSystemMemoryExBase),
>                                             SystemMemoryExSize,
>                                             EFI_MEMORY_WC | EFI_MEMORY_WT |
>                                             EFI_MEMORY_WB
>                                             );
> 
>                Logs:
> 
> GCD:AddMemorySpace(Base=0000008080000000,Length=0000000380000000)
>                               GcdMemoryType   = SystemMem
>                               Capabilities    = 000000000000000E
> CoreConvertSpace 774
>                               Status = Success
> GCDMemType Range                             Capabilities     Attributes
> ========== ================================= ================ 
> ================
> NonExist   0000000000000000-000000009FFFFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000A0000000-00000000DFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   00000000E0000000-00000000E01BFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000E01C0000-00000000FFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   0000000100000000-000000807FFFFFFF 0000000000000000
> 0000000000000000
> SystemMem  0000008080000000-00000083FFFFFFFF 800000000000000E
> 0000000000000000
> NonExist   0000008400000000-0000FFFFFFFFFFFF 0000000000000000
> 0000000000000000
> 
> GCD:AllocateMemorySpace(Base=0000008080000000,Length=00000003800000
> 00)
>   GcdAllocateType = AtAddress
>   GcdMemoryType   = SystemMem
>   Alignment       = 0000000000001000
>   ImageHandle     = FED1FF98
>   DeviceHandle    = 0
>   Status = Success  (BaseAddress = 0000008080000000)
> GCDMemType Range                             Capabilities     Attributes
> ========== ================================= ================ 
> ================
> NonExist   0000000000000000-000000009FFFFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000A0000000-00000000DFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   00000000E0000000-00000000E01BFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000E01C0000-00000000FFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   0000000100000000-000000807FFFFFFF 0000000000000000
> 0000000000000000
> SystemMem  0000008080000000-00000083FFFFFFFF 800000000000000E
> 0000000000000000*
> NonExist   0000008400000000-0000FFFFFFFFFFFF 0000000000000000
> 0000000000000000
> 
> 
> Step2: Free the memory space
>                Status = gDS->FreeMemorySpace (
>                FixedPcdGet64(PcdSystemMemoryExBase),
>                SystemMemoryExSize
>                );
> 
>                Logs:
> 
> GCD:FreeMemorySpace(Base=0000008080000000,Length=0000000380000000)
> Status = Success
> GCDMemType Range                             Capabilities     Attributes
> ========== ================================= ================ 
> ================
> NonExist   0000000000000000-000000009FFFFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000A0000000-00000000DFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   00000000E0000000-00000000E01BFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000E01C0000-00000000FFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   0000000100000000-000000807FFFFFFF 0000000000000000
> 0000000000000000
> SystemMem  0000008080000000-00000083FFFFFFFF 800000000000000E
> 0000000000000000
> NonExist   0000008400000000-0000FFFFFFFFFFFF 0000000000000000
> 0000000000000000
> 
> 
> Step3: Remove the memory space , As we can see that entry 'SystemMem 
> 0000008080000000-00000083FFFFFFFF' is removed.
>                Status = gDS->RemoveMemorySpace (
>                FixedPcdGet64(PcdSystemMemoryExBase),
>                SystemMemoryExSize
>                );
> 
>                Logs:
> 
> GCD:RemoveMemorySpace(Base=0000008080000000,Length=00000003800000
> 00)
> Status = Success
> GCDMemType Range                             Capabilities     Attributes
> ========== ================================= ================ 
> ================
> NonExist   0000000000000000-000000009FFFFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000A0000000-00000000DFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   00000000E0000000-00000000E01BFFFF 0000000000000000
> 0000000000000000
> SystemMem  00000000E01C0000-00000000FFFFFFFF 800000000000000E
> 0000000000000008*
> NonExist   0000000100000000-0000FFFFFFFFFFFF 0000000000000000
> 0000000000000000
> 
> Step4 : Run the 'memmap' command. As we can see that entry is still present.
>                Shell> memmap
> Type       Start            End              # Pages          Attributes
> Available  00000000A0000000-00000000DFFFFFFF 0000000000040000 
> 000000000000000E Available  00000000E01C0000-00000000E53C0FFF
> 0000000000005201 000000000000000E
> BS_Data    00000000E53C1000-00000000E5D99FFF 00000000000009D9
> 000000000000000E
> ...
> Available  0000008080000000-00000083FFFFFFFF 0000000000380000 
> 000000000000000E
>                               ...
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flis
> ts.01
> .org%2Fmailman%2Flistinfo%2Fedk2-
> devel&data=02%7C01%7Cwasim.khan%40nxp.com%7C2be1d44f45084e831b92
> 08d5542c1b7f%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636507
> 470804351379&sdata=B4v0K9MGZEWiSNYinRtWPGB%2F85biiU5iqpHmAE3YxsQ
> %3D&reserved=0


  reply	other threads:[~2018-01-08  1:01 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-05  9:59 Memory space entry is not removed after calling FreeMemorySpace and RemoveMemorySpace Wasim Khan
2018-01-05 11:04 ` Zeng, Star
2018-01-07 19:03   ` Wasim Khan
2018-01-08  1:07     ` Zeng, Star [this message]
2018-01-08 12:48       ` Wasim Khan
2018-01-08 13:45         ` Zeng, Star
2018-01-09  6:58           ` Wasim Khan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0C09AFA07DD0434D9E2A0C6AEB0483103B9F8CA8@shsmsx102.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox