edk2/OvmfPkg/Library
Stanislaw Grams c0c8ca0ea0 OvmfPkg/PlatformInitLib: restore below-4G low memory detection for TDVF
Commit 0a0919607c ("OvmfPkg/PlatformInitLib: redefine low memory") narrowed
PlatformGetLowMemoryCB() to consider only the first below-4G memory block
whose base address is zero. The change was intended to fix SVSM guests,
where SVSM caves a chunk out of below-4G RAM and OVMF must not stray into
that hole.

TDVF, however, reports its below-4G RAM through the TdHob as two adjacent
resource descriptors:

  [0, 0x800000)              EFI_RESOURCE_SYSTEM_MEMORY   (pre-accepted)
  [0x800000, ~4G)            EFI_RESOURCE_MEMORY_UNACCEPTED

PlatformScanE820Tdx() surfaces both as EfiAcpiAddressRangeMemory E820
entries. After 0a0919607c only the first, tiny 8 MiB block is picked up,
so PlatformInfoHob->LowMemory becomes 0x800000.
In OvmfPkg/PlatformPei/MemDetect.c PublishPeiMemory() this drives:

  LowerMemorySize = 0x00800000            // LowMemory
  PeiMemoryCap    = 0x04F82000            // ~81 MiB
  MemoryBase      = LowerMemorySize - PeiMemoryCap   // UINT32 underflow
                  = 0xFB87E000

Permanent PEI memory is then published at 0xFB87E000, which is not backed
by RAM. TemporaryRamMigration()'s first CopyMem into that phantom range
(observed as 0xFB898000 in the failing log) faults, tearing down the TD.

Fold adjacent below-4G memory blocks into the low-memory span: accept an
entry whose base equals the current LowMemory and advance LowMemory by
its length. LowMemory starts at zero, so the first accepted block at
address 0 still starts the sequence; non-adjacent above-4G or SVSM-carved
blocks continue to be skipped (their base does not match LowMemory); and
the TDVF accepted+unaccepted pair, which is contiguous, is now grouped
correctly.

