From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io0-x22c.google.com (mail-io0-x22c.google.com [IPv6:2607:f8b0:4001:c06::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 7D1C682214 for ; Fri, 3 Mar 2017 05:42:11 -0800 (PST) Received: by mail-io0-x22c.google.com with SMTP id 90so74606723ios.1 for ; Fri, 03 Mar 2017 05:42:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=A0TUQAVcLu5FkC/YGefKlkHSlYwRpC4Tv6Pt2wsEoFE=; b=FAfpNnSZ2GxqRYgp02elZra4j0kvaxzZ+DX4cCf+oPDS/c1RK/c99OUgK7NMbejWDt WDf62rB8qkZvvvF82SN6k7+hG/axmU5uwM1VXZM2EFn/yufo3H5/LtDTebJtVYDBmrGn 87pDrnyIn1GmuPlnHwkOJ+YzKQsy4lFDMlewo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=A0TUQAVcLu5FkC/YGefKlkHSlYwRpC4Tv6Pt2wsEoFE=; b=PXnIOFjBiv3IvC7Xxi91bQQgFHjNFikiry3XPUBYjcV+CbQSNJnnRwifSxIkCTnHqI zb7j/JzbZQ92EAehvm4Jspgs8StfSo6xwFOPRziENU5XUo9KnXXoylo+NanUi56f/n66 piZ0CQ8QOlxTZO6CmOgwEw4lME0pcqGQawSXoSEZnKmpQ+RGelFOVyxQ78fKRGjFqQ/n uk45MGtwRYhm76fUYnSfT4jDVTYy+AHjzSbMeam+kLrE3HdK+Oshu5DlSQT0knayAmDZ VjdVm4vNKhwFiRfZdP9Lvas7TXp74nlPxRFbh8+xWbdb7MeQ2aeVj/L3TF8D2RIY/lKq Vg1g== X-Gm-Message-State: AMke39nhiO+aBLssjyLnM8MjMwV+JR24w0Bt32wmQvmtQhVFD4zLGrihEyRNijrmzY7Gww0qqdnsZzlnVb7pKQHY X-Received: by 10.107.132.155 with SMTP id o27mr2612380ioi.138.1488548530728; Fri, 03 Mar 2017 05:42:10 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.10.27 with HTTP; Fri, 3 Mar 2017 05:42:10 -0800 (PST) In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503A8F904F@shsmsx102.ccr.corp.intel.com> References: <1488534218-25315-1-git-send-email-ard.biesheuvel@linaro.org> <74D8A39837DF1E4DA445A8C0B3885C503A8F904F@shsmsx102.ccr.corp.intel.com> From: Ard Biesheuvel Date: Fri, 3 Mar 2017 13:42:10 +0000 Message-ID: To: "Yao, Jiewen" Cc: "edk2-devel@lists.01.org" , "Gao, Liming" , "Zeng, Star" Subject: Re: [PATCH v3] MdeModulePkg/PeiCore: honour minimal runtime allocation granularity X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Mar 2017 13:42:11 -0000 Content-Type: text/plain; charset=UTF-8 On 3 March 2017 at 13:40, Yao, Jiewen wrote: > Hi Ard > Thanks to close the gap in PEI memory allocation. > > I found we use below in DXE core. The definition is slight different with the one you add in PEI core. > > Since the calling convention is defined in UEFI spec, do you think it will be better if we can move below to MdePkg? > Maybe in ProcessorBind.h, because we already define CPU_STACK_ALIGNMENT there. > Yes, that makes sense. I will create a patch for that. > The benefit is that we do not need duplicate the same definition in PEI core. > In the future, new ARCH can also define same thing there, instead of checking DXE/PEI core. > > ========================================================= > #if defined (MDE_CPU_IPF) > /// > /// For Itanium machines make the default allocations 8K aligned > /// > #define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT (EFI_PAGE_SIZE * 2) > #define DEFAULT_PAGE_ALLOCATION (EFI_PAGE_SIZE * 2) > > #elif defined (MDE_CPU_AARCH64) > /// > /// 64-bit ARM systems allow the OS to execute with 64 KB page size, > /// so for improved interoperability with the firmware, align the > /// runtime regions to 64 KB as well > /// > #define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT (SIZE_64KB) > #define DEFAULT_PAGE_ALLOCATION (EFI_PAGE_SIZE) > > #else > /// > /// For generic EFI machines make the default allocations 4K aligned > /// > #define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT (EFI_PAGE_SIZE) > #define DEFAULT_PAGE_ALLOCATION (EFI_PAGE_SIZE) > > #endif > ========================================================= > > > > >> -----Original Message----- >> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ard >> Biesheuvel >> Sent: Friday, March 3, 2017 5:44 PM >> To: edk2-devel@lists.01.org; Gao, Liming ; Zeng, Star >> >> Cc: Ard Biesheuvel >> Subject: [edk2] [PATCH v3] MdeModulePkg/PeiCore: honour minimal runtime >> allocation granularity >> >> Architectures such as AArch64 may run the OS with 16 KB or 64 KB sized >> pages, and for this reason, the UEFI spec mandates a minimal allocation >> granularity of 64 KB for regions that may require different memory >> attributes at OS runtime. >> >> So make PeiCore's implementation of AllocatePages () take this into >> account as well. >> >> Contributed-under: TianoCore Contribution Agreement 1.0 >> Signed-off-by: Ard Biesheuvel >> --- >> v3: allocate a memory allocation HOB to cover the memory lost to rounding >> >> MdeModulePkg/Core/Pei/Memory/MemoryServices.c | 39 >> +++++++++++++++++++- >> MdeModulePkg/Core/Pei/PeiMain.h | 18 +++++++++ >> 2 files changed, 55 insertions(+), 2 deletions(-) >> >> diff --git a/MdeModulePkg/Core/Pei/Memory/MemoryServices.c >> b/MdeModulePkg/Core/Pei/Memory/MemoryServices.c >> index 4efe14313ca5..573fd606b4cc 100644 >> --- a/MdeModulePkg/Core/Pei/Memory/MemoryServices.c >> +++ b/MdeModulePkg/Core/Pei/Memory/MemoryServices.c >> @@ -140,6 +140,8 @@ PeiAllocatePages ( >> EFI_PHYSICAL_ADDRESS *FreeMemoryTop; >> EFI_PHYSICAL_ADDRESS *FreeMemoryBottom; >> UINTN RemainingPages; >> + UINTN Granularity; >> + UINTN Padding; >> >> if ((MemoryType != EfiLoaderCode) && >> (MemoryType != EfiLoaderData) && >> @@ -153,6 +155,20 @@ PeiAllocatePages ( >> return EFI_INVALID_PARAMETER; >> } >> >> + Granularity = DEFAULT_PAGE_ALLOCATION_GRANULARITY; >> + >> + if (RUNTIME_PAGE_ALLOCATION_GRANULARITY > >> DEFAULT_PAGE_ALLOCATION_GRANULARITY && >> + (MemoryType == EfiACPIReclaimMemory || >> + MemoryType == EfiACPIMemoryNVS || >> + MemoryType == EfiRuntimeServicesCode || >> + MemoryType == EfiRuntimeServicesData)) { >> + >> + Granularity = RUNTIME_PAGE_ALLOCATION_GRANULARITY; >> + >> + DEBUG ((DEBUG_INFO, "AllocatePages: rounding up allocation to %d >> KB\n", >> + Granularity)); >> + } >> + >> PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices); >> Hob.Raw = PrivateData->HobList.Raw; >> >> @@ -176,9 +192,27 @@ PeiAllocatePages ( >> } >> >> // >> - // Check to see if on 4k boundary, If not aligned, make the allocation aligned. >> + // Check to see if on correct boundary for the memory type. >> + // If not aligned, make the allocation aligned. >> // >> - *(FreeMemoryTop) -= *(FreeMemoryTop) & 0xFFF; >> + Padding = *(FreeMemoryTop) & (Granularity - 1); >> + if ((UINTN) (*FreeMemoryTop - *FreeMemoryBottom) < Padding) { >> + DEBUG ((DEBUG_ERROR, "AllocatePages failed: Out of space after >> padding.\n")); >> + return EFI_OUT_OF_RESOURCES; >> + } >> + >> + *(FreeMemoryTop) -= Padding; >> + if (Padding >= EFI_PAGE_SIZE) { >> + // >> + // Create a memory allocation HOB to cover >> + // the pages that we will lose to rounding >> + // >> + BuildMemoryAllocationHob ( >> + *(FreeMemoryTop), >> + Padding & ~((UINTN)EFI_PAGE_SIZE - 1), >> + EfiConventionalMemory >> + ); >> + } >> >> // >> // Verify that there is sufficient memory to satisfy the allocation. >> @@ -192,6 +226,7 @@ PeiAllocatePages ( >> // >> // The number of remaining pages needs to be greater than or equal to that >> of the request pages. >> // >> + Pages = ALIGN_VALUE (Pages, EFI_SIZE_TO_PAGES (Granularity)); >> if (RemainingPages < Pages) { >> DEBUG ((EFI_D_ERROR, "AllocatePages failed: No 0x%lx Pages is >> available.\n", (UINT64) Pages)); >> DEBUG ((EFI_D_ERROR, "There is only left 0x%lx pages memory resource to >> be allocated.\n", (UINT64) RemainingPages)); >> diff --git a/MdeModulePkg/Core/Pei/PeiMain.h >> b/MdeModulePkg/Core/Pei/PeiMain.h >> index 69eea514920b..e8358d3c4e6d 100644 >> --- a/MdeModulePkg/Core/Pei/PeiMain.h >> +++ b/MdeModulePkg/Core/Pei/PeiMain.h >> @@ -55,6 +55,24 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY >> KIND, EITHER EXPRESS OR IMPLIED. >> /// >> #define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE 0xff >> >> +#if defined (MDE_CPU_AARCH64) >> +/// >> +/// 64-bit ARM systems allow the OS to execute with 64 KB page size, >> +/// so for improved interoperability with the firmware, align the >> +/// runtime regions to 64 KB as well >> +/// >> +#define RUNTIME_PAGE_ALLOCATION_GRANULARITY (SIZE_64KB) >> +#define DEFAULT_PAGE_ALLOCATION_GRANULARITY (EFI_PAGE_SIZE) >> + >> +#else >> +/// >> +/// For generic EFI machines make the default allocations 4K aligned >> +/// >> +#define RUNTIME_PAGE_ALLOCATION_GRANULARITY (EFI_PAGE_SIZE) >> +#define DEFAULT_PAGE_ALLOCATION_GRANULARITY (EFI_PAGE_SIZE) >> + >> +#endif >> + >> /// >> /// Pei Core private data structures >> /// >> -- >> 2.7.4 >> >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> https://lists.01.org/mailman/listinfo/edk2-devel