public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Kinney, Michael D" <michael.d.kinney@intel.com>
To: "Yao, Jiewen" <jiewen.yao@intel.com>,
	"Zeng, Star" <star.zeng@intel.com>,
	 Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>
Cc: "Zeng, Star" <star.zeng@intel.com>
Subject: Re: [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce AllocatePeiAccessiblePages routine
Date: Tue, 29 May 2018 16:09:18 +0000	[thread overview]
Message-ID: <E92EE9817A31E24EB0585FDF735412F5B8A5C066@ORSMSX113.amr.corp.intel.com> (raw)
In-Reply-To: <74D8A39837DF1E4DA445A8C0B3885C503AC1688F@shsmsx102.ccr.corp.intel.com>

Jiewen,

I see what you mean.  It is not the submitting of
capsules you are referring to.  It is the processing
if capsules in the PEI phase that depends on some
things being setup in DXE phase and DXE phase needs
to know if PEI is in IA32 mode.

So I agree that the commit message could add capsule
processing to the list of features that can use this
new service.

The logic in that file is using PcdDxeIplSwitchToLongMode.
That PCD is TRUE when PEI is IA32 and DXE is X64.  But it
is ignored when  PEI and DXE are both X64 and could be 
TRUE or FALSE.  Is there a logic issue here with using that
PCD when PEI and DXE are both X64?

Thanks,

Mike

> -----Original Message-----
> From: Yao, Jiewen
> Sent: Tuesday, May 29, 2018 8:36 AM
> To: Kinney, Michael D <michael.d.kinney@intel.com>;
> Zeng, Star <star.zeng@intel.com>; Ard Biesheuvel
> <ard.biesheuvel@linaro.org>; edk2-devel@lists.01.org
> Cc: Zeng, Star <star.zeng@intel.com>; Yao, Jiewen
> <jiewen.yao@intel.com>
> Subject: RE: [edk2] [PATCH v3 3/5]
> MdePkg/DxeServicesLib: introduce
> AllocatePeiAccessiblePages routine
> 
> Mike
> Please refer to
> https://github.com/tianocore/edk2/blob/master/MdeModuleP
> kg/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 <jiewen.yao@intel.com>; Zeng, Star
> <star.zeng@intel.com>; Ard
> > Biesheuvel <ard.biesheuvel@linaro.org>; edk2-
> devel@lists.01.org; Kinney,
> > Michael D <michael.d.kinney@intel.com>
> > Cc: Zeng, Star <star.zeng@intel.com>
> > Subject: RE: [edk2] [PATCH v3 3/5]
> MdePkg/DxeServicesLib: introduce
> > AllocatePeiAccessiblePages routine
> >
> > 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 <star.zeng@intel.com>; Ard Biesheuvel
> > > <ard.biesheuvel@linaro.org>; edk2-devel@lists.01.org
> > > Cc: Zeng, Star <star.zeng@intel.com>
> > > 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 <ard.biesheuvel@linaro.org>;
> edk2-
> > > devel@lists.01.org
> > > > Cc: Zeng, Star <star.zeng@intel.com>
> > > > 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 <ard.biesheuvel@linaro.org>
> > > > 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
> > > <ard.biesheuvel@linaro.org>
> > > > ---
> > > >  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.<BR>
> > > > +
> > > > +  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 <PiDxe.h>
> > > > +#include <Library/UefiBootServicesTableLib.h>
> > > > +#include <Library/DxeServicesLib.h>
> > > > +
> > > > +/**
> > > > +  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 == 0) {
> > > > +    return NULL;
> > > > +  }
> > > > +
> > > > +  Status = 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                  =
> > > DxeServicesLib|DXE_CORE
> > > > DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER
> > > DXE_SMM_DRIVER
> > > > SMM_CORE UEFI_APPLICATION UEFI_DRIVER
> > > >
> > > >  #
> > > > -#  VALID_ARCHITECTURES           = IA32 X64 IPF
> EBC
> > > > +#  VALID_ARCHITECTURES           = 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.<BR>
> > > > +
> > > > +  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 <PiDxe.h>
> > > > +#include <Library/HobLib.h>
> > > > +#include <Library/UefiBootServicesTableLib.h>
> > > > +#include <Library/DxeServicesLib.h>
> > > > +
> > > > +/**
> > > > +  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 == 0) {
> > > > +    return NULL;
> > > > +  }
> > > > +
> > > > +  AllocType = 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 = (EFI_HOB_HANDOFF_INFO_TABLE
> *)GetHobList
> > > ();
> > > > +  if (PhitHob->EfiFreeMemoryTop <= MAX_UINT32) {
> > > > +    AllocType = AllocateMaxAddress;
> > > > +    Memory = MAX_UINT32;
> > > > +  }
> > > > +
> > > > +  Status = 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


  reply	other threads:[~2018-05-29 16:09 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-28 14:40 [PATCH v3 0/5] Abstract allocation of PEI accessible memory Ard Biesheuvel
2018-05-28 14:40 ` [PATCH v3 1/5] OvmfPkg/PlatformBootManagerLib: add missing report status code call Ard Biesheuvel
2018-05-28 14:40 ` [PATCH v3 2/5] ArmVirtPkg/PlatformBootManagerLib: " Ard Biesheuvel
2018-05-28 14:40 ` [PATCH v3 3/5] MdePkg/DxeServicesLib: introduce AllocatePeiAccessiblePages routine Ard Biesheuvel
2018-05-28 14:59   ` Laszlo Ersek
2018-05-29  3:34     ` Gao, Liming
2018-05-29  1:37   ` Zeng, Star
2018-05-29 15:18     ` Yao, Jiewen
2018-05-29 15:31       ` Kinney, Michael D
2018-05-29 15:36         ` Yao, Jiewen
2018-05-29 16:09           ` Kinney, Michael D [this message]
2018-05-29 16:19             ` Ard Biesheuvel
2018-05-29 16:41               ` Yao, Jiewen
2018-05-30  0:58             ` Zeng, Star
2018-05-28 14:40 ` [PATCH v3 4/5] MdeModulePkg/DxeCorePerformanceLib: use AllocatePeiAccessiblePages Ard Biesheuvel
2018-05-29  1:33   ` Zeng, Star
2018-05-28 14:40 ` [PATCH v3 5/5] MdeModulePkg/FirmwarePerformanceDataTableDxe: " Ard Biesheuvel
2018-05-29  1:32   ` Zeng, Star
2018-05-29  8:49 ` [PATCH v3 0/5] Abstract allocation of PEI accessible memory Ard Biesheuvel

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=E92EE9817A31E24EB0585FDF735412F5B8A5C066@ORSMSX113.amr.corp.intel.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