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