From 43f3cfce19a713fd05cc5bc400b5bf6b79b19a9b Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Tue, 10 May 2022 20:50:44 +0800 Subject: [PATCH] OvmfPkg: Check for QemuFwCfg availability before accessing it There are few places in the codebase assuming QemuFwCfg will be present and supported, which can cause some issues when trying to rely on the QemuFwCfgLibNull implementation of QemuFwCfgLib. Signed-off-by: Sebastien Boeuf Acked-by: Jiewen Yao --- OvmfPkg/Library/PlatformInitLib/Platform.c | 9 ++++++--- OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c | 8 +++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/OvmfPkg/Library/PlatformInitLib/Platform.c b/OvmfPkg/Library/PlatformInitLib/Platform.c index 60a30a01f3..ee802fd684 100644 --- a/OvmfPkg/Library/PlatformInitLib/Platform.c +++ b/OvmfPkg/Library/PlatformInitLib/Platform.c @@ -410,14 +410,17 @@ PlatformMaxCpuCountInitialization ( IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob ) { - UINT16 BootCpuCount; + UINT16 BootCpuCount = 0; UINT32 MaxCpuCount; // // Try to fetch the boot CPU count. // - QemuFwCfgSelectItem (QemuFwCfgItemSmpCpuCount); - BootCpuCount = QemuFwCfgRead16 (); + if (QemuFwCfgIsAvailable ()) { + QemuFwCfgSelectItem (QemuFwCfgItemSmpCpuCount); + BootCpuCount = QemuFwCfgRead16 (); + } + if (BootCpuCount == 0) { // // QEMU doesn't report the boot CPU count. (BootCpuCount == 0) will let diff --git a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c index b5768285d8..67d29ac642 100644 --- a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c +++ b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c @@ -2233,6 +2233,11 @@ GetFrontPageTimeoutFromQemu ( { FIRMWARE_CONFIG_ITEM BootMenuWaitItem; UINTN BootMenuWaitSize; + UINT16 Timeout = PcdGet16 (PcdPlatformBootTimeOut); + + if (!QemuFwCfgIsAvailable ()) { + return Timeout; + } QemuFwCfgSelectItem (QemuFwCfgItemBootMenu); if (QemuFwCfgRead16 () == 0) { @@ -2257,9 +2262,6 @@ GetFrontPageTimeoutFromQemu ( // return three seconds if the platform default would cause us to skip the // front page, and return the platform default otherwise. // - UINT16 Timeout; - - Timeout = PcdGet16 (PcdPlatformBootTimeOut); if (Timeout == 0) { Timeout = 3; }