On 10/29/15 02:32, Jordan Justen wrote:
> By setting this PCD, we allow the CpuDxe driver to proceed earlier
> after all of the processors have started.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com>
> Cc: Jeff Fan <jeff....@intel.com>
> Cc: Laszlo Ersek <ler...@redhat.com>
> ---
>  OvmfPkg/OvmfPkgIa32.dsc             |  2 ++
>  OvmfPkg/OvmfPkgIa32X64.dsc          |  2 ++
>  OvmfPkg/OvmfPkgX64.dsc              |  2 ++
>  OvmfPkg/PlatformPei/Platform.c      | 17 +++++++++++++++++
>  OvmfPkg/PlatformPei/PlatformPei.inf |  1 +
>  5 files changed, 24 insertions(+)
> 
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> index 77fd21c..43b02ae 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -379,6 +379,8 @@
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|FALSE
>    gEfiMdeModulePkgTokenSpaceGuid.PcdPropertiesTableEnable|FALSE
>  
> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber|64
> +
>  
> ################################################################################
>  #
>  # Components Section - list of all EDK II Modules needed by this Platform.
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index 47cc311..f6360a6 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -385,6 +385,8 @@
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|FALSE
>    gEfiMdeModulePkgTokenSpaceGuid.PcdPropertiesTableEnable|FALSE
>  
> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber|64
> +
>  
> ################################################################################
>  #
>  # Components Section - list of all EDK II Modules needed by this Platform.
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index 44b9c79..e851df9 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -384,6 +384,8 @@
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|FALSE
>    gEfiMdeModulePkgTokenSpaceGuid.PcdPropertiesTableEnable|FALSE
>  
> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber|64
> +

Please add a dynamic default here for PcdCpuApInitTimeOutInMicroSeconds
as well (the declaration in UefiCpuPkg.dec allows that already). I think
the default can simply copy the UefiCpuPkg default, same as
PcdCpuMaxLogicalProcessorNumber does.

>  
> ################################################################################
>  #
>  # Components Section - list of all EDK II Modules needed by this Platform.
> diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c
> index a6d9616..f465f44 100644
> --- a/OvmfPkg/PlatformPei/Platform.c
> +++ b/OvmfPkg/PlatformPei/Platform.c
> @@ -306,6 +306,21 @@ NoexecDxeInitialization (
>  }
>  
>  VOID
> +UpdateMaxNumberOfProcessors (
> +  VOID
> +  )
> +{
> +  UINT32 MaxProcessors;
> +
> +  if (QemuFwCfgIsAvailable ()) {
> +    QemuFwCfgSelectItem (QemuFwCfgItemSmpCpuCount);
> +    MaxProcessors = (UINT32) QemuFwCfgRead16 ();

I don't think the cast is necessary, but if you'd like to keep it, then
please remove the space character after (UINT32).

> +    ASSERT (MaxProcessors > 0);
> +    PcdSet32 (PcdCpuMaxLogicalProcessorNumber, MaxProcessors);

I think that when this branch is active, then
PcdCpuApInitTimeOutInMicroSeconds should *also* be set, namely to
MAX_UINT32 (~71 minutes, the closest we can get to "infinity"). When
this hint is available from QEMU, then we should practically disable the
timeout option in CpuDxe's AP counting.

> +  }
> +}
> +
> +VOID
>  MiscInitialization (
>    VOID
>    )
> @@ -327,6 +342,8 @@ MiscInitialization (
>    //
>    BuildCpuHob (mPhysMemAddressWidth, 16);
>  
> +  UpdateMaxNumberOfProcessors ();
> +

This will run on the S3 resume path as well. That's probably the safe
choice, yes.

>    //
>    // Determine platform type and save Host Bridge DID to PCD
>    //
> diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf 
> b/OvmfPkg/PlatformPei/PlatformPei.inf
> index c2c7da9..da23141 100644
> --- a/OvmfPkg/PlatformPei/PlatformPei.inf
> +++ b/OvmfPkg/PlatformPei/PlatformPei.inf
> @@ -86,6 +86,7 @@
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack
>    gEfiMdeModulePkgTokenSpaceGuid.PcdPropertiesTableEnable
>    gUefiCpuPkgTokenSpaceGuid.PcdCpuLocalApicBaseAddress
> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber
>  
>  [Ppis]
>    gEfiPeiMasterBootModePpiGuid
> 

Thanks!
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to