diff mbox series

[edk2,10/15] ArmVirtPkg: introduce ArmVirtMemInfoLib library class

Message ID 20171117160913.17292-11-ard.biesheuvel@linaro.org
State Superseded
Headers show
Series ArmVirtPkg: get rid of ArmPlatformLib | expand

Commit Message

Ard Biesheuvel Nov. 17, 2017, 4:09 p.m. UTC
As part of the effort to get rid of ArmPlatformLib (which incorporates
far too many duties in a single library), introduce ArmVirtMemInfoLib
which will be invoked by our ArmVirtMemoryInitPeiLib implementation to
get a description of the virtual address space. This will allow us to
remove this functionality from ArmPlatformLib later, or, in the case of
ArmVirtXen and ArmVirtQemuKernel, drop ArmPlatformLib altogether.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 ArmVirtPkg/ArmVirtPkg.dec                      |  3 ++
 ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h | 39 ++++++++++++++++++++
 2 files changed, 42 insertions(+)

-- 
2.11.0

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

Comments

Laszlo Ersek Nov. 21, 2017, 4:23 p.m. UTC | #1
On 11/17/17 17:09, Ard Biesheuvel wrote:
> As part of the effort to get rid of ArmPlatformLib (which incorporates

> far too many duties in a single library), introduce ArmVirtMemInfoLib

> which will be invoked by our ArmVirtMemoryInitPeiLib implementation to

> get a description of the virtual address space. This will allow us to

> remove this functionality from ArmPlatformLib later, or, in the case of

> ArmVirtXen and ArmVirtQemuKernel, drop ArmPlatformLib altogether.

> 

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

>  ArmVirtPkg/ArmVirtPkg.dec                      |  3 ++

>  ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h | 39 ++++++++++++++++++++

>  2 files changed, 42 insertions(+)

> 

> diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec

> index a8603e1b80e5..8f656fd2739d 100644

> --- a/ArmVirtPkg/ArmVirtPkg.dec

> +++ b/ArmVirtPkg/ArmVirtPkg.dec

> @@ -30,6 +30,9 @@ [Defines]

>  [Includes.common]

>    Include                        # Root include for the package

>  

> +[LibraryClasses]

> +  ArmVirtMemInfoLib|Include/Library/ArmVirtMemInfoLib.h

> +

>  [Guids.common]

>    gArmVirtTokenSpaceGuid = { 0x0B6F5CA7, 0x4F53, 0x445A, { 0xB7, 0x6E, 0x2E, 0x36, 0x5B, 0x80, 0x63, 0x66 } }

>    gEarlyPL011BaseAddressGuid       = { 0xB199DEA9, 0xFD5C, 0x4A84, { 0x80, 0x82, 0x2F, 0x41, 0x70, 0x78, 0x03, 0x05 } }

> diff --git a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> new file mode 100644

> index 000000000000..65be2cbd8082

> --- /dev/null

> +++ b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

> @@ -0,0 +1,39 @@

> +/** @file

> +

> +  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

> +  Copyright (c) 2017, Linaro, Ltd. All rights reserved.

> +

> +  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

> +  http://opensource.org/licenses/bsd-license.php

> +

> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> +

> +**/

> +

> +#ifndef _ARM_VIRT_MEMINFO_LIB_H_

> +#define _ARM_VIRT_MEMINFO_LIB_H_

> +

> +#include <Base.h>

> +#include <Library/ArmLib.h>

> +

> +/**

> +  Return the Virtual Memory Map of your platform

> +

> +  This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU

> +  on your platform.

> +

> +  @param[out]   VirtualMemoryMap    Array of ARM_MEMORY_REGION_DESCRIPTOR

> +                                    describing a Physical-to-Virtual Memory

> +                                    mapping. This array must be ended by a

> +                                    zero-filled entry

> +

> +**/

> +VOID

