From: Michael Kinney <michael.d.kinney@intel.com>
To: edk2-devel@lists.01.org
Cc: Liming Gao <liming.gao@intel.com>,
Laszlo Ersek <lersek@redhat.com>, Andrew Fish <afish@apple.com>,
Jeff Fan <jeff.fan@intel.com>
Subject: [Patch] UefiCpuPkg/PiSmmCpuDxeSmm: Add volatile to mNumberToFinish
Date: Wed, 16 Nov 2016 21:34:44 -0800 [thread overview]
Message-ID: <1479360884-16708-1-git-send-email-michael.d.kinney@intel.com> (raw)
Add volatile qualifier to mNumberToFinish to prevent compiler
optimization. Also update TransferApToSafeState() to pass in
UINTN values and treat the mNumberToFinish as an address value
that is passed to the assembly code.
Cc: Liming Gao <liming.gao@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Jeff Fan <jeff.fan@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <michael.d.kinney@intel.com>
---
UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c | 10 +++++-----
UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c | 18 +++++++++---------
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h | 12 ++++++------
UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c | 18 +++++++++---------
4 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c
index 3fb6864..4531298 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c
@@ -55,7 +55,7 @@ AsmGetAddressMap (
#define LEGACY_REGION_BASE (0xA0000 - LEGACY_REGION_SIZE)
ACPI_CPU_DATA mAcpiCpuData;
-UINT32 mNumberToFinish;
+volatile UINT32 mNumberToFinish;
MP_CPU_EXCHANGE_INFO *mExchangeInfo;
BOOLEAN mRestoreSmmConfigurationInS3 = FALSE;
VOID *mGdtForAp = NULL;
@@ -385,7 +385,7 @@ MPRendezvousProcedure (
CPU_REGISTER_TABLE *RegisterTableList;
UINT32 InitApicId;
UINTN Index;
- UINT32 TopOfStack;
+ UINTN TopOfStack;
UINT8 Stack[128];
ProgramVirtualWireMode ();
@@ -403,10 +403,10 @@ MPRendezvousProcedure (
//
// Place AP into the safe code, count down the number with lock mechanism in the safe code.
//
- TopOfStack = (UINT32) (UINTN) Stack + sizeof (Stack);
- TopOfStack &= ~(UINT32) (CPU_STACK_ALIGNMENT - 1);
+ TopOfStack = (UINTN) Stack + sizeof (Stack);
+ TopOfStack &= ~(CPU_STACK_ALIGNMENT - 1);
CopyMem ((VOID *) (UINTN) mApHltLoopCode, mApHltLoopCodeTemplate, sizeof (mApHltLoopCodeTemplate));
- TransferApToSafeState ((UINT32) (UINTN) mApHltLoopCode, TopOfStack, &mNumberToFinish);
+ TransferApToSafeState ((UINTN)mApHltLoopCode, TopOfStack, (UINTN)(VOID *)&mNumberToFinish);
}
/**
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c
index 9760373..d57eb33 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmFuncsArch.c
@@ -98,23 +98,23 @@ InitGdt (
/**
Transfer AP to safe hlt-loop after it finished restore CPU features on S3 patch.
- @param[in] ApHltLoopCode The 32-bit address of the safe hlt-loop function.
- @param[in] TopOfStack A pointer to the new stack to use for the ApHltLoopCode.
- @param[in] NumberToFinish Semaphore of APs finish count.
+ @param[in] ApHltLoopCode The 32-bit address of the safe hlt-loop function.
+ @param[in] TopOfStack A pointer to the new stack to use for the ApHltLoopCode.
+ @param[in] NumberToFinishAddress Address of Semaphore of APs finish count.
**/
VOID
TransferApToSafeState (
- IN UINT32 ApHltLoopCode,
- IN UINT32 TopOfStack,
- IN UINT32 *NumberToFinish
+ IN UINTN ApHltLoopCode,
+ IN UINTN TopOfStack,
+ IN UINTN NumberToFinishAddress
)
{
SwitchStack (
- (SWITCH_STACK_ENTRY_POINT) (UINTN) ApHltLoopCode,
- NumberToFinish,
+ (SWITCH_STACK_ENTRY_POINT)ApHltLoopCode,
+ (VOID *)NumberToFinishAddress,
NULL,
- (VOID *) (UINTN) TopOfStack
+ (VOID *)TopOfStack
);
//
// It should never reach here
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
index 88d9c85..38dd9fa 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
@@ -828,16 +828,16 @@ GetAcpiS3EnableFlag (
/**
Transfer AP to safe hlt-loop after it finished restore CPU features on S3 patch.
- @param[in] ApHltLoopCode The 32-bit address of the safe hlt-loop function.
- @param[in] TopOfStack A pointer to the new stack to use for the ApHltLoopCode.
- @param[in] NumberToFinish Semaphore of APs finish count.
+ @param[in] ApHltLoopCode The 32-bit address of the safe hlt-loop function.
+ @param[in] TopOfStack A pointer to the new stack to use for the ApHltLoopCode.
+ @param[in] NumberToFinishAddress Address of Semaphore of APs finish count.
**/
VOID
TransferApToSafeState (
- IN UINT32 ApHltLoopCode,
- IN UINT32 TopOfStack,
- IN UINT32 *NumberToFinish
+ IN UINTN ApHltLoopCode,
+ IN UINTN TopOfStack,
+ IN UINTN NumberToFinishAddress
);
#endif
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c
index 6844c3f..d45fed2 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c
@@ -103,24 +103,24 @@ GetProtectedModeCS (
/**
Transfer AP to safe hlt-loop after it finished restore CPU features on S3 patch.
- @param[in] ApHltLoopCode The 32-bit address of the safe hlt-loop function.
- @param[in] TopOfStack A pointer to the new stack to use for the ApHltLoopCode.
- @param[in] NumberToFinish Semaphore of APs finish count.
+ @param[in] ApHltLoopCode The 32-bit address of the safe hlt-loop function.
+ @param[in] TopOfStack A pointer to the new stack to use for the ApHltLoopCode.
+ @param[in] NumberToFinishAddress Address of Semaphore of APs finish count.
**/
VOID
TransferApToSafeState (
- IN UINT32 ApHltLoopCode,
- IN UINT32 TopOfStack,
- IN UINT32 *NumberToFinish
+ IN UINTN ApHltLoopCode,
+ IN UINTN TopOfStack,
+ IN UINTN NumberToFinishAddress
)
{
AsmDisablePaging64 (
GetProtectedModeCS (),
- (UINT32) (UINTN) ApHltLoopCode,
- (UINT32) (UINTN) NumberToFinish,
+ (UINT32)ApHltLoopCode,
+ (UINT32)NumberToFinishAddress,
0,
- TopOfStack
+ (UINT32)TopOfStack
);
//
// It should never reach here
--
2.6.3.windows.1
next reply other threads:[~2016-11-17 5:34 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-17 5:34 Michael Kinney [this message]
2016-11-17 10:21 ` [Patch] UefiCpuPkg/PiSmmCpuDxeSmm: Add volatile to mNumberToFinish Laszlo Ersek
2016-11-17 16:06 ` Kinney, Michael D
2016-11-17 20:59 ` Kinney, Michael D
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1479360884-16708-1-git-send-email-michael.d.kinney@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox