149 lines
5.8 KiB
Diff
149 lines
5.8 KiB
Diff
From 4ef57a1e6b9411e785e00e8874bd5c67235e9134 Mon Sep 17 00:00:00 2001
|
|
From: Laszlo Ersek <lersek@redhat.com>
|
|
Date: Tue, 11 Feb 2020 17:01:59 +0100
|
|
Subject: [PATCH 1/2] MdeModulePkg: Enable/Disable S3BootScript dynamically.
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Laszlo Ersek <lersek@redhat.com>
|
|
Message-id: <20200211170200.12389-2-lersek@redhat.com>
|
|
Patchwork-id: 93776
|
|
O-Subject: [RHEL-8.2.0 edk2 PATCH 1/2] MdeModulePkg: Enable/Disable S3BootScript dynamically.
|
|
Bugzilla: 1801274
|
|
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
|
|
From: Chasel Chiu <chasel.chiu@intel.com>
|
|
|
|
--v-- RHEL8 note start --v--
|
|
|
|
This patch is cherry-picked from upstream as a contextual (not semantic /
|
|
functional) pre-requisite for the next patch.
|
|
|
|
Functionally, this patch makes no difference in OVMF, for two reasons:
|
|
|
|
- Downstream, we don't enable S3 anyway (per QEMU default).
|
|
|
|
- The S3-related modules that are built into OVMF (S3SaveStateDxe,
|
|
BootScriptExecutorDxe) already consider PcdAcpiS3Enable, and exit their
|
|
entry point functions with EFI_UNSUPPORTED when the PCD is FALSE. As a
|
|
consequence, the DESTRUCTOR function of the PiDxeS3BootScriptLib library
|
|
instance (which is linked into those binaries) will undo whatever the
|
|
CONSTRUCTOR function did; no resources will be leaked.
|
|
|
|
https://edk2.groups.io/g/devel/message/47996
|
|
http://mid.mail-archive.com/e43e3f56-d2db-7989-b6f1-03e1c810d908@redhat.com
|
|
|
|
--^-- RHEL8 note end --^--
|
|
|
|
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2212
|
|
|
|
In binary model the same binary may have to support both
|
|
S3 enabled and disabled scenarios, however not all DXE
|
|
drivers linking PiDxeS3BootScriptLib can return error to
|
|
invoke library DESTRUCTOR for releasing resource.
|
|
|
|
To support this usage model below PCD is used to skip
|
|
S3BootScript functions when PCD set to FALSE:
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable
|
|
|
|
Test: Verified on internal platform and S3BootScript
|
|
functions can be skipped by PCD during boot time.
|
|
|
|
Cc: Hao A Wu <hao.a.wu@intel.com>
|
|
Cc: Eric Dong <eric.dong@intel.com>
|
|
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
|
|
Cc: Liming Gao <liming.gao@intel.com>
|
|
Cc: Laszlo Ersek <lersek@redhat.com>
|
|
Signed-off-by: Chasel Chiu <chasel.chiu@intel.com>
|
|
Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
|
|
Reviewed-by: Eric Dong <eric.dong@intel.com>
|
|
Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
(cherry picked from commit ed9db1b91ceba7d3a24743d4d9314c6fbe11c4b3)
|
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
|
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
---
|
|
.../Library/PiDxeS3BootScriptLib/BootScriptSave.c | 17 ++++++++++++++++-
|
|
.../Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf | 4 ++--
|
|
2 files changed, 18 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptSave.c b/MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptSave.c
|
|
index c116727..9106e7d 100644
|
|
--- a/MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptSave.c
|
|
+++ b/MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptSave.c
|
|
@@ -1,7 +1,7 @@
|
|
/** @file
|
|
Save the S3 data to S3 boot script.
|
|
|
|
- Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
|
+ Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
@@ -124,6 +124,7 @@ VOID *mRegistrationSmmReadyToLock = NULL;
|
|
BOOLEAN mS3BootScriptTableAllocated = FALSE;
|
|
BOOLEAN mS3BootScriptTableSmmAllocated = FALSE;
|
|
EFI_SMM_SYSTEM_TABLE2 *mBootScriptSmst = NULL;
|
|
+BOOLEAN mAcpiS3Enable = TRUE;
|
|
|
|
/**
|
|
This is an internal function to add a terminate node the entry, recalculate the table
|
|
@@ -436,6 +437,12 @@ S3BootScriptLibInitialize (
|
|
BOOLEAN InSmm;
|
|
EFI_PHYSICAL_ADDRESS Buffer;
|
|
|
|
+ if (!PcdGetBool (PcdAcpiS3Enable)) {
|
|
+ mAcpiS3Enable = FALSE;
|
|
+ DEBUG ((DEBUG_INFO, "%a: Skip S3BootScript because ACPI S3 disabled.\n", gEfiCallerBaseName));
|
|
+ return RETURN_SUCCESS;
|
|
+ }
|
|
+
|
|
S3TablePtr = (SCRIPT_TABLE_PRIVATE_DATA*)(UINTN)PcdGet64(PcdS3BootScriptTablePrivateDataPtr);
|
|
//
|
|
// The Boot script private data is not be initialized. create it
|
|
@@ -562,6 +569,10 @@ S3BootScriptLibDeinitialize (
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
+ if (!mAcpiS3Enable) {
|
|
+ return RETURN_SUCCESS;
|
|
+ }
|
|
+
|
|
DEBUG ((EFI_D_INFO, "%a() in %a module\n", __FUNCTION__, gEfiCallerBaseName));
|
|
|
|
if (mEventDxeSmmReadyToLock != NULL) {
|
|
@@ -810,6 +821,10 @@ S3BootScriptGetEntryAddAddress (
|
|
{
|
|
UINT8* NewEntryPtr;
|
|
|
|
+ if (!mAcpiS3Enable) {
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
if (mS3BootScriptTablePtr->SmmLocked) {
|
|
//
|
|
// We need check InSmm, because after SmmReadyToLock, only SMM driver is allowed to write boot script.
|
|
diff --git a/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf b/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
|
|
index 517ea69..2b894c9 100644
|
|
--- a/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
|
|
+++ b/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
|
|
@@ -1,7 +1,7 @@
|
|
## @file
|
|
# DXE S3 boot script Library.
|
|
#
|
|
-# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
+# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
#
|
|
@@ -65,4 +65,4 @@
|
|
## SOMETIMES_PRODUCES
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptRuntimeTableReservePageNumber ## CONSUMES
|
|
-
|
|
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable ## CONSUMES
|
|
--
|
|
1.8.3.1
|
|
|