> +ArmVirtGetMemoryMap (

> +  OUT ARM_MEMORY_REGION_DESCRIPTOR    **VirtualMemoryMap

> +  );

> +

> +#endif

> 


(1) Since this is a library API, please add EFIAPI to the declaration.

(This will affect the instance(s) too.)


(2) If it's not overly restrictive, then please mention in the
"VirtualMemoryMap" param comment that the map is supposed to be
allocated dynamically within the function, using the phase-matching
MemoryAllocationLib instance.

(Judged from the AllocatePages() call in
"ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/QemuVirtMem.c".)


With those addressed,

Reviewed-by: Laszlo Ersek <lersek@redhat.com>


Thanks
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Laszlo Ersek Nov. 21, 2017, 4:27 p.m. UTC | #2
On 11/21/17 17:23, Laszlo Ersek wrote:
> On 11/17/17 17:09, Ard Biesheuvel wrote:

>> As part of the effort to get rid of ArmPlatformLib (which incorporates

>> far too many duties in a single library), introduce ArmVirtMemInfoLib

>> which will be invoked by our ArmVirtMemoryInitPeiLib implementation to

>> get a description of the virtual address space. This will allow us to

>> remove this functionality from ArmPlatformLib later, or, in the case of

>> ArmVirtXen and ArmVirtQemuKernel, drop ArmPlatformLib altogether.

>>

>> Contributed-under: TianoCore Contribution Agreement 1.1

>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>> ---

>>  ArmVirtPkg/ArmVirtPkg.dec                      |  3 ++

>>  ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h | 39 ++++++++++++++++++++

>>  2 files changed, 42 insertions(+)

>>

>> diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec

>> index a8603e1b80e5..8f656fd2739d 100644

>> --- a/ArmVirtPkg/ArmVirtPkg.dec

>> +++ b/ArmVirtPkg/ArmVirtPkg.dec

>> @@ -30,6 +30,9 @@ [Defines]

>>  [Includes.common]

>>    Include                        # Root include for the package

>>  

>> +[LibraryClasses]

>> +  ArmVirtMemInfoLib|Include/Library/ArmVirtMemInfoLib.h

>> +

>>  [Guids.common]

>>    gArmVirtTokenSpaceGuid = { 0x0B6F5CA7, 0x4F53, 0x445A, { 0xB7, 0x6E, 0x2E, 0x36, 0x5B, 0x80, 0x63, 0x66 } }

>>    gEarlyPL011BaseAddressGuid       = { 0xB199DEA9, 0xFD5C, 0x4A84, { 0x80, 0x82, 0x2F, 0x41, 0x70, 0x78, 0x03, 0x05 } }

>> diff --git a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

>> new file mode 100644

>> index 000000000000..65be2cbd8082

>> --- /dev/null

>> +++ b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

>> @@ -0,0 +1,39 @@

>> +/** @file

>> +

>> +  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

>> +  Copyright (c) 2017, Linaro, Ltd. All rights reserved.

>> +

>> +  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

>> +  http://opensource.org/licenses/bsd-license.php

>> +

>> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> +

>> +**/

>> +

>> +#ifndef _ARM_VIRT_MEMINFO_LIB_H_

>> +#define _ARM_VIRT_MEMINFO_LIB_H_

>> +

>> +#include <Base.h>

>> +#include <Library/ArmLib.h>

>> +

>> +/**

>> +  Return the Virtual Memory Map of your platform

>> +

>> +  This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU

>> +  on your platform.

>> +

>> +  @param[out]   VirtualMemoryMap    Array of ARM_MEMORY_REGION_DESCRIPTOR

>> +                                    describing a Physical-to-Virtual Memory

>> +                                    mapping. This array must be ended by a

>> +                                    zero-filled entry

>> +

>> +**/

>> +VOID

>> +ArmVirtGetMemoryMap (

>> +  OUT ARM_MEMORY_REGION_DESCRIPTOR    **VirtualMemoryMap

>> +  );

