On 2015/11/24 21:00, jiewen yao wrote:
We had put communication buffer to Runtime memory,
so that SMI handler can know it is not used by OS.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <[email protected]>
Cc: "Zeng, Star" <[email protected]>
Cc: "Fan, Jeff" <[email protected]>
Cc: "Kinney, Michael D" <[email protected]>
---
  MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c | 26 +++++++++++++-------------
  1 file changed, 13 insertions(+), 13 deletions(-)


Reviewed-by: Star Zeng <[email protected]>


diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c 
b/MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c
index c534ee3..50c3b34 100644
--- a/MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c
+++ b/MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c
@@ -246,6 +246,8 @@ BOOLEAN                    mSmmLocked = FALSE;
  EFI_PHYSICAL_ADDRESS       mSmramCacheBase;
  UINT64                     mSmramCacheSize;

+EFI_SMM_COMMUNICATE_HEADER mCommunicateHeader;
+
  //
  // Table of Protocol notification and GUIDed Event notifications that the SMM 
IPL requires
  //
@@ -538,21 +540,20 @@ SmmIplGuidedEventNotify (
    IN VOID       *Context
    )
  {
-  EFI_SMM_COMMUNICATE_HEADER  CommunicateHeader;
    UINTN                       Size;

    //
    // Use Guid to initialize EFI_SMM_COMMUNICATE_HEADER structure
    //
-  CopyGuid (&CommunicateHeader.HeaderGuid, (EFI_GUID *)Context);
-  CommunicateHeader.MessageLength = 1;
-  CommunicateHeader.Data[0] = 0;
+  CopyGuid (&mCommunicateHeader.HeaderGuid, (EFI_GUID *)Context);
+  mCommunicateHeader.MessageLength = 1;
+  mCommunicateHeader.Data[0] = 0;

    //
    // Generate the Software SMI and return the result
    //
-  Size = sizeof (CommunicateHeader);
-  SmmCommunicationCommunicate (&mSmmCommunication, &CommunicateHeader, &Size);
+  Size = sizeof (mCommunicateHeader);
+  SmmCommunicationCommunicate (&mSmmCommunication, &mCommunicateHeader, &Size);
  }

  /**
@@ -569,7 +570,6 @@ SmmIplDxeDispatchEventNotify (
    IN VOID       *Context
    )
  {
-  EFI_SMM_COMMUNICATE_HEADER  CommunicateHeader;
    UINTN                       Size;
    EFI_STATUS                  Status;

@@ -582,20 +582,20 @@ SmmIplDxeDispatchEventNotify (
      // Clear the buffer passed into the Software SMI.  This buffer will return
      // the status of the SMM Core Dispatcher.
      //
-    CopyGuid (&CommunicateHeader.HeaderGuid, (EFI_GUID *)Context);
-    CommunicateHeader.MessageLength = 1;
-    CommunicateHeader.Data[0] = 0;
+    CopyGuid (&mCommunicateHeader.HeaderGuid, (EFI_GUID *)Context);
+    mCommunicateHeader.MessageLength = 1;
+    mCommunicateHeader.Data[0] = 0;

      //
      // Generate the Software SMI and return the result
      //
-    Size = sizeof (CommunicateHeader);
-    SmmCommunicationCommunicate (&mSmmCommunication, &CommunicateHeader, 
&Size);
+    Size = sizeof (mCommunicateHeader);
+    SmmCommunicationCommunicate (&mSmmCommunication, &mCommunicateHeader, 
&Size);

      //
      // Return if there is no request to restart the SMM Core Dispatcher
      //
-    if (CommunicateHeader.Data[0] != COMM_BUFFER_SMM_DISPATCH_RESTART) {
+    if (mCommunicateHeader.Data[0] != COMM_BUFFER_SMM_DISPATCH_RESTART) {
        return;
      }



_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to