From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.43; helo=mga05.intel.com; envelope-from=jiewen.yao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 32D55203BA4E2 for ; Tue, 29 May 2018 08:36:27 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 May 2018 08:36:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,457,1520924400"; d="scan'208";a="59502604" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga001.fm.intel.com with ESMTP; 29 May 2018 08:36:26 -0700 Received: from fmsmsx121.amr.corp.intel.com (10.18.125.36) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 29 May 2018 08:36:26 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx121.amr.corp.intel.com (10.18.125.36) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 29 May 2018 08:36:26 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.223]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.87]) with mapi id 14.03.0319.002; Tue, 29 May 2018 23:36:24 +0800 From: "Yao, Jiewen" To: "Kinney, Michael D" , "Zeng, Star" , Ard Biesheuvel , "edk2-devel@lists.01.org" CC: "Zeng, Star" , "Yao, Jiewen" Thread-Topic: [edk2] [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce AllocatePeiAccessiblePages routine Thread-Index: AQHT9pHhQTa+ELUdXUSywv7r7IUyjqRFZ98AgAFoPED//4DUAIAAhzHQ Date: Tue, 29 May 2018 15:36:23 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503AC1688F@shsmsx102.ccr.corp.intel.com> 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: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjRlYjljN2ItMmM0Yy00NDZiLTkxYWUtYmYwMzU1ZjNjYjkyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQlNORWNwcjlhU2FjZ1wvWGZZWGg4VGErcVAwYlpZWjRIMDZoeGRzbUhqdFdvU3ZFMVlcL1RiT0t3VWV5ZHNPZGF3In0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.239.127.40] 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:36:27 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Mike Please refer to https://github.com/tianocore/edk2/blob/master/MdeModulePkg/= Universal/CapsuleRuntimeDxe/X64/SaveLongModeContext.c It uses AllocateReservedMemoryBelow4G() for the context accessed in PEI. Thank you Yao Jiewen > -----Original Message----- > From: Kinney, Michael D > Sent: Tuesday, May 29, 2018 8:31 AM > To: Yao, Jiewen ; Zeng, Star ;= Ard > Biesheuvel ; edk2-devel@lists.01.org; Kinney, > Michael D > Cc: Zeng, Star > Subject: RE: [edk2] [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce > AllocatePeiAccessiblePages routine >=20 > Jiewen, >=20 > I do not think this service applies to the capsule > use cases. >=20 > 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. >=20 > The main PEI requirement is to not corrupt capsules > in memory. >=20 > Mike >=20 > > -----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 > > > > Maybe " be accessible by PEI after a warm reboot or S3" > > ? > > > > We may want to consider Capsule Update case. > > > > > > > -----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