Publich branch: <https://github.com/lersek/edk2/commits/smm3_v4>.
Fresh test environment and results: * Host kernel: - Upstream Linux "kvm/queue", at 9f64d2c75fa6. The relevant patches are: KVM: x86: add read_phys to x86_emulate_ops KVM: x86: handle SMBASE as physical address in RSM KVM: x86: allow RSM from 64-bit mode - No patches pending on the KVM mailing list. * QEMU: - Current upstream "master", at 79cf9fad341e. - No patches pending on the QEMU mailing list. * QEMU command line options: please refer to the last patch in the series. * Results (all tests used 4 VCPUs): accel bits guest OS OS boots efibootmgr works on S3 resume ----- ---- --------------- -------- ------------------- --------- KVM 32 Fedlet 20141209 pass AP and BSP pass KVM 64 F22 Workstation pass AP and BSP pass[1] KVM 64 Windows 8.1 pass n/a pass[1] TCG 32 Fedlet 20141209 pass AP and BSP pass TCG 64 F22 Workstation pass AP and BSP fail[2] [1] Requires the Ia32X64 build of OVMF; S3Resume2Pei currently lacks support for pure X64. [2] S3 resume fails with Ia32X64 too (that is, not due to the known S3Resume2Pei<->X64 limitation). The guest crashes *between* logging "Close all SMRAM regions before executing boot script" and "Lock all SMRAM regions before executing boot script" (i.e., the second message is not reached). We can debug this later, incrementally. With respect to the above, I'm proposing this version of the series for merging, dependent on review feedback. Changes relative to v3: * Obviated by other patches (occasionally in other components, like KVM), hence dropped: [PATCH v3 01/52] UefiCpuPkg: CpuDxe: Fix ASSERT() when only 1 CPU detected [PATCH v3 02/52] UefiCpuPkg: PiSmmCpuDxeSmm: prepare PT in InitPaging before filling in PDE [PATCH v3 03/52] UefiCpuPkg: PiSmmCpuDxeSmm: do not execute RSM from 64-bit mode * The following have been committed from v3: [PATCH v3 04/52] UefiCpuPkg: CpuDxe: broadcast MTRR changes to APs [PATCH v3 39/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: strip trailing whitespace [PATCH v3 40/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: rewrap source code to 79 chars [PATCH v3 41/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: fix VALID_ARCHITECTURES in INF [PATCH v3 42/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: remove FvbDevLock field [PATCH v3 43/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: remove FvbScratchSpace field [PATCH v3 44/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: no dual addressing needed [PATCH v3 45/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: split out runtime DXE specifics [PATCH v3 46/52] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: clean up includes and libraries * New in v4: [PATCH v4 18/41] OvmfPkg: select LocalApicLib instance with x2apic support if SMM_REQUIRE [PATCH v4 25/41] OvmfPkg: any AP in SMM should not wait for the BSP for more than 100 ms * Changed in v4: - [PATCH v4 06/41] OvmfPkg: PlatformPei: account for TSEG size with PcdSmmSmramRequire set has been updated trivially (just the default TSEG size in the .dec), and therefore [PATCH v3 51/52] OvmfPkg: double the SMRAM (TSEG) size for the 64-bit DXE phase builds got dropped. This has been noted on v4 06/41 as well. - Other changes (see the individual patches for notes): [PATCH v4 26/41] OvmfPkg: build PiSmmCpuDxeSmm for -D SMM_REQUIRE [PATCH v4 41/41] OvmfPkg: README: document SMM status * No changes, just picked up review tags received for v3: [PATCH v4 37/41] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: add DXE_SMM_DRIVER build [PATCH v4 38/41] OvmfPkg: QemuFlashFvbServicesRuntimeDxe: adhere to -D SMM_REQUIRE [PATCH v4 39/41] OvmfPkg: consolidate variable driver stack in DSC and FDF files [PATCH v4 40/41] OvmfPkg: pull in SMM-based variable driver stack Cc: Jordan Justen <jordan.l.jus...@intel.com> Cc: Michael Kinney <michael.d.kin...@intel.com> Cc: Paolo Bonzini <pbonz...@redhat.com> Thanks Laszlo Laszlo Ersek (34): OvmfPkg: introduce -D SMM_REQUIRE and PcdSmmSmramRequire OvmfPkg: Sec: force reinit of BaseExtractGuidedSectionLib handler table OvmfPkg: Sec: assert the build-time calculated end of the scratch buffer OvmfPkg: decompress FVs on S3 resume if SMM_REQUIRE is set OvmfPkg: PlatformPei: allow caching in AddReservedMemoryBaseSizeHob() OvmfPkg: PlatformPei: account for TSEG size with PcdSmmSmramRequire set OvmfPkg: add PEIM for providing TSEG-as-SMRAM during PEI OvmfPkg: add DXE_DRIVER for providing TSEG-as-SMRAM during boot-time DXE OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER OvmfPkg: pull in the SMM IPL and SMM core OvmfPkg: pull in CpuIo2Smm driver OvmfPkg: AcpiS3SaveDxe: don't fake LockBox protocol if SMM_REQUIRE OvmfPkg: LockBox: -D SMM_REQUIRE excludes our fake lockbox OvmfPkg: LockBox: use SMM stack with -D SMM_REQUIRE OvmfPkg: resolve ReportStatusCodeLib for DXE_SMM_DRIVER modules OvmfPkg: resolve CpuExceptionHandlerLib for DXE_SMM_DRIVER modules OvmfPkg: select LocalApicLib instance with x2apic support if SMM_REQUIRE OvmfPkg: set gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmEnableBspElection to FALSE OvmfPkg: any AP in SMM should not wait for the BSP for more than 100 ms OvmfPkg: build PiSmmCpuDxeSmm for -D SMM_REQUIRE OvmfPkg: add skeleton QuarkPort/CpuS3DataDxe OvmfPkg: QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.StartupVector OvmfPkg: QuarkPort/CpuS3DataDxe: handle IDT, GDT and MCE in ACPI_CPU_DATA OvmfPkg: QuarkPort/CpuS3DataDxe: handle StackAddress and StackSize OvmfPkg: import CpuConfigLib header from Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg OvmfPkg: QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.NumberOfCpus OvmfPkg: QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.MtrrTable OvmfPkg: QuarkPort/CpuS3DataDxe: handle register tables in ACPI_CPU_DATA OvmfPkg: build QuarkPort/CpuS3DataDxe for -D SMM_REQUIRE OvmfPkg: QemuFlashFvbServicesRuntimeDxe: add DXE_SMM_DRIVER build OvmfPkg: QemuFlashFvbServicesRuntimeDxe: adhere to -D SMM_REQUIRE OvmfPkg: consolidate variable driver stack in DSC and FDF files OvmfPkg: pull in SMM-based variable driver stack OvmfPkg: README: document SMM status Michael Kinney (1): OvmfPkg: resolve DebugAgentLib for DXE_SMM_DRIVER modules Paolo Bonzini (6): OvmfPkg: import SmmCpuFeaturesLib from UefiCpuPkg OvmfPkg: SmmCpuFeaturesLib: remove unnecessary bits OvmfPkg: SmmCpuFeaturesLib: implement SMRAM state save map access OvmfPkg: SmmCpuFeaturesLib: customize state save map format OvmfPkg: use relaxed AP SMM synchronization mode OvmfPkg: port CpuS3DataDxe to X64 OvmfPkg/OvmfPkg.dec | 29 + OvmfPkg/OvmfPkgIa32.dsc | 124 ++- OvmfPkg/OvmfPkgIa32X64.dsc | 124 ++- OvmfPkg/OvmfPkgX64.dsc | 124 ++- OvmfPkg/OvmfPkgIa32.fdf | 57 +- OvmfPkg/OvmfPkgIa32X64.fdf | 57 +- OvmfPkg/OvmfPkgX64.fdf | 57 +- OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf | 3 +- OvmfPkg/Library/LockBoxLib/LockBoxBaseLib.inf | 3 + OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf | 3 + OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf | 38 + OvmfPkg/PlatformPei/PlatformPei.inf | 5 + OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf | 2 + OvmfPkg/QemuFlashFvbServicesRuntimeDxe/{FvbServicesRuntimeDxe.inf => FvbServicesSmm.inf} | 27 +- OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf | 107 +++ OvmfPkg/Sec/SecMain.inf | 6 + OvmfPkg/SmmAccess/SmmAccess2Dxe.inf | 57 ++ OvmfPkg/SmmAccess/SmmAccessPei.inf | 70 ++ OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf | 65 ++ OvmfPkg/Include/Register/QemuSmramSaveStateMap.h | 184 +++++ OvmfPkg/PlatformPei/Platform.h | 3 +- OvmfPkg/QuarkPort/CpuS3DataDxe/Cpu.h | 97 +++ OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecificDef.h | 57 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.h | 69 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.h | 187 +++++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpService.h | 49 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecificDef.h | 59 ++ OvmfPkg/QuarkPort/Include/Library/CpuConfigLib.h | 671 +++++++++++++++++ OvmfPkg/SmmAccess/SmramInternal.h | 89 +++ OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c | 14 +- OvmfPkg/Library/LockBoxLib/LockBoxLib.c | 2 + OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c | 790 ++++++++++++++++++++ OvmfPkg/PlatformPei/Fv.c | 27 +- OvmfPkg/PlatformPei/MemDetect.c | 85 ++- OvmfPkg/PlatformPei/Platform.c | 9 +- OvmfPkg/PlatformPei/Xen.c | 2 +- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c | 3 + OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c | 69 ++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c | 1 + OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecific.c | 105 +++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.c | 93 +++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.c | 298 ++++++++ OvmfPkg/QuarkPort/CpuS3DataDxe/ProcessorConfig.c | 335 +++++++++ OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecific.c | 108 +++ OvmfPkg/Sec/SecMain.c | 52 +- OvmfPkg/SmmAccess/SmmAccess2Dxe.c | 156 ++++ OvmfPkg/SmmAccess/SmmAccessPei.c | 446 +++++++++++ OvmfPkg/SmmAccess/SmramInternal.c | 188 +++++ OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c | 365 +++++++++ OvmfPkg/DecomprScratchEnd.fdf.inc | 72 ++ OvmfPkg/OvmfPkg.fdf.inc | 2 + OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.S | 56 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.asm | 69 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/X64/CpuAsm.nasm | 58 ++ OvmfPkg/README | 53 ++ 55 files changed, 5789 insertions(+), 92 deletions(-) create mode 100644 OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf copy OvmfPkg/QemuFlashFvbServicesRuntimeDxe/{FvbServicesRuntimeDxe.inf => FvbServicesSmm.inf} (75%) create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf create mode 100644 OvmfPkg/SmmAccess/SmmAccess2Dxe.inf create mode 100644 OvmfPkg/SmmAccess/SmmAccessPei.inf create mode 100644 OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf create mode 100644 OvmfPkg/Include/Register/QemuSmramSaveStateMap.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/Cpu.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecificDef.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpService.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecificDef.h create mode 100644 OvmfPkg/QuarkPort/Include/Library/CpuConfigLib.h create mode 100644 OvmfPkg/SmmAccess/SmramInternal.h create mode 100644 OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c create mode 100644 OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecific.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/ProcessorConfig.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecific.c create mode 100644 OvmfPkg/SmmAccess/SmmAccess2Dxe.c create mode 100644 OvmfPkg/SmmAccess/SmmAccessPei.c create mode 100644 OvmfPkg/SmmAccess/SmramInternal.c create mode 100644 OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c create mode 100644 OvmfPkg/DecomprScratchEnd.fdf.inc create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.S create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.asm create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/X64/CpuAsm.nasm -- 1.8.3.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel