diff options
author | Yao, Jiewen <jiewen.yao@intel.com> | 2015-11-25 13:14:27 +0000 |
---|---|---|
committer | Jeff Fan <jeff.fan@intel.com> | 2016-06-20 08:57:06 +0800 |
commit | 73d9e6cf1dec10d9dc8ed2f0496e2ae24b890cc1 (patch) | |
tree | 6f86a803bb8f725833cc154e459b944671ea2d2e | |
parent | adb7b1b332e6a42265f29034c2775aef13ef53bb (diff) | |
download | edk2-73d9e6cf1dec10d9dc8ed2f0496e2ae24b890cc1.tar.gz |
Move CommunicationBuffer from stack to global variable.
We had put communication buffer to Runtime memory,
so that SMI handler can know it is not used by OS.
(Sync patch r18949 from main trunk.)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <jiewen.yao@intel.com>
Reviewed-by: "Zeng, Star" <star.zeng@intel.com>
Reviewed-by: "Kinney, Michael D" <michael.d.kinney@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18949 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c b/MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c index 21c69ca6ef..efe6edbb48 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
//
@@ -527,21 +529,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);
}
/**
@@ -558,7 +559,6 @@ SmmIplDxeDispatchEventNotify ( IN VOID *Context
)
{
- EFI_SMM_COMMUNICATE_HEADER CommunicateHeader;
UINTN Size;
EFI_STATUS Status;
@@ -571,20 +571,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;
}
|