>> +

>> +#endif

>>

> 

> (1) Since this is a library API, please add EFIAPI to the declaration.

> 

> (This will affect the instance(s) too.)

> 

> 

> (2) If it's not overly restrictive, then please mention in the

> "VirtualMemoryMap" param comment that the map is supposed to be

> allocated dynamically within the function, using the phase-matching

> MemoryAllocationLib instance.

> 

> (Judged from the AllocatePages() call in

> "ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/QemuVirtMem.c".)


Looking at the patch right after this one, dynamic memory allocation
appears wrong to spell out in the library interface.

Then I guess the right thing to say would be, "the returned array is
never supposed to be freed; it is released at the latest when the OS
takes control".

> With those addressed,

> 

> Reviewed-by: Laszlo Ersek <lersek@redhat.com>


My R-b stands, just please clarify the expected lifetime of the array
returned, one way or another.

Thanks
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel Nov. 21, 2017, 4:32 p.m. UTC | #3
On 21 November 2017 at 16:27, Laszlo Ersek <lersek@redhat.com> wrote:
> On 11/21/17 17:23, Laszlo Ersek wrote:

>> On 11/17/17 17:09, Ard Biesheuvel wrote:

>>> As part of the effort to get rid of ArmPlatformLib (which incorporates

>>> far too many duties in a single library), introduce ArmVirtMemInfoLib

>>> which will be invoked by our ArmVirtMemoryInitPeiLib implementation to

>>> get a description of the virtual address space. This will allow us to

>>> remove this functionality from ArmPlatformLib later, or, in the case of

>>> ArmVirtXen and ArmVirtQemuKernel, drop ArmPlatformLib altogether.

>>>

>>> Contributed-under: TianoCore Contribution Agreement 1.1

>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>>> ---

>>>  ArmVirtPkg/ArmVirtPkg.dec                      |  3 ++

>>>  ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h | 39 ++++++++++++++++++++

>>>  2 files changed, 42 insertions(+)

>>>

>>> diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec

>>> index a8603e1b80e5..8f656fd2739d 100644

>>> --- a/ArmVirtPkg/ArmVirtPkg.dec

>>> +++ b/ArmVirtPkg/ArmVirtPkg.dec

>>> @@ -30,6 +30,9 @@ [Defines]

>>>  [Includes.common]

>>>    Include                        # Root include for the package

>>>

>>> +[LibraryClasses]

>>> +  ArmVirtMemInfoLib|Include/Library/ArmVirtMemInfoLib.h

>>> +

>>>  [Guids.common]

>>>    gArmVirtTokenSpaceGuid = { 0x0B6F5CA7, 0x4F53, 0x445A, { 0xB7, 0x6E, 0x2E, 0x36, 0x5B, 0x80, 0x63, 0x66 } }

>>>    gEarlyPL011BaseAddressGuid       = { 0xB199DEA9, 0xFD5C, 0x4A84, { 0x80, 0x82, 0x2F, 0x41, 0x70, 0x78, 0x03, 0x05 } }

>>> diff --git a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

>>> new file mode 100644

>>> index 000000000000..65be2cbd8082

>>> --- /dev/null

>>> +++ b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h

>>> @@ -0,0 +1,39 @@

>>> +/** @file

>>> +

>>> +  Copyright (c) 2011-2013, ARM Limited. All rights reserved.

>>> +  Copyright (c) 2017, Linaro, Ltd. All rights reserved.

>>> +

>>> +  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

>>> +  http://opensource.org/licenses/bsd-license.php

>>> +

>>> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>>> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>>> +

>>> +**/

>>> +

>>> +#ifndef _ARM_VIRT_MEMINFO_LIB_H_

>>> +#define _ARM_VIRT_MEMINFO_LIB_H_

>>> +

>>> +#include <Base.h>

>>> +#include <Library/ArmLib.h>

>>> +

