diff --git a/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c b/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c
index f05764af8b..5eb33e0587 100644
--- a/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c
+++ b/OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c
@@ -29,6 +29,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Guid/AcpiVariableCompatibility.h>
 #include <Guid/AcpiS3Context.h>
 #include <Guid/Acpi.h>
+#include <Guid/EventGroup.h>
 #include <Protocol/AcpiS3Save.h>
 #include <Protocol/S3SaveState.h>
 #include <Protocol/DxeSmmReadyToLock.h>
@@ -570,6 +571,40 @@ S3Ready (
   return EFI_SUCCESS;
 }
 
+/**
+  Callback function executed when the EndOfDxe event group is signaled.
+
+  @param[in] Event    Event whose notification function is being invoked.
+  @param[in] Context  The pointer to the notification function's context, which
+                      is implementation-dependent.
+**/
+VOID
+EFIAPI
+OnEndOfDxe (
+  IN EFI_EVENT Event,
+  IN VOID      *Context
+  )
+{
+  EFI_STATUS Status;
+
+  //
+  // Our S3Ready() function ignores both of its parameters, and always
+  // succeeds.
+  //
+  Status = S3Ready (
+             NULL, // This
+             NULL  // LegacyMemoryAddress
+             );
+  ASSERT_EFI_ERROR (Status);
+
+  //
+  // Close the event, deregistering the callback and freeing resources.
+  //
+  Status = gBS->CloseEvent (Event);
+  ASSERT_EFI_ERROR (Status);
+}
+
+
 /**
   The Driver Entry Point.
   
@@ -591,6 +626,7 @@ InstallAcpiS3Save (
   )
 {
   EFI_STATUS        Status;
+  EFI_EVENT         EndOfDxeEvent;
 
   if (!QemuFwCfgS3Enabled()) {
     return EFI_LOAD_ERROR;
@@ -612,5 +648,15 @@ InstallAcpiS3Save (
                   NULL
                   );
   ASSERT_EFI_ERROR (Status);
+
+  Status = gBS->CreateEventEx (
+                  EVT_NOTIFY_SIGNAL,
+                  TPL_CALLBACK,
+                  OnEndOfDxe,
+                  NULL, /* NotifyContext */
+                  &gEfiEndOfDxeEventGroupGuid,
+                  &EndOfDxeEvent
+                  );
+  ASSERT_EFI_ERROR (Status);
   return Status;
 }
diff --git a/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf b/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
index ae56a2079c..81da2fb80c 100644
--- a/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
+++ b/OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
@@ -58,6 +58,7 @@
   gEfiAcpiS3ContextGuid                         # ALWAYS_CONSUMED
   gEfiAcpi20TableGuid                           # ALWAYS_CONSUMED  System Table
   gEfiAcpi10TableGuid                           # ALWAYS_CONSUMED  System Table
+  gEfiEndOfDxeEventGroupGuid                    ## CONSUMES  ## Event
 
 [Protocols]
   gEfiAcpiS3SaveProtocolGuid                    # PROTOCOL ALWAYS_PRODUCED