From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: edk2-devel-01 <edk2-devel@lists.01.org>,
Leif Lindholm <leif.lindholm@linaro.org>,
"Cohen, Eugene" <eugene@hp.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: Re: [PATCH] ArmPkg/ArmMmuLib: base page table VA size on GCD memory map size
Date: Fri, 9 Sep 2016 11:41:33 +0100 [thread overview]
Message-ID: <CAKv+Gu8ub7AkOWiyVLPyJWsqfx-6F+ajpcf71upZ_QiJ_qrfnw@mail.gmail.com> (raw)
In-Reply-To: <1473408424-17833-1-git-send-email-ard.biesheuvel@linaro.org>
Please disregard, I will follow up with a proper series
On 9 September 2016 at 09:07, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> As reported by Eugene, the practice of sizing the address space in the
> virtual memory system based on the maximum address in the table passed
> to ArmConfigureMmu() is problematic, since it fails to take into account
> the fact that the GCD memory space may be extended at a later time, both
> for memory and for MMIO. So instead, choose the VA size identical to the
> GCD memory map size, which is based on PcdPrePiCpuMemorySize on ARM
> systems.
>
> Reported-by: Eugene Cohen <eugene@hp.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
> ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c | 14 ++------------
> ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf | 4 ++++
> ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf | 4 ++++
> 3 files changed, 10 insertions(+), 12 deletions(-)
>
> diff --git a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c
> index 6e05e6085011..b5900a761f80 100644
> --- a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c
> +++ b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c
> @@ -582,9 +582,7 @@ ArmConfigureMmu (
> VOID* TranslationTable;
> UINTN TranslationTablePageCount;
> UINT32 TranslationTableAttribute;
> - ARM_MEMORY_REGION_DESCRIPTOR *MemoryTableEntry;
> UINT64 MaxAddress;
> - UINT64 TopAddress;
> UINTN T0SZ;
> UINTN RootTableEntryCount;
> UINT64 TCR;
> @@ -595,16 +593,8 @@ ArmConfigureMmu (
> return RETURN_INVALID_PARAMETER;
> }
>
> - // Identify the highest address of the memory table
> - MaxAddress = MemoryTable->PhysicalBase + MemoryTable->Length - 1;
> - MemoryTableEntry = MemoryTable;
> - while (MemoryTableEntry->Length != 0) {
> - TopAddress = MemoryTableEntry->PhysicalBase + MemoryTableEntry->Length - 1;
> - if (TopAddress > MaxAddress) {
> - MaxAddress = TopAddress;
> - }
> - MemoryTableEntry++;
> - }
> + // Cover the entire GCD memory space
> + MaxAddress = (1UL << PcdGet8 (PcdPrePiCpuMemorySize)) - 1;
>
> // Lookup the Table Level to get the information
> LookupAddresstoRootTable (MaxAddress, &T0SZ, &RootTableEntryCount);
> diff --git a/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf b/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
> index 1533c2944e8e..b9f264de8d26 100644
> --- a/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
> +++ b/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
> @@ -32,6 +32,7 @@ [Sources.ARM]
>
> [Packages]
> ArmPkg/ArmPkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> MdePkg/MdePkg.dec
>
> [LibraryClasses]
> @@ -39,5 +40,8 @@ [LibraryClasses]
> CacheMaintenanceLib
> MemoryAllocationLib
>
> +[Pcd.AARCH64]
> + gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
> +
> [Pcd.ARM]
> gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride
> diff --git a/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf b/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
> index 14ebf8de673d..ecf13f790734 100644
> --- a/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
> +++ b/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
> @@ -28,9 +28,13 @@ [Sources.AARCH64]
>
> [Packages]
> ArmPkg/ArmPkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> MdePkg/MdePkg.dec
>
> [LibraryClasses]
> ArmLib
> CacheMaintenanceLib
> MemoryAllocationLib
> +
> +[Pcd.AARCH64]
> + gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
> --
> 2.7.4
>
prev parent reply other threads:[~2016-09-09 10:41 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-09 8:07 [PATCH] ArmPkg/ArmMmuLib: base page table VA size on GCD memory map size Ard Biesheuvel
2016-09-09 10:41 ` Ard Biesheuvel [this message]
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=CAKv+Gu8ub7AkOWiyVLPyJWsqfx-6F+ajpcf71upZ_QiJ_qrfnw@mail.gmail.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