Star, Thanks for adding the comments
Reviewed-by: Michael D Kinney <[email protected]> Mike > -----Original Message----- > From: Yao, Jiewen > Sent: Wednesday, April 4, 2018 1:13 AM > To: Zeng, Star <[email protected]>; edk2- > [email protected] > Cc: Ni, Ruiyu <[email protected]>; Yi Li > <[email protected]>; Dong, Eric > <[email protected]>; Renhao Liang > <[email protected]>; Gao, Liming > <[email protected]>; Heyi Guo <[email protected]>; > Kinney, Michael D <[email protected]>; Zeng, > Star <[email protected]> > Subject: RE: [edk2] [PATCH V2] MdeModulePkg/Gcd: Filter > gCpu->SetMemoryAttributes() calls > > Thanks. > > Reviewed-by: [email protected] > > > -----Original Message----- > > From: edk2-devel [mailto:edk2-devel- > [email protected]] On Behalf Of Star > > Zeng > > Sent: Wednesday, April 4, 2018 10:08 AM > > To: [email protected] > > Cc: Ni, Ruiyu <[email protected]>; Yi Li > <[email protected]>; Dong, Eric > > <[email protected]>; Renhao Liang > <[email protected]>; Gao, Liming > > <[email protected]>; Heyi Guo > <[email protected]>; Kinney, Michael D > > <[email protected]>; Zeng, Star > <[email protected]> > > Subject: [edk2] [PATCH V2] MdeModulePkg/Gcd: Filter > > gCpu->SetMemoryAttributes() calls > > > > From: "Kinney, Michael D" > <[email protected]> > > > > This patch fixes an issue with VlvTbltDevicePkg > introduced > > by commit 5b91bf82c67b586b9588cbe4bbffa1588f6b5926. > > > > The history is as below. > > To support heap guard feature, > > 14dde9e903bb9a719ebb8f3381da72b19509bc36 > > added support for SetMemorySpaceAttributes() to > handle page attributes, > > but after that, a combination of CPU arch attributes > and other attributes > > was not allowed anymore, for example, UC + RUNTIME. > It is a regression. > > Then 5b91bf82c67b586b9588cbe4bbffa1588f6b5926 was to > fix the regression, > > and we thought 0 CPU arch attributes may be used to > clear CPU arch > > attributes, so 0 CPU arch attributes was allowed to > be sent to > > gCpu->SetMemoryAttributes(). > > > > But some implementation of CPU driver may return > error for 0 CPU arch > > attributes. That fails the case that caller just > calls > > SetMemorySpaceAttributes() with none CPU arch > attributes (for example, > > RUNTIME), and the purpose of the case is not to clear > CPU arch attributes. > > > > This patch filters the call to gCpu- > >SetMemoryAttributes() > > if the requested attributes is 0. It also removes > the #define > > INVALID_CPU_ARCH_ATTRIBUTES that is no longer used. > > > > Cc: Heyi Guo <[email protected]> > > Cc: Yi Li <[email protected]> > > Cc: Renhao Liang <[email protected]> > > Cc: Star Zeng <[email protected]> > > Cc: Eric Dong <[email protected]> > > Cc: Liming Gao <[email protected]> > > Cc: Jian J Wang <[email protected]> > > Cc: Ruiyu Ni <[email protected]> > > Signed-off-by: Michael D Kinney > <[email protected]> > > Signed-off-by: Star Zeng <[email protected]> > > Contributed-under: TianoCore Contribution Agreement > 1.1 > > --- > > MdeModulePkg/Core/Dxe/Gcd/Gcd.c | 25 > ++++++++++++++++++++++--- > > 1 file changed, 22 insertions(+), 3 deletions(-) > > > > diff --git a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c > > b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c > > index 907245a3f512..31ddf9c3bb51 100644 > > --- a/MdeModulePkg/Core/Dxe/Gcd/Gcd.c > > +++ b/MdeModulePkg/Core/Dxe/Gcd/Gcd.c > > @@ -48,8 +48,6 @@ WITHOUT WARRANTIES OR > REPRESENTATIONS OF ANY > > KIND, EITHER EXPRESS OR IMPLIED. > > #define NONEXCLUSIVE_MEMORY_ATTRIBUTES > (EFI_MEMORY_XP | > > EFI_MEMORY_RP | \ > > > EFI_MEMORY_RO) > > > > -#define INVALID_CPU_ARCH_ATTRIBUTES 0xffffffff > > - > > // > > // Module Variables > > // > > @@ -873,7 +871,21 @@ CoreConvertSpace ( > > // Call CPU Arch Protocol to attempt to set > attributes on the range > > // > > CpuArchAttributes = ConverToCpuArchAttributes > (Attributes); > > - if (CpuArchAttributes != > INVALID_CPU_ARCH_ATTRIBUTES) { > > + // > > + // CPU arch attributes include page attributes > and cache attributes. > > + // Only page attributes supports to be cleared, > but not cache attributes. > > + // Caller is expected to use > GetMemorySpaceDescriptor() to get the current > > + // attributes, AND/OR attributes, and then calls > > SetMemorySpaceAttributes() > > + // to set the new attributes. > > + // So 0 CPU arch attributes should not happen as > memory should always > > have > > + // a cache attribute (no matter UC or WB, etc). > > + // > > + // Here, 0 CPU arch attributes will be filtered > to be compatible with the > > + // case that caller just calls > SetMemorySpaceAttributes() with none CPU > > + // arch attributes (for example, RUNTIME) as the > purpose of the case is not > > + // to clear CPU arch attributes. > > + // > > + if (CpuArchAttributes != 0) { > > if (gCpu == NULL) { > > Status = EFI_NOT_AVAILABLE_YET; > > } else { > > @@ -936,6 +948,13 @@ CoreConvertSpace ( > > // Set attributes operation > > // > > case GCD_SET_ATTRIBUTES_MEMORY_OPERATION: > > + if (CpuArchAttributes == 0) { > > + // > > + // Keep original CPU arch attributes when > caller just calls > > + // SetMemorySpaceAttributes() with none CPU > arch attributes (for > > example, RUNTIME). > > + // > > + Attributes |= (Entry->Attributes & > > (EXCLUSIVE_MEMORY_ATTRIBUTES | > NONEXCLUSIVE_MEMORY_ATTRIBUTES)); > > + } > > Entry->Attributes = Attributes; > > break; > > // > > -- > > 2.7.0.windows.1 > > > > _______________________________________________ > > 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

