summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiaxin Wu <jiaxin.wu@intel.com>2024-10-12 11:03:50 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2024-10-12 08:56:05 +0000
commit2351165f1b8252269a36d625823743d9f6c243b9 (patch)
treeb6b2c054609ed81f01e4dbf3301bd3b4ab8297f6
parentd2a41d1a7a555e54336e03731c801eb93fba801d (diff)
downloadedk2-2351165f1b8252269a36d625823743d9f6c243b9.tar.gz
UefiCpuPkg/PiSmmCpuDxeSmm: Clarification for BSP & APs Sync Flow
This patch does not impact functionality. It aims to clarify the synchronization flow between the BSP and APs to enhance code readability and understanding: Steps #6 and #11 are the basic synchronization requirements for all cases. Steps #1 is additional requirements if the MmCpuSyncModeTradition mode is selected. Steps #1, #2, #3, #4, #5, #7, #8, #9, and #10 are additional requirements if the system needs to configure the MTRR. Steps #9 and #10 are additional requirements if the system needs to support the mSmmDebugAgentSupport. Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
-rw-r--r--UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
index 210b23af21..2df2cb9f22 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
@@ -522,13 +522,13 @@ BSPHandler (
//
// Wait for all APs to get ready for programming MTRRs
//
- SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex);
+ SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex); /// #1: Wait APs
if (SmmCpuFeaturesNeedConfigureMtrrs ()) {
//
// Signal all APs it's time for backup MTRRs
//
- ReleaseAllAPs ();
+ ReleaseAllAPs (); /// #2: Signal APs
//
// SmmCpuSyncWaitForAPs() may wait for ever if an AP happens to enter SMM at
@@ -543,12 +543,12 @@ BSPHandler (
//
// Wait for all APs to complete their MTRR saving
//
- SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex);
+ SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex); /// #3: Wait APs
//
// Let all processors program SMM MTRRs together
//
- ReleaseAllAPs ();
+ ReleaseAllAPs (); /// #4: Signal APs
//
// SmmCpuSyncWaitForAPs() may wait for ever if an AP happens to enter SMM at
@@ -560,7 +560,7 @@ BSPHandler (
//
// Wait for all APs to complete their MTRR programming
//
- SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex);
+ SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex); /// #5: Wait APs
}
}
@@ -625,18 +625,18 @@ BSPHandler (
// Notify all APs to exit
//
*mSmmMpSyncData->InsideSmm = FALSE;
- ReleaseAllAPs ();
+ ReleaseAllAPs (); /// #6: Signal APs
if (SmmCpuFeaturesNeedConfigureMtrrs ()) {
//
// Wait for all APs the readiness to program MTRRs
//
- SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex);
+ SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex); /// #7: Wait APs
//
// Signal APs to restore MTRRs
//
- ReleaseAllAPs ();
+ ReleaseAllAPs (); /// #8: Signal APs
//
// Restore OS MTRRs
@@ -649,12 +649,12 @@ BSPHandler (
//
// Wait for all APs to complete their pending tasks including MTRR programming if needed.
//
- SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex);
+ SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex); /// #9: Wait APs
//
// Signal APs to Reset states/semaphore for this processor
//
- ReleaseAllAPs ();
+ ReleaseAllAPs (); /// #10: Signal APs
}
if (mSmmDebugAgentSupport) {
@@ -679,7 +679,7 @@ BSPHandler (
// Gather APs to exit SMM synchronously. Note the Present flag is cleared by now but
// WaitForAllAps does not depend on the Present flag.
//
- SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex);
+ SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex); /// #11: Wait APs
//
// At this point, all APs should have exited from APHandler().
@@ -805,14 +805,14 @@ APHandler (
//
// Notify BSP of arrival at this point
//
- SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #1: Signal BSP
}
if (SmmCpuFeaturesNeedConfigureMtrrs ()) {
//
// Wait for the signal from BSP to backup MTRRs
//
- SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #2: Wait BSP
//
// Backup OS MTRRs
@@ -822,12 +822,12 @@ APHandler (
//
// Signal BSP the completion of this AP
//
- SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #3: Signal BSP
//
// Wait for BSP's signal to program MTRRs
//
- SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #4: Wait BSP
//
// Replace OS MTRRs with SMI MTRRs
@@ -837,14 +837,14 @@ APHandler (
//
// Signal BSP the completion of this AP
//
- SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #5: Signal BSP
}
while (TRUE) {
//
// Wait for something to happen
//
- SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #6: Wait BSP
//
// Check if BSP wants to exit SMM
@@ -884,12 +884,12 @@ APHandler (
//
// Notify BSP the readiness of this AP to program MTRRs
//
- SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #7: Signal BSP
//
// Wait for the signal from BSP to program MTRRs
//
- SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #8: Wait BSP
//
// Restore OS MTRRs
@@ -902,12 +902,12 @@ APHandler (
//
// Notify BSP the readiness of this AP to Reset states/semaphore for this processor
//
- SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #9: Signal BSP
//
// Wait for the signal from BSP to Reset states/semaphore for this processor
//
- SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #10: Wait BSP
}
//
@@ -918,7 +918,7 @@ APHandler (
//
// Notify BSP the readiness of this AP to exit SMM
//
- SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
+ SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex); /// #11: Signal BSP
}
/**