Re: [edk2-devel] [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Avoid AP calls gBS service.

2019-07-14 Thread Ni, Ray
Reviewed-by: Ray Ni 

> -Original Message-
> From: Zeng, Star
> Sent: Friday, July 12, 2019 6:53 PM
> To: Dong, Eric ; devel@edk2.groups.io
> Cc: Ni, Ray ; Laszlo Ersek ; Kumar,
> Chandana C ; Zeng, Star
> 
> Subject: RE: [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Avoid AP calls
> gBS service.
> 
> Some minor comments inline.
> 
> > -Original Message-
> > From: Dong, Eric
> > Sent: Friday, July 12, 2019 9:53 AM
> > To: devel@edk2.groups.io
> > Cc: Ni, Ray ; Laszlo Ersek ;
> > Kumar, Chandana C ; Zeng, Star
> > 
> > Subject: [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Avoid AP calls
> > gBS service.
> 
> "gBS service" is not match with the assertion information, gBS is the concept
> in DXE phase.
> So here, please "PEI service" to be accurate.
> 
> >
> > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1972
> >
> > AP calls CollectProcessorData() to collect processor info.
> > CollectProcessorData function finally calls PcdGetSize function to get
> > DynamicPCD PcdCpuFeaturesSetting value. PcdGetSize will use gBS
> 
> Same comments with above.
> 
> > which caused below assert info:
> > Processor Info: Package: 1, MaxCore : 4, MaxThread: 1
> > Package: 0, Valid Core : 4
> > ASSERT [CpuFeaturesPei] c:\projects\jsl\jsl_v1193\Edk2\MdePkg\Library
> > \PeiServicesTablePointerLibIdt\PeiServicesTablePointer.c(48):
> > PeiServices != ((void *) 0)
> >
> > This change uses saved global pcd size instead of calls PcdGetSize to
> > fix this issue.
> >
> > Cc: Ray Ni 
> > Cc: Laszlo Ersek 
> > Cc: Chandana Kumar 
> > Cc: Star Zeng 
> > Signed-off-by: Eric Dong 
> > ---
> >  .../RegisterCpuFeaturesLib/CpuFeaturesInitialize.c  | 13
> > -  .../RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c |
> > 5 +
> >  2 files changed, 13 insertions(+), 5 deletions(-)
> >
> > diff --git
> > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
> > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
> > index aff7ad600c..87bfc64250 100644
> > ---
> > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
> > +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.
> > +++ c
> > @@ -246,19 +246,20 @@ CpuInitDataInitialize (
> >
> >@param[in]  SupportedFeatureMask  The pointer to CPU feature bits
> > mask buffer
> >@param[in]  OrFeatureBitMask  The feature bit mask to do OR
> operation
> > +  @param[in]  BitMaskSize   The CPU feature bits mask buffer size.
> > +
> >  **/
> >  VOID
> >  SupportedMaskOr (
> >IN UINT8   *SupportedFeatureMask,
> > -  IN UINT8   *OrFeatureBitMask
> > +  IN UINT8   *OrFeatureBitMask,
> > +  IN UINT32  BitMaskSize
> >)
> >  {
> >UINTN  Index;
> > -  UINTN  BitMaskSize;
> >UINT8  *Data1;
> >UINT8  *Data2;
> >
> > -  BitMaskSize = PcdGetSize (PcdCpuFeaturesSetting);
> >Data1 = SupportedFeatureMask;
> >Data2 = OrFeatureBitMask;
> >for (Index = 0; Index < BitMaskSize; Index++) { @@ -384,12 +385,14
> > @@ CollectProcessorData (
> >//
> >SupportedMaskOr (
> >  CpuFeaturesData-
> > >InitOrder[ProcessorNumber].FeaturesSupportedMask,
> > -CpuFeature->FeatureMask
> > +CpuFeature->FeatureMask,
> > +CpuFeaturesData->BitMaskSize
> >  );
> >  } else if (CpuFeature->SupportFunc (ProcessorNumber, CpuInfo,
> > CpuFeature->ConfigData)) {
> >SupportedMaskOr (
> >  CpuFeaturesData-
> > >InitOrder[ProcessorNumber].FeaturesSupportedMask,
> > -CpuFeature->FeatureMask
> > +CpuFeature->FeatureMask,
> > +CpuFeaturesData->BitMaskSize
> >  );
> >  }
> >  Entry = Entry->ForwardLink;
> > diff --git
> > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> > index fa0f0b41e2..36aabd7267 100644
> > ---
> > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> > +++
> > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> > @@ -658,6 +658,11 @@ RegisterCpuFeatureWorker (
> >  InitializeListHead (>FeatureList);
> >  InitializeSpinLock (>CpuFlags.MemoryMappedLock);
> >  InitializeSpinLock (>CpuFlags.ConsoleLogLock);
> > +//
> > +// Driver has assumption that these three PCD should has same
> > + buffer
> > size.
> 
> It is library, not driver. So how about "The code has assumption that these
> three PCDs should have same buffer size."?
> The proposed sentence also uses 'PCDs' and 'have'.
> 
> 
> With the comments handled, Reviewed-by: Star Zeng 
> 
> Thanks,
> Star
> 
> > +//
> > +ASSERT (PcdGetSize (PcdCpuFeaturesSetting) == PcdGetSize
> > (PcdCpuFeaturesCapability));
> > +ASSERT (PcdGetSize (PcdCpuFeaturesSetting) == PcdGetSize
> > (PcdCpuFeaturesSupport));
> >  CpuFeaturesData->BitMaskSize = (UINT32) BitMaskSize;
> 

Re: [edk2-devel] [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Avoid AP calls gBS service.

2019-07-12 Thread Zeng, Star
Some minor comments inline.

> -Original Message-
> From: Dong, Eric
> Sent: Friday, July 12, 2019 9:53 AM
> To: devel@edk2.groups.io
> Cc: Ni, Ray ; Laszlo Ersek ; Kumar,
> Chandana C ; Zeng, Star
> 
> Subject: [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Avoid AP calls gBS
> service.

"gBS service" is not match with the assertion information, gBS is the concept 
in DXE phase.
So here, please "PEI service" to be accurate.

> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1972
> 
> AP calls CollectProcessorData() to collect processor info.
> CollectProcessorData function finally calls PcdGetSize function to
> get DynamicPCD PcdCpuFeaturesSetting value. PcdGetSize will use gBS

Same comments with above.

> which caused below assert info:
> Processor Info: Package: 1, MaxCore : 4, MaxThread: 1
> Package: 0, Valid Core : 4
> ASSERT [CpuFeaturesPei] c:\projects\jsl\jsl_v1193\Edk2\MdePkg\Library
> \PeiServicesTablePointerLibIdt\PeiServicesTablePointer.c(48):
> PeiServices != ((void *) 0)
> 
> This change uses saved global pcd size instead of calls PcdGetSize to
> fix this issue.
> 
> Cc: Ray Ni 
> Cc: Laszlo Ersek 
> Cc: Chandana Kumar 
> Cc: Star Zeng 
> Signed-off-by: Eric Dong 
> ---
>  .../RegisterCpuFeaturesLib/CpuFeaturesInitialize.c  | 13 -
>  .../RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c |  5 +
>  2 files changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git
> a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
> b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
> index aff7ad600c..87bfc64250 100644
> --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
> +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
> @@ -246,19 +246,20 @@ CpuInitDataInitialize (
> 
>@param[in]  SupportedFeatureMask  The pointer to CPU feature bits mask
> buffer
>@param[in]  OrFeatureBitMask  The feature bit mask to do OR operation
> +  @param[in]  BitMaskSize   The CPU feature bits mask buffer size.
> +
>  **/
>  VOID
>  SupportedMaskOr (
>IN UINT8   *SupportedFeatureMask,
> -  IN UINT8   *OrFeatureBitMask
> +  IN UINT8   *OrFeatureBitMask,
> +  IN UINT32  BitMaskSize
>)
>  {
>UINTN  Index;
> -  UINTN  BitMaskSize;
>UINT8  *Data1;
>UINT8  *Data2;
> 
> -  BitMaskSize = PcdGetSize (PcdCpuFeaturesSetting);
>Data1 = SupportedFeatureMask;
>Data2 = OrFeatureBitMask;
>for (Index = 0; Index < BitMaskSize; Index++) {
> @@ -384,12 +385,14 @@ CollectProcessorData (
>//
>SupportedMaskOr (
>  CpuFeaturesData-
> >InitOrder[ProcessorNumber].FeaturesSupportedMask,
> -CpuFeature->FeatureMask
> +CpuFeature->FeatureMask,
> +CpuFeaturesData->BitMaskSize
>  );
>  } else if (CpuFeature->SupportFunc (ProcessorNumber, CpuInfo,
> CpuFeature->ConfigData)) {
>SupportedMaskOr (
>  CpuFeaturesData-
> >InitOrder[ProcessorNumber].FeaturesSupportedMask,
> -CpuFeature->FeatureMask
> +CpuFeature->FeatureMask,
> +CpuFeaturesData->BitMaskSize
>  );
>  }
>  Entry = Entry->ForwardLink;
> diff --git
> a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> index fa0f0b41e2..36aabd7267 100644
> --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> +++
> b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
> @@ -658,6 +658,11 @@ RegisterCpuFeatureWorker (
>  InitializeListHead (>FeatureList);
>  InitializeSpinLock (>CpuFlags.MemoryMappedLock);
>  InitializeSpinLock (>CpuFlags.ConsoleLogLock);
> +//
> +// Driver has assumption that these three PCD should has same buffer
> size.

It is library, not driver. So how about "The code has assumption that these 
three PCDs should have same buffer size."?
The proposed sentence also uses 'PCDs' and 'have'.


With the comments handled, Reviewed-by: Star Zeng 

Thanks,
Star

> +//
> +ASSERT (PcdGetSize (PcdCpuFeaturesSetting) == PcdGetSize
> (PcdCpuFeaturesCapability));
> +ASSERT (PcdGetSize (PcdCpuFeaturesSetting) == PcdGetSize
> (PcdCpuFeaturesSupport));
>  CpuFeaturesData->BitMaskSize = (UINT32) BitMaskSize;
>}
>ASSERT (CpuFeaturesData->BitMaskSize == BitMaskSize);
> --
> 2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43654): https://edk2.groups.io/g/devel/message/43654
Mute This Topic: https://groups.io/mt/32437607/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



[edk2-devel] [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Avoid AP calls gBS service.

2019-07-11 Thread Dong, Eric
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1972

AP calls CollectProcessorData() to collect processor info.
CollectProcessorData function finally calls PcdGetSize function to
get DynamicPCD PcdCpuFeaturesSetting value. PcdGetSize will use gBS
which caused below assert info:
Processor Info: Package: 1, MaxCore : 4, MaxThread: 1
Package: 0, Valid Core : 4
ASSERT [CpuFeaturesPei] c:\projects\jsl\jsl_v1193\Edk2\MdePkg\Library
\PeiServicesTablePointerLibIdt\PeiServicesTablePointer.c(48):
PeiServices != ((void *) 0)

This change uses saved global pcd size instead of calls PcdGetSize to
fix this issue.

Cc: Ray Ni 
Cc: Laszlo Ersek 
Cc: Chandana Kumar 
Cc: Star Zeng 
Signed-off-by: Eric Dong 
---
 .../RegisterCpuFeaturesLib/CpuFeaturesInitialize.c  | 13 -
 .../RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c |  5 +
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c 
b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
index aff7ad600c..87bfc64250 100644
--- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
+++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
@@ -246,19 +246,20 @@ CpuInitDataInitialize (
 
   @param[in]  SupportedFeatureMask  The pointer to CPU feature bits mask buffer
   @param[in]  OrFeatureBitMask  The feature bit mask to do OR operation
+  @param[in]  BitMaskSize   The CPU feature bits mask buffer size.
+
 **/
 VOID
 SupportedMaskOr (
   IN UINT8   *SupportedFeatureMask,
-  IN UINT8   *OrFeatureBitMask
+  IN UINT8   *OrFeatureBitMask,
+  IN UINT32  BitMaskSize
   )
 {
   UINTN  Index;
-  UINTN  BitMaskSize;
   UINT8  *Data1;
   UINT8  *Data2;
 
-  BitMaskSize = PcdGetSize (PcdCpuFeaturesSetting);
   Data1 = SupportedFeatureMask;
   Data2 = OrFeatureBitMask;
   for (Index = 0; Index < BitMaskSize; Index++) {
@@ -384,12 +385,14 @@ CollectProcessorData (
   //
   SupportedMaskOr (
 CpuFeaturesData->InitOrder[ProcessorNumber].FeaturesSupportedMask,
-CpuFeature->FeatureMask
+CpuFeature->FeatureMask,
+CpuFeaturesData->BitMaskSize
 );
 } else if (CpuFeature->SupportFunc (ProcessorNumber, CpuInfo, 
CpuFeature->ConfigData)) {
   SupportedMaskOr (
 CpuFeaturesData->InitOrder[ProcessorNumber].FeaturesSupportedMask,
-CpuFeature->FeatureMask
+CpuFeature->FeatureMask,
+CpuFeaturesData->BitMaskSize
 );
 }
 Entry = Entry->ForwardLink;
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c 
b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
index fa0f0b41e2..36aabd7267 100644
--- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
+++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
@@ -658,6 +658,11 @@ RegisterCpuFeatureWorker (
 InitializeListHead (>FeatureList);
 InitializeSpinLock (>CpuFlags.MemoryMappedLock);
 InitializeSpinLock (>CpuFlags.ConsoleLogLock);
+//
+// Driver has assumption that these three PCD should has same buffer size.
+//
+ASSERT (PcdGetSize (PcdCpuFeaturesSetting) == PcdGetSize 
(PcdCpuFeaturesCapability));
+ASSERT (PcdGetSize (PcdCpuFeaturesSetting) == PcdGetSize 
(PcdCpuFeaturesSupport));
 CpuFeaturesData->BitMaskSize = (UINT32) BitMaskSize;
   }
   ASSERT (CpuFeaturesData->BitMaskSize == BitMaskSize);
-- 
2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43622): https://edk2.groups.io/g/devel/message/43622
Mute This Topic: https://groups.io/mt/32437607/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-