Skip to content

Commit

Permalink
UefiCpuPkg/PiSmmCpuDxeSmm: Consume SmmCpuPlatformHookBeforeMmiHandler…
Browse files Browse the repository at this point in the history
… func

This patch is for PiSmmCpuDxeSmm driver to add one round wait/release sync
for BSP and AP to perform the SMM CPU Platform Hook before executing MMI
Handler: SmmCpuPlatformHookBeforeMmiHandler (). With the function, SMM CPU
driver can perform the platform specific items after BSP and AP finish the
sync and before the MMI handlers.

Signed-off-by: Jiaxin Wu <[email protected]>
  • Loading branch information
jiaxinwu committed Oct 12, 2024
1 parent 0611e55 commit f7cf7d5
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,16 +520,18 @@ BSPHandler (
ApCount = CpuCount - 1;

//
// Wait for all APs to get ready for programming MTRRs
// Wait for all APs of arrival at this point
//
SmmCpuSyncWaitForAPs (mSmmMpSyncData->SyncContext, ApCount, CpuIndex);

if (SmmCpuFeaturesNeedConfigureMtrrs ()) {
//
// Signal all APs it's time for backup MTRRs
//
ReleaseAllAPs ();
//
// Signal all APs it's time for:
// 1. Backup MTRRs if needed.
// 2. Perform SMM CPU Platform Hook before executing MMI Handler.
//
ReleaseAllAPs ();

if (SmmCpuFeaturesNeedConfigureMtrrs ()) {
//
// SmmCpuSyncWaitForAPs() may wait for ever if an AP happens to enter SMM at
// exactly this point. Please make sure PcdCpuSmmMaxSyncLoops has been set
Expand Down Expand Up @@ -564,6 +566,11 @@ BSPHandler (
}
}

//
// Perform SMM CPU Platform Hook before executing MMI Handler
//
SmmCpuPlatformHookBeforeMmiHandler ();

//
// The BUSY lock is initialized to Acquired state
//
Expand Down Expand Up @@ -806,14 +813,16 @@ APHandler (
// Notify BSP of arrival at this point
//
SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
}

if (SmmCpuFeaturesNeedConfigureMtrrs ()) {
//
// Wait for the signal from BSP to backup MTRRs
// Wait for the signal from BSP to:
// 1. Backup MTRRs if needed.
// 2. Perform SMM CPU Platform Hook before executing MMI Handler.
//
SmmCpuSyncWaitForBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
}

if (SmmCpuFeaturesNeedConfigureMtrrs ()) {
//
// Backup OS MTRRs
//
Expand All @@ -840,6 +849,11 @@ APHandler (
SmmCpuSyncReleaseBsp (mSmmMpSyncData->SyncContext, CpuIndex, BspIndex);
}

//
// Perform SMM CPU Platform Hook before executing MMI Handler
//
SmmCpuPlatformHookBeforeMmiHandler ();

while (TRUE) {
//
// Wait for something to happen
Expand Down

0 comments on commit f7cf7d5

Please sign in to comment.