On 22 February 2016 at 11:24, Laszlo Ersek <[email protected]> wrote: > On 02/22/16 04:35, Ni, Ruiyu wrote: >> Ard, >> So the final decision between you and Jiewen is a new PCD is still needed? >> If so, could you move the PCD to MdeModulePkg? because the MdeModulePkg/BDS >> actually may also need this change if it's used in ARM64 platform and >> MdeModulePkg >> shouldn't depend on a PCD defined in IntelFrameworkModulePkg. > > Good point; I forgot about the possibility that a similar allocation > could be made in MdeModulePkg's BDS driver. >
OK, I will change this. > (Also, although it's not urgent, it would be nice if we could again > think about migrating OVMF to the newest BDS in MdeModulePkg. Then > hopefully we'll have learned enough to migrate ArmVirtPkg too.) > I understand very little about how all the components interact. I was also surprised we use BdsDxe in IntelFrameworkModulePkg, and not the generic one (which contains the exact same code for the perfdata allocation below 4 GB) >> ________________________________________ >> From: edk2-devel [[email protected]] on behalf of Laszlo Ersek >> [[email protected]] >> Sent: Friday, February 19, 2016 21:40 >> To: Ard Biesheuvel; [email protected]; Tian, Feng; Zeng, Star; >> [email protected]; [email protected]; Fan, Jeff; Yao, Jiewen >> Cc: Gao, Liming >> Subject: Re: [edk2] [PATCH v3 2/4] IntelFrameworkModulePkg: BdsDxe: only >> allocate below 4 GB if needed >> >> On 02/19/16 14:15, Ard Biesheuvel wrote: >>> The reserved region for storing performance data is allocated below 4 GB, >>> so that its contents are accessible from PEI upon S3 resume. However, this >>> is a X64 pecularity, and on AARCH64 systems, which does not have this >>> restriction (nor does it have S3, btw), this limit may cause the allocation >>> to fail (if the platform does not have memory below 4 GB) or needlessly >>> fragment the memory map if it does succeed. >>> >>> So make this behavior conditional, based on the new PcdPeiAllocMemLimit4GB >>> PCD, which defaults to TRUE, but can be overridden by platforms if they >>> prefer allocations of PEI accessible memory to be served from anywhere. >>> >>> Contributed-under: TianoCore Contribution Agreement 1.0 >>> Signed-off-by: Ard Biesheuvel <[email protected]> >>> --- >>> IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec | 6 ++++++ >>> IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf | 7 ++++--- >>> IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c | 13 +++++++++++-- >>> 3 files changed, 21 insertions(+), 5 deletions(-) >>> >>> diff --git a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec >>> b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec >>> index 8bbde8e2c9c8..005d356f5938 100644 >>> --- a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec >>> +++ b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec >>> @@ -161,6 +161,12 @@ [PcdsFeatureFlag] >>> # @Prompt Enable Boot Logo only >>> >>> gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootlogoOnlyEnable|FALSE|BOOLEAN|0x00010048 >>> >>> + ## Indicates whether allocations for PEI accessible memory should be >>> below the 4 GB mark >>> + # TRUE - PEI accessible memory should be allocated below 4 GB.<BR> >>> + # FALSE - PEI accessible memory may be allocated anywhere.<BR> >>> + # @Prompt Allocated PEI accessible memory below 4 GB >>> + >>> gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPeiAllocMemLimit4GB|TRUE|BOOLEAN|0x00010049 >>> + >>> [PcdsFixedAtBuild, PcdsPatchableInModule] >>> ## FFS filename to find the default BMP Logo file. >>> # @Prompt FFS Name of Boot Logo File >>> diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf >>> b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf >>> index 6afb8a09df9c..fa210836f410 100644 >>> --- a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf >>> +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf >>> @@ -181,9 +181,10 @@ [Protocols] >>> gEdkiiVariableLockProtocolGuid ## SOMETIMES_CONSUMES >>> >>> [FeaturePcd] >>> - gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangDeprecate ## >>> CONSUMES >>> - gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport ## >>> CONSUMES >>> - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootlogoOnlyEnable ## >>> CONSUMES >>> + gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangDeprecate ## >>> CONSUMES >>> + gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport ## >>> CONSUMES >>> + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootlogoOnlyEnable ## >>> CONSUMES >>> + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPeiAllocMemLimit4GB ## >>> CONSUMES >>> >>> [Pcd] >>> gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangCodes ## >>> SOMETIMES_CONSUMES >>> diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c >>> b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c >>> index ae7ad2153c51..3b524db94b3d 100644 >>> --- a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c >>> +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c >>> @@ -474,14 +474,23 @@ BdsAllocateMemoryForPerformanceData ( >>> EFI_STATUS Status; >>> EFI_PHYSICAL_ADDRESS AcpiLowMemoryBase; >>> EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; >>> + EFI_ALLOCATE_TYPE AllocType; >>> >>> - AcpiLowMemoryBase = 0x0FFFFFFFFULL; >>> + // >>> + // The memory we allocate here must be accessible from PEI at resume. >>> + // >>> + if (FeaturePcdGet (PcdPeiAllocMemLimit4GB)) { >>> + AcpiLowMemoryBase = 0x0FFFFFFFFULL; >>> + AllocType = AllocateMaxAddress; >>> + } else { >>> + AllocType = AllocateAnyPages; >>> + } >>> >>> // >>> // Allocate a block of memory that will contain performance data to OS. >>> // >>> Status = gBS->AllocatePages ( >>> - AllocateMaxAddress, >>> + AllocType, >>> EfiReservedMemoryType, >>> EFI_SIZE_TO_PAGES (PERF_DATA_MAX_LENGTH), >>> &AcpiLowMemoryBase >>> >> >> My review is of course not authoritative for this package, but still: >> >> Reviewed-by: Laszlo Ersek <[email protected]> >> _______________________________________________ >> edk2-devel mailing list >> [email protected] >> https://lists.01.org/mailman/listinfo/edk2-devel >> > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

