From: Ard Biesheuvel Date: Thu, 18 Feb 2016 08:59:09 +0000 (+0100) Subject: ArmVirtPkg: ArmVirtQemu: expose only 64-bit entry point for v3.0+ SMBIOS X-Git-Tag: edk2-stable201903~7840 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=ca6d61b22658e6d13b4a73589f5e5df0b0e7ba03 ArmVirtPkg: ArmVirtQemu: expose only 64-bit entry point for v3.0+ SMBIOS The legacy 32-bit SMBIOS entry point has little use on AARCH64 systems, since many such systems have no 32-bit addressable physical RAM, and so OSes that implement SMBIOS will have to be able to deal with the 64-bit entry point anyway. Given that the OS will map main memory in 1 GB chunks if it can, and that punching a page sized hole (e.g., for SMBIOS data) into it will result in the whole 1 GB chunk being mapped using 2 MB and 4 KB blocks instead, it is important to group memory reservations from the OS as much as we can, and allocating below 4 GB for no good reason interferes with that. This is especially important under virtualization, considering that each *level* of lookup at stage 1 (the guest virtual page table) will result in a full page table walk at stage 2 (the guest PA to host PA mapping). So expose only the 64-bit entry point when the SMBIOS tables adhere to version 3.0 or later. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel Reviewed-by: Laszlo Ersek --- diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index e6440ec5da..e2641fd2c2 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -169,6 +169,14 @@ # support anything bigger, even if the host hardware does gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|40 + # Clearing BIT0 in this PCD prevents installing a 32-bit SMBIOS entry point, + # if the entry point version is >= 3.0. AARCH64 OSes cannot assume the + # presence of the 32-bit entry point anyway (because many AARCH64 systems + # don't have 32-bit addressable physical RAM), and the additional allocations + # below 4 GB needlessly fragment the memory map. So expose the 64-bit entry + # point only, for entry point versions >= 3.0. + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosEntryPointProvideMethod|0x2 + [PcdsDynamicDefault.common] ## If TRUE, OvmfPkg/AcpiPlatformDxe will not wait for PCI # enumeration to complete before installing ACPI tables.