Co-authored-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Stanislaw Grams <stanislaw.grams@intel.com>
2026-07-07 10:32:12 +00:00
..
AcpiPlatformLib OvmfPkg: move QemuFwCfgAcpi into AcpiPlatformLib 2023-06-23 17:26:37 +00:00
AcpiTimerLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
AmdSvsmLib OvmfPkg/AmdSvsmLib: add AmdSvsmUefiMmRequest 2026-06-12 12:27:27 +00:00
BaseCachingPciExpressLib OvmfPkg: Drop ARM32 Support 2025-09-25 22:04:10 +00:00
BaseMemEncryptSevLib OvmfPkg/BaseMemEncryptSevLib: IGVM data HOB ranges are prevalidated 2026-04-08 20:38:21 +00:00
BaseMemEncryptTdxLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
BasePciCapLib Global: Fix Spelling Errors in PCI/PCIe Definitions 2026-05-08 02:15:34 +00:00
BasePciCapPciSegmentLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
BhyveFwCtlLib OvmfPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
BlobVerifierLibNull AmdSev: Halt on failed blob allocation 2024-06-25 15:27:42 +00:00
CcExitLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
CcProbeLib OvmfPkg: Update CcProbeLib to DxeCcProbeLib 2022-09-06 06:03:45 +00:00
DxePciLibI440FxQ35 OvmfPkg: Remove OVMF IA32 2025-09-09 18:49:32 +00:00
EmuVariableFvbLib OvmfPkg: Remove OVMF IA32 2025-09-09 18:49:32 +00:00
FdtNorFlashQemuLib OvmfPkg: Add no hardcode version of FdtNorFlashQemuLib 2024-06-04 22:51:09 +00:00
FdtSerialPortAddressLib ArmVirtPkg,DynamicTablesPkg,EmbeddedPkg,OvmfPkg: use MdePkg BaseFdtLib 2025-04-30 10:56:03 +00:00
GenericQemuLoadImageLib [QemuLoadImageLib] Prefix initrd=initrd in cmdline 2025-05-26 18:31:34 +02:00
HardwareInfoLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
HashLibTdx OmvfPkg/HashLibTdx: Add HashLibTdx 2024-04-17 03:04:13 +00:00
LoadLinuxLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
LockBoxLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
MemDebugLogLib OvmfPkg/MemDebugLogPeiCoreLib: enable for PEIMs 2026-01-30 15:17:50 +00:00
MemEncryptSevLibNull OvmfPkg: MemEncryptSevLib: Add Null instance 2025-06-19 06:17:18 +00:00
MmPlatformHobProducerLibOvmf OvmfPkg: MmPlatformHobProducerLibOvmf: Fixing misplaced PCDs 2025-11-22 03:20:31 +00:00
MpInitLibDepLib OvmfPkg: Add MpInitLibDepLib 2022-05-11 08:40:53 +00:00
NestedInterruptTplLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
NvVarsFileLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
PciHostBridgeLib OvmfPkg: Remove OVMF IA32 2025-09-09 18:49:32 +00:00
PciHostBridgeLibScan OvmfPkg: Remove OVMF IA32 2025-09-09 18:49:32 +00:00
PciHostBridgeUtilityLib OvmfPkg: Drop ARM32 Support 2025-09-25 22:04:10 +00:00
PeilessStartupLib EmbeddedPkg, OvmfPkg: Produce FV3 HOBs for Extracted FVs 2026-06-13 09:06:33 +00:00
PlatformBmPrintScLib OvmfPkg/PlatformBmPrintScLib: hint at Secure Boot verification 2025-06-10 17:54:56 +00:00
PlatformBootManagerCommonLib OvmfPkg/PlatformBootManagerCommonLib: Introduce OvmfFindLoadOption 2025-03-05 19:43:06 +00:00
PlatformBootManagerLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
PlatformBootManagerLibBhyve OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
PlatformBootManagerLibLight OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
PlatformDebugLibIoPort OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
PlatformFvbLibNull OvmfPkg: Remove OVMF IA32 2025-09-09 18:49:32 +00:00
PlatformHasIoMmuLib OvmfPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:19 -07:00
PlatformInitLib OvmfPkg/PlatformInitLib: restore below-4G low memory detection for TDVF 2026-07-07 10:32:12 +00:00
PlatformSecureLib OvmfPkg: Remove OVMF IA32 2025-09-09 18:49:32 +00:00
PxeBcPcdProducerLib OvmfPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
QemuBootOrderLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
QemuFwCfgLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
QemuFwCfgS3Lib OvmfPkg: Drop ARM32 Support 2025-09-25 22:04:10 +00:00
QemuFwCfgSimpleParserLib OvmfPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
ResetSystemLib OvmfPkg/OvmfXen: Fix XenHypercallSchedOp call in BaseResetShutdownXen 2026-01-19 15:45:25 +00:00
SerializeVariablesLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
SmbiosVersionLib OvmfPkg: Drop ARM32 Support 2025-09-25 22:04:10 +00:00
SmmCpuFeaturesLib OvmfPkg: StandaloneMmCpuFeaturesLib: Introduce SmmCpuFeaturesLib for Ovmf 2025-06-19 06:17:18 +00:00
SmmCpuPlatformHookLibQemu OvmfPkg: Remove OVMF IA32 2025-09-09 18:49:32 +00:00
SmmRelocationLib OvmfPkg: SEC/SMM: Use 256 IDT Descriptors 2026-03-07 03:58:40 +00:00
Tcg2PhysicalPresenceLibNull OvmfPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
Tcg2PhysicalPresenceLibQemu OvmfPkg: align UNI file headers with UNI Spec standard 2026-03-02 19:32:17 +00:00
TdxMailboxLib OvmfPkg: Remove UefiCpuLib from module INFs. 2023-03-10 08:23:56 +00:00
TlsAuthConfigLib OvmfPkg: Drop ARM32 Support 2025-09-25 22:04:10 +00:00
UefiDriverEntryPointFwCfgOverrideLib MdePkg: Move StackCheckLibStaticInit to StackCheckLib 2025-02-07 02:23:11 +00:00
UefiPciCapPciIoLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
VirtioLib OvmfPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
VirtioMmioDeviceLib OvmfPkg: Replace include guards with #pragma once 2026-02-23 21:01:28 +00:00
VirtNorFlashDeviceLib OvmfPkg/VirtNorFlash: Move low level NOR flash functions into library 2025-06-25 04:23:40 +00:00
X86QemuLoadImageLib OvmfPkg: Remove redundant assignment not required after GCC48/49 removal 2026-02-26 15:30:52 +00:00
XenConsoleSerialPortLib OvmfPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
XenHypercallLib OvmfPkg: Remove redundant section name in inf file 2026-06-03 02:18:39 +00:00
XenIoMmioLib OvmfPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
XenPlatformLib OvmfPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
XenRealTimeClockLib OvmfPkg: Align XenRealTimeClockLib function headers with return values 2024-02-09 22:16:32 +00:00