Laszlo,

Reviewed-by: Michael Kinney <michael.d.kin...@intel.com>

Mike

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Laszlo 
> Ersek
> Sent: Tuesday, November 3, 2015 1:01 PM
> To: edk2-de...@ml01.01.org
> Subject: [edk2] [PATCH v4 24/41] OvmfPkg: use relaxed AP SMM synchronization 
> mode
> 
> From: Paolo Bonzini <pbonz...@redhat.com>
> 
> Port 0xb2 on QEMU only sends an SMI to the currently executing processor.
> The SMI handler, however, and in particular SmmWaitForApArrival, currently
> expects that SmmControl2DxeTrigger triggers an SMI IPI on all processors
> rather than just the BSP.  Thus all SMM invocations loop for a second (the
> default value of PcdCpuSmmApSyncTimeout) before SmmWaitForApArrival sends
> another SMI IPI to the APs.
> 
> With the default SmmCpuFeaturesLib, 32-bit machines must broadcast SMIs
> because 32-bit machines must reset the MTRRs on each entry to system
> management modes (they have no SMRRs).  However, our virtual platform
> does not have problems with cacheability of SMRAM, so we can use "directed"
> SMIs instead.  To do this, just set 
> gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode
> to 1 (aka SmmCpuSyncModeRelaxedAp).  This fixes SMM on multiprocessor virtual
> machines.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> ---
> 
> Notes:
>     v3:
>     - new in v3
> 
>  OvmfPkg/OvmfPkgIa32.dsc    | 4 ++++
>  OvmfPkg/OvmfPkgIa32X64.dsc | 4 ++++
>  OvmfPkg/OvmfPkgX64.dsc     | 4 ++++
>  3 files changed, 12 insertions(+)
> 
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> index 6e14604..850c2ab 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -404,6 +404,10 @@ [PcdsFixedAtBuild]
>    gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 
> 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0,
> 0x52, 0x68, 0xD0, 0xB4, 0xD1 }
>  !endif
> 
> +!if $(SMM_REQUIRE) == TRUE
> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01
> +!endif
> +
>  !if $(SECURE_BOOT_ENABLE) == TRUE
>    # override the default values from SecurityPkg to ensure images from all 
> sources are verified in secure boot
>    gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index 1c9de14..48960a5 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -410,6 +410,10 @@ [PcdsFixedAtBuild]
>  !endif
> 
>  [PcdsFixedAtBuild.X64]
> +!if $(SMM_REQUIRE) == TRUE
> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01
> +!endif
> +
>  !if $(SECURE_BOOT_ENABLE) == TRUE
>    # override the default values from SecurityPkg to ensure images from all 
> sources are verified in secure boot
>    gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index faf123e..bb93a72 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -409,6 +409,10 @@ [PcdsFixedAtBuild]
>    gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 
> 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0,
> 0x52, 0x68, 0xD0, 0xB4, 0xD1 }
>  !endif
> 
> +!if $(SMM_REQUIRE) == TRUE
> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01
> +!endif
> +
>  !if $(SECURE_BOOT_ENABLE) == TRUE
>    # override the default values from SecurityPkg to ensure images from all 
> sources are verified in secure boot
>    gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04
> --
> 1.8.3.1
> 
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to