>>> +/**

>>> +  Return the Virtual Memory Map of your platform

>>> +

>>> +  This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU

>>> +  on your platform.

>>> +

>>> +  @param[out]   VirtualMemoryMap    Array of ARM_MEMORY_REGION_DESCRIPTOR

>>> +                                    describing a Physical-to-Virtual Memory

>>> +                                    mapping. This array must be ended by a

>>> +                                    zero-filled entry

>>> +

>>> +**/

>>> +VOID

>>> +ArmVirtGetMemoryMap (

>>> +  OUT ARM_MEMORY_REGION_DESCRIPTOR    **VirtualMemoryMap

>>> +  );

>>> +

>>> +#endif

>>>

>>

>> (1) Since this is a library API, please add EFIAPI to the declaration.

>>

>> (This will affect the instance(s) too.)

>>

>>

>> (2) If it's not overly restrictive, then please mention in the

>> "VirtualMemoryMap" param comment that the map is supposed to be

>> allocated dynamically within the function, using the phase-matching

>> MemoryAllocationLib instance.

>>

>> (Judged from the AllocatePages() call in

>> "ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/QemuVirtMem.c".)

>

> Looking at the patch right after this one, dynamic memory allocation

> appears wrong to spell out in the library interface.

>

> Then I guess the right thing to say would be, "the returned array is

> never supposed to be freed; it is released at the latest when the OS

> takes control".

>

>> With those addressed,

>>

>> Reviewed-by: Laszlo Ersek <lersek@redhat.com>

>

> My R-b stands, just please clarify the expected lifetime of the array

> returned, one way or another.

>


Thanks. Simply not freeing it is the current practice everywhere,
given that PrePi and PEI MemoryAllocationLib implementations don't do
FreePages() in the first place. But I agree it should be mentioned
explicitly.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox series

Patch

diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec
index a8603e1b80e5..8f656fd2739d 100644
--- a/ArmVirtPkg/ArmVirtPkg.dec
+++ b/ArmVirtPkg/ArmVirtPkg.dec
@@ -30,6 +30,9 @@  [Defines]
 [Includes.common]
   Include                        # Root include for the package
 
+[LibraryClasses]
+  ArmVirtMemInfoLib|Include/Library/ArmVirtMemInfoLib.h
+
 [Guids.common]
   gArmVirtTokenSpaceGuid = { 0x0B6F5CA7, 0x4F53, 0x445A, { 0xB7, 0x6E, 0x2E, 0x36, 0x5B, 0x80, 0x63, 0x66 } }
   gEarlyPL011BaseAddressGuid       = { 0xB199DEA9, 0xFD5C, 0x4A84, { 0x80, 0x82, 0x2F, 0x41, 0x70, 0x78, 0x03, 0x05 } }
diff --git a/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h
new file mode 100644
index 000000000000..65be2cbd8082
--- /dev/null
+++ b/ArmVirtPkg/Include/Library/ArmVirtMemInfoLib.h
@@ -0,0 +1,39 @@ 
+/** @file
+
+  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
+  Copyright (c) 2017, Linaro, Ltd. All rights reserved.
+
+  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
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _ARM_VIRT_MEMINFO_LIB_H_
+#define _ARM_VIRT_MEMINFO_LIB_H_
+
+#include <Base.h>
+#include <Library/ArmLib.h>
+
+/**
+  Return the Virtual Memory Map of your platform
+
+  This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU
+  on your platform.
+
+  @param[out]   VirtualMemoryMap    Array of ARM_MEMORY_REGION_DESCRIPTOR
+                                    describing a Physical-to-Virtual Memory
+                                    mapping. This array must be ended by a
+                                    zero-filled entry
+
+**/
+VOID
+ArmVirtGetMemoryMap (
+  OUT ARM_MEMORY_REGION_DESCRIPTOR    **VirtualMemoryMap
+  );
+
+#endif