]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: AcpiS3SaveDxe: do not load if S3 is unsupported/disabled in qemu
authorLaszlo Ersek <lersek@redhat.com>
Mon, 31 Mar 2014 20:35:58 +0000 (20:35 +0000)
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 31 Mar 2014 20:35:58 +0000 (20:35 +0000)
The previous patch ensures that the LockBox is protected during DXE (but
the OS can still drop it) if S3 is unsupported or disabled. However, S3
related drivers not only save data in the lockbox, they allocate objects
with Reserved and AcpiNVS memory types too, which the OS can't (must not)
release. This is a waste when S3 is unsupported or disabled.

In OVMF a good "choke point" for these drivers is the entry point of
AcpiS3SaveDxe. The messages of the following commits are relevant to the
data and control flow:

- SVN r15290 (git commit 8f5ca05b)
- SVN r15305 (git commit 5a217a06)
- SVN r15306 (git commit d4ba06df)

Prevent AcpiS3SaveDxe from loading when S3 is unsupported or disabled.
This should keep away (most of the) dependent drivers too.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Matt Fleming <matt.fleming@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15419 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c
OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf

index a4de911d41debef8b9f9f7398cd6c159e2823c81..f322981b536522ede3519b916d8e0b0e7ecdafc9 100644 (file)
@@ -24,6 +24,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/LockBoxLib.h>\r
 #include <Library/PcdLib.h>\r
 #include <Library/DebugLib.h>\r
+#include <Library/QemuFwCfgLib.h>\r
 #include <Guid/AcpiVariableCompatibility.h>\r
 #include <Guid/AcpiS3Context.h>\r
 #include <Guid/Acpi.h>\r
@@ -586,6 +587,10 @@ InstallAcpiS3Save (
 {\r
   EFI_STATUS        Status;\r
 \r
+  if (!QemuFwCfgS3Enabled()) {\r
+    return EFI_LOAD_ERROR;\r
+  }\r
+\r
   if (!FeaturePcdGet(PcdPlatformCsmSupport)) {\r
     //\r
     // More memory for no CSM tip, because GDT need relocation\r
index fd26a05d368bb0f1a63155b62791074b9de510a2..b53e7850e39453ca8164f6a559fbb6dc7ea8e4f9 100644 (file)
@@ -38,6 +38,7 @@
   MdeModulePkg/MdeModulePkg.dec\r
   IntelFrameworkPkg/IntelFrameworkPkg.dec\r
   IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec\r
+  OvmfPkg/OvmfPkg.dec\r
 \r
 [LibraryClasses]\r
   PcdLib\r
@@ -50,6 +51,7 @@
   LockBoxLib\r
   DebugLib\r
   DxeServicesLib\r
+  QemuFwCfgLib\r
 \r
 [Guids]\r
   gEfiAcpiVariableGuid                          # ALWAYS_CONSUMED\r