From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 067CF2096DCF7 for ; Tue, 29 May 2018 08:31:22 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 May 2018 08:31:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,456,1520924400"; d="scan'208";a="43066049" Received: from orsmsx108.amr.corp.intel.com ([10.22.240.6]) by fmsmga007.fm.intel.com with ESMTP; 29 May 2018 08:31:21 -0700 Received: from orsmsx159.amr.corp.intel.com (10.22.240.24) by ORSMSX108.amr.corp.intel.com (10.22.240.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 29 May 2018 08:31:21 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.88]) by ORSMSX159.amr.corp.intel.com ([169.254.11.44]) with mapi id 14.03.0319.002; Tue, 29 May 2018 08:31:21 -0700 From: "Kinney, Michael D" To: "Yao, Jiewen" , "Zeng, Star" , Ard Biesheuvel , "edk2-devel@lists.01.org" , "Kinney, Michael D" CC: "Zeng, Star" Thread-Topic: [edk2] [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce AllocatePeiAccessiblePages routine Thread-Index: AQHT9pHhMK0stjzplkGwPux6milJWKRGY1QAgADlhgD//41V4A== Date: Tue, 29 May 2018 15:31:20 +0000 Message-ID: References: <20180528144024.10809-1-ard.biesheuvel@linaro.org> <20180528144024.10809-4-ard.biesheuvel@linaro.org> <0C09AFA07DD0434D9E2A0C6AEB0483103BB47F36@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503AC1685D@shsmsx102.ccr.corp.intel.com> In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503AC1685D@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Subject: Re: [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce AllocatePeiAccessiblePages routine X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 May 2018 15:31:23 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Jiewen, I do not think this service applies to the capsule use cases. A capsule sent at OS runtime can be placed anywhere in memory by the OS. The OS does not know what memory PEI can easily access or not. The main PEI requirement is to not corrupt capsules in memory. Mike > -----Original Message----- > From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of Yao, Jiewen > Sent: Tuesday, May 29, 2018 8:19 AM > To: Zeng, Star ; Ard Biesheuvel > ; edk2-devel@lists.01.org > Cc: Zeng, Star > Subject: Re: [edk2] [PATCH v3 3/5] > MdePkg/DxeServicesLib: introduce > AllocatePeiAccessiblePages routine >=20 > Maybe " be accessible by PEI after a warm reboot or S3" > ? >=20 > We may want to consider Capsule Update case. >=20 >=20 > > -----Original Message----- > > From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of Zeng, > > Star > > Sent: Monday, May 28, 2018 6:37 PM > > To: Ard Biesheuvel ; edk2- > devel@lists.01.org > > Cc: Zeng, Star > > Subject: Re: [edk2] [PATCH v3 3/5] > MdePkg/DxeServicesLib: introduce > > AllocatePeiAccessiblePages routine > > > > I think " be accessible by PEI after a warm reboot " > should be " be accessible by > > PEI after resuming from S3 ". > > You can update it when pushing without need to send a > new patch if other has > > no comment to the code part. > > > > > > Thanks, > > Star > > -----Original Message----- > > From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of Ard > > Biesheuvel > > Sent: Monday, May 28, 2018 10:40 PM > > To: edk2-devel@lists.01.org > > Cc: Ard Biesheuvel > > Subject: [edk2] [PATCH v3 3/5] MdePkg/DxeServicesLib: > introduce > > AllocatePeiAccessiblePages routine > > > > Add a routine to DxeServicesLib that abstracts the > allocation of memory > > that should be accessible by PEI after a warm reboot. > We will use it to > > replace open coded implementations that limit the > address to < 4 GB, > > which may not be possible on non-Intel systems that > have no 32-bit > > addressable memory at all. > > > > Contributed-under: TianoCore Contribution Agreement > 1.1 > > Signed-off-by: Ard Biesheuvel > > > --- > > MdePkg/Include/Library/DxeServicesLib.h | 23 > ++++++- > > MdePkg/Library/DxeServicesLib/Allocate.c | 54 > +++++++++++++++ > > MdePkg/Library/DxeServicesLib/DxeServicesLib.inf | 11 > +++- > > MdePkg/Library/DxeServicesLib/X64/Allocate.c | 69 > > ++++++++++++++++++++ > > 4 files changed, 155 insertions(+), 2 deletions(-) > > > > diff --git a/MdePkg/Include/Library/DxeServicesLib.h > > b/MdePkg/Include/Library/DxeServicesLib.h > > index 7c1c62236d96..20aee68af558 100644 > > --- a/MdePkg/Include/Library/DxeServicesLib.h > > +++ b/MdePkg/Include/Library/DxeServicesLib.h > > @@ -305,5 +305,26 @@ GetFileDevicePathFromAnyFv ( > > OUT EFI_DEVICE_PATH_PROTOCOL > **FvFileDevicePath > > ); > > > > -#endif > > +/** > > + Allocates one or more 4KB pages of a given type > from a memory region that > > is > > + accessible to PEI. > > + > > + Allocates the number of 4KB pages of type > 'MemoryType' and returns a > > + pointer to the allocated buffer. The buffer > returned is aligned on a 4KB > > + boundary. If Pages is 0, then NULL is returned. > If there is not enough > > + memory remaining to satisfy the request, then NULL > is returned. > > > > + @param[in] MemoryType The memory type > to allocate > > + @param[in] Pages The number of 4 > KB pages to > > allocate. > > + > > + @return A pointer to the allocated buffer or NULL > if allocation fails. > > + > > +**/ > > +VOID * > > +EFIAPI > > +AllocatePeiAccessiblePages ( > > + IN EFI_MEMORY_TYPE MemoryType, > > + IN UINTN Pages > > + ); > > + > > +#endif > > diff --git a/MdePkg/Library/DxeServicesLib/Allocate.c > > b/MdePkg/Library/DxeServicesLib/Allocate.c > > new file mode 100644 > > index 000000000000..4d118f766d49 > > --- /dev/null > > +++ b/MdePkg/Library/DxeServicesLib/Allocate.c > > @@ -0,0 +1,54 @@ > > +/** @file > > + DxeServicesLib memory allocation routines > > + > > + Copyright (c) 2018, 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. > > + > > +**/ > > + > > +#include > > +#include > > +#include > > + > > +/** > > + Allocates one or more 4KB pages of a given type > from a memory region that > > is > > + accessible to PEI. > > + > > + Allocates the number of 4KB pages of type > 'MemoryType' and returns a > > + pointer to the allocated buffer. The buffer > returned is aligned on a 4KB > > + boundary. If Pages is 0, then NULL is returned. > If there is not enough > > + memory remaining to satisfy the request, then NULL > is returned. > > + > > + @param[in] MemoryType The memory type > to allocate > > + @param[in] Pages The number of 4 > KB pages to > > allocate. > > + > > + @return A pointer to the allocated buffer or NULL > if allocation fails. > > + > > +**/ > > +VOID * > > +EFIAPI > > +AllocatePeiAccessiblePages ( > > + IN EFI_MEMORY_TYPE MemoryType, > > + IN UINTN Pages > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_PHYSICAL_ADDRESS Memory; > > + > > + if (Pages =3D=3D 0) { > > + return NULL; > > + } > > + > > + Status =3D gBS->AllocatePages (AllocateAnyPages, > MemoryType, Pages, > > &Memory); > > + if (EFI_ERROR (Status)) { > > + return NULL; > > + } > > + return (VOID *)(UINTN)Memory; > > +} > > diff --git > a/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > > b/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > > index bd2faf2f6f2d..50ae24f8ee22 100644 > > --- a/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > > +++ b/MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > > @@ -27,12 +27,18 @@ [Defines] > > LIBRARY_CLASS =3D > DxeServicesLib|DXE_CORE > > DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER > DXE_SMM_DRIVER > > SMM_CORE UEFI_APPLICATION UEFI_DRIVER > > > > # > > -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC > > +# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC > ARM AARCH64 > > # > > > > [Sources] > > DxeServicesLib.c > > > > +[Sources.IA32, Sources.IPF, Sources.EBC, Sources.ARM, > Sources.AARCH64] > > + Allocate.c > > + > > +[Sources.X64] > > + X64/Allocate.c > > + > > [Packages] > > MdePkg/MdePkg.dec > > > > @@ -44,6 +50,9 @@ [LibraryClasses] > > UefiLib > > UefiBootServicesTableLib > > > > +[LibraryClasses.X64] > > + HobLib > > + > > [Guids] > > gEfiFileInfoGuid ## > > SOMETIMES_CONSUMES ## UNDEFINED > > > > diff --git > a/MdePkg/Library/DxeServicesLib/X64/Allocate.c > > b/MdePkg/Library/DxeServicesLib/X64/Allocate.c > > new file mode 100644 > > index 000000000000..b6d34ba20881 > > --- /dev/null > > +++ b/MdePkg/Library/DxeServicesLib/X64/Allocate.c > > @@ -0,0 +1,69 @@ > > +/** @file > > + DxeServicesLib memory allocation routines > > + > > + Copyright (c) 2018, 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. > > + > > +**/ > > + > > +#include > > +#include > > +#include > > +#include > > + > > +/** > > + Allocates one or more 4KB pages of a given type > from a memory region that > > is > > + accessible to PEI. > > + > > + Allocates the number of 4KB pages of type > 'MemoryType' and returns a > > + pointer to the allocated buffer. The buffer > returned is aligned on a 4KB > > + boundary. If Pages is 0, then NULL is returned. > If there is not enough > > + memory remaining to satisfy the request, then NULL > is returned. > > + > > + @param[in] MemoryType The memory type > to allocate > > + @param[in] Pages The number of 4 > KB pages to > > allocate. > > + > > + @return A pointer to the allocated buffer or NULL > if allocation fails. > > + > > +**/ > > +VOID * > > +EFIAPI > > +AllocatePeiAccessiblePages ( > > + IN EFI_MEMORY_TYPE MemoryType, > > + IN UINTN Pages > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_ALLOCATE_TYPE AllocType; > > + EFI_PHYSICAL_ADDRESS Memory; > > + EFI_HOB_HANDOFF_INFO_TABLE *PhitHob; > > + > > + if (Pages =3D=3D 0) { > > + return NULL; > > + } > > + > > + AllocType =3D AllocateAnyPages; > > + // > > + // A X64 build of DXE may be combined with a 32-bit > build of PEI, and so we > > + // need to check the memory limit set by PEI, and > allocate below 4 GB if the > > + // limit is set to 4 GB or lower. > > + // > > + PhitHob =3D (EFI_HOB_HANDOFF_INFO_TABLE *)GetHobList > (); > > + if (PhitHob->EfiFreeMemoryTop <=3D MAX_UINT32) { > > + AllocType =3D AllocateMaxAddress; > > + Memory =3D MAX_UINT32; > > + } > > + > > + Status =3D gBS->AllocatePages (AllocType, MemoryType, > Pages, &Memory); > > + if (EFI_ERROR (Status)) { > > + return NULL; > > + } > > + return (VOID *)(UINTN)Memory; > > +} > > -- > > 2.17.0 > > > > _______________________________________________ > > edk2-devel mailing list > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel > > _______________________________________________ > > edk2-devel mailing list > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel