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

Reply via email to