Hi, all This is one bug fix. I plan to catch it for 201808 stable tag.
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1978 Thanks Liming > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Liming > Gao > Sent: Saturday, August 10, 2019 10:10 PM > To: devel@edk2.groups.io > Cc: Mike Turner <mike...@microsoft.com>; Wang, Jian J > <jian.j.w...@intel.com>; Wu, Hao A <hao.a...@intel.com>; Bi, Dandan > <dandan...@intel.com> > Subject: [edk2-devel] [Patch] MdeModulePkg DxeCore: Fix for missing MAT update > > From: Mike Turner <mike...@microsoft.com> > > The Fpdt driver (FirmwarePerformanceDxe) saves a memory address across > reboots, and then does an AllocatePage for that memory address. > If, on this boot, that memory comes from a Runtime memory bucket, > the MAT table is not updated. This causes Windows to boot into Recovery. > > This patch blocks the memory manager from changing the page > from a special bucket to a different memory type. Once the buckets are > allocated, we freeze the memory ranges for the OS, and fragmenting > the special buckets will cause errors resuming from hibernate. > > This patch is cherry pick from Project Mu: > https://github.com/microsoft/mu_basecore/commit/a9be767d9be96af94016ebd391ea6f340920735a > With the minor change, > 1. Update commit message format to keep the message in 80 characters one line. > 2. Remove // MU_CHANGE comments in source code. > > Cc: Jian J Wang <jian.j.w...@intel.com> > Cc: Hao A Wu <hao.a...@intel.com> > Cc: Dandan Bi <dandan...@intel.com> > Signed-off-by: Liming Gao <liming....@intel.com> > --- > MdeModulePkg/Core/Dxe/Mem/Page.c | 43 > ++++++++++++++++++++++++++++++++++------ > 1 file changed, 37 insertions(+), 6 deletions(-) > > diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c > b/MdeModulePkg/Core/Dxe/Mem/Page.c > index bd9e116aa5..637518889d 100644 > --- a/MdeModulePkg/Core/Dxe/Mem/Page.c > +++ b/MdeModulePkg/Core/Dxe/Mem/Page.c > @@ -1265,12 +1265,13 @@ CoreInternalAllocatePages ( > IN BOOLEAN NeedGuard > ) > { > - EFI_STATUS Status; > - UINT64 Start; > - UINT64 NumberOfBytes; > - UINT64 End; > - UINT64 MaxAddress; > - UINTN Alignment; > + EFI_STATUS Status; > + UINT64 Start; > + UINT64 NumberOfBytes; > + UINT64 End; > + UINT64 MaxAddress; > + UINTN Alignment; > + EFI_MEMORY_TYPE CheckType; > > if ((UINT32)Type >= MaxAllocateType) { > return EFI_INVALID_PARAMETER; > @@ -1321,6 +1322,7 @@ CoreInternalAllocatePages ( > // if (Start + NumberOfBytes) rolls over 0 or > // if Start is above MAX_ALLOC_ADDRESS or > // if End is above MAX_ALLOC_ADDRESS, > + // if Start..End overlaps any tracked MemoryTypeStatistics range > // return EFI_NOT_FOUND. > // > if (Type == AllocateAddress) { > @@ -1336,6 +1338,35 @@ CoreInternalAllocatePages ( > (End > MaxAddress)) { > return EFI_NOT_FOUND; > } > + > + // Problem summary > + > + /* > + A driver is allowed to call AllocatePages using an AllocateAddress type. > This type of > + AllocatePage request the exact physical address if it is not used. The > existing code > + will allow this request even in 'special' pages. The problem with this > is that the > + reason to have 'special' pages for OS hibernate/resume is defeated as > memory is > + fragmented. > + */ > + > + for (CheckType = (EFI_MEMORY_TYPE) 0; CheckType < EfiMaxMemoryType; > CheckType++) { > + if (MemoryType != CheckType && > + mMemoryTypeStatistics[CheckType].Special && > + mMemoryTypeStatistics[CheckType].NumberOfPages > 0) { > + if (Start >= mMemoryTypeStatistics[CheckType].BaseAddress && > + Start <= mMemoryTypeStatistics[CheckType].MaximumAddress) { > + return EFI_NOT_FOUND; > + } > + if (End >= mMemoryTypeStatistics[CheckType].BaseAddress && > + End <= mMemoryTypeStatistics[CheckType].MaximumAddress) { > + return EFI_NOT_FOUND; > + } > + if (Start < mMemoryTypeStatistics[CheckType].BaseAddress && > + End > mMemoryTypeStatistics[CheckType].MaximumAddress) { > + return EFI_NOT_FOUND; > + } > + } > + } > } > > if (Type == AllocateMaxAddress) { > -- > 2.13.0.windows.1 > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#45318): https://edk2.groups.io/g/devel/message/45318 Mute This Topic: https://groups.io/mt/32821